mirror of
https://github.com/kubeshark/kubeshark.git
synced 2026-03-17 10:02:17 +00:00
Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f8c0ddd69a | ||
|
|
2253737625 | ||
|
|
4a0294c61a | ||
|
|
9053c58146 | ||
|
|
5d5b13fc86 | ||
|
|
af61c69fb6 | ||
|
|
94dfa68858 | ||
|
|
50c0062db4 | ||
|
|
720969bbe6 |
@@ -1,6 +1,6 @@
|
|||||||
import React, {useEffect, useState} from "react";
|
import React, {useEffect, useState} from "react";
|
||||||
import { Button } from "@material-ui/core";
|
import { Button } from "@material-ui/core";
|
||||||
import Api,{getWebsocketUrl} from "../../../helpers/api";
|
import Api, { MizuWebsocketURL } from "../../../helpers/api";
|
||||||
import debounce from 'lodash/debounce';
|
import debounce from 'lodash/debounce';
|
||||||
import {useSetRecoilState, useRecoilState} from "recoil";
|
import {useSetRecoilState, useRecoilState} from "recoil";
|
||||||
import {useCommonStyles} from "../../../helpers/commonStyle"
|
import {useCommonStyles} from "../../../helpers/commonStyle"
|
||||||
@@ -65,7 +65,7 @@ const trafficViewerApi = {...api}
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<TrafficViewer setAnalyzeStatus={setAnalyzeStatus} webSocketUrl={getWebsocketUrl()} isCloseWebSocket={!openWebSocket}
|
<TrafficViewer setAnalyzeStatus={setAnalyzeStatus} webSocketUrl={MizuWebsocketURL} isCloseWebSocket={!openWebSocket}
|
||||||
trafficViewerApiProp={trafficViewerApi} actionButtons={actionButtons} isShowStatusBar={!openOasModal} isDemoBannerView={false}/>
|
trafficViewerApiProp={trafficViewerApi} actionButtons={actionButtons} isShowStatusBar={!openOasModal} isDemoBannerView={false}/>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -100,6 +100,7 @@ export const ServiceMapModal: React.FC<ServiceMapModalProps> = ({ isOpen, onOpen
|
|||||||
const commonClasses = useCommonStyles();
|
const commonClasses = useCommonStyles();
|
||||||
const [isLoading, setIsLoading] = useState<boolean>(true);
|
const [isLoading, setIsLoading] = useState<boolean>(true);
|
||||||
const [graphData, setGraphData] = useState<GraphData>({ nodes: [], edges: [] });
|
const [graphData, setGraphData] = useState<GraphData>({ nodes: [], edges: [] });
|
||||||
|
const [graphOptions, setGraphOptions] = useState(ServiceMapOptions);
|
||||||
|
|
||||||
const getServiceMapData = useCallback(async () => {
|
const getServiceMapData = useCallback(async () => {
|
||||||
try {
|
try {
|
||||||
@@ -149,6 +150,14 @@ export const ServiceMapModal: React.FC<ServiceMapModalProps> = ({ isOpen, onOpen
|
|||||||
// eslint-disable-next-line
|
// eslint-disable-next-line
|
||||||
}, [isOpen])
|
}, [isOpen])
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if(graphData?.nodes?.length === 0) return;
|
||||||
|
let options = {...graphOptions};
|
||||||
|
options.physics.barnesHut.avoidOverlap = graphData?.nodes?.length > 10 ? 0 : 1;
|
||||||
|
setGraphOptions(options);
|
||||||
|
// eslint-disable-next-line
|
||||||
|
},[graphData?.nodes?.length])
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
getServiceMapData();
|
getServiceMapData();
|
||||||
return () => setGraphData({ nodes: [], edges: [] })
|
return () => setGraphData({ nodes: [], edges: [] })
|
||||||
@@ -180,7 +189,7 @@ export const ServiceMapModal: React.FC<ServiceMapModalProps> = ({ isOpen, onOpen
|
|||||||
<div style={{ display: "flex", justifyContent: "space-between" }}>
|
<div style={{ display: "flex", justifyContent: "space-between" }}>
|
||||||
<div>
|
<div>
|
||||||
<Button
|
<Button
|
||||||
startIcon={<img src={refresh} className="custom" alt="refresh" style={{ marginRight: "8%" }}></img>}
|
startIcon={<img src={refresh} className="custom" alt="refresh" style={{ marginRight: "8%" }}/>}
|
||||||
size="medium"
|
size="medium"
|
||||||
variant="contained"
|
variant="contained"
|
||||||
className={commonClasses.outlinedButton + " " + commonClasses.imagedButton}
|
className={commonClasses.outlinedButton + " " + commonClasses.imagedButton}
|
||||||
@@ -189,20 +198,20 @@ export const ServiceMapModal: React.FC<ServiceMapModalProps> = ({ isOpen, onOpen
|
|||||||
Refresh
|
Refresh
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
<img src={close} alt="close" onClick={() => onClose()} style={{ cursor: "pointer" }}></img>
|
<img src={close} alt="close" onClick={() => onClose()} style={{ cursor: "pointer" }}/>
|
||||||
</div>
|
</div>
|
||||||
<Graph
|
<Graph
|
||||||
graph={graphData}
|
graph={graphData}
|
||||||
options={ServiceMapOptions}
|
options={graphOptions}
|
||||||
/>
|
/>
|
||||||
<div className='legend-scale'>
|
<div className='legend-scale'>
|
||||||
<ul className='legend-labels'>
|
<ul className='legend-labels'>
|
||||||
<li><span style={{ background: '#205cf5' }}></span>HTTP</li>
|
<li><span style={{ background: '#205cf5' }}/>HTTP</li>
|
||||||
<li><span style={{ background: '#244c5a' }}></span>HTTP/2</li>
|
<li><span style={{ background: '#244c5a' }}/>HTTP/2</li>
|
||||||
<li><span style={{ background: '#244c5a' }}></span>gRPC</li>
|
<li><span style={{ background: '#244c5a' }}/>gRPC</li>
|
||||||
<li><span style={{ background: '#ff6600' }}></span>AMQP</li>
|
<li><span style={{ background: '#ff6600' }}/>AMQP</li>
|
||||||
<li><span style={{ background: '#000000' }}></span>KAFKA</li>
|
<li><span style={{ background: '#000000' }}/>KAFKA</li>
|
||||||
<li><span style={{ background: '#a41e11' }}></span>REDIS</li>
|
<li><span style={{ background: '#a41e11' }}/>REDIS</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>}
|
</div>}
|
||||||
|
|||||||
@@ -148,7 +148,7 @@ const ServiceMapOptions = {
|
|||||||
springLength: 180,
|
springLength: 180,
|
||||||
springConstant: 0.04,
|
springConstant: 0.04,
|
||||||
damping: 0.2,
|
damping: 0.2,
|
||||||
avoidOverlap: 1
|
avoidOverlap: 0
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
layout: {
|
layout: {
|
||||||
|
|||||||
@@ -3,13 +3,10 @@ import * as axios from "axios";
|
|||||||
export const MizuWebsocketURL = process.env.REACT_APP_OVERRIDE_WS_URL ? process.env.REACT_APP_OVERRIDE_WS_URL :
|
export const MizuWebsocketURL = process.env.REACT_APP_OVERRIDE_WS_URL ? process.env.REACT_APP_OVERRIDE_WS_URL :
|
||||||
window.location.protocol === 'https:' ? `wss://${window.location.host}/ws` : `ws://${window.location.host}/ws`;
|
window.location.protocol === 'https:' ? `wss://${window.location.host}/ws` : `ws://${window.location.host}/ws`;
|
||||||
|
|
||||||
export const FormValidationErrorType = "formError";
|
|
||||||
|
|
||||||
const CancelToken = axios.CancelToken;
|
const CancelToken = axios.CancelToken;
|
||||||
|
|
||||||
const apiURL = process.env.REACT_APP_OVERRIDE_API_URL ? process.env.REACT_APP_OVERRIDE_API_URL : `${window.location.origin}/`;
|
const apiURL = process.env.REACT_APP_OVERRIDE_API_URL ? process.env.REACT_APP_OVERRIDE_API_URL : `${window.location.origin}/`;
|
||||||
|
|
||||||
let token = ""
|
|
||||||
let client = null
|
let client = null
|
||||||
let source = null
|
let source = null
|
||||||
|
|
||||||
@@ -24,8 +21,6 @@ export default class Api {
|
|||||||
}
|
}
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
token = localStorage.getItem("token");
|
|
||||||
|
|
||||||
client = this.getAxiosClient();
|
client = this.getAxiosClient();
|
||||||
source = null;
|
source = null;
|
||||||
}
|
}
|
||||||
@@ -125,20 +120,10 @@ export default class Api {
|
|||||||
return response.data;
|
return response.data;
|
||||||
}
|
}
|
||||||
|
|
||||||
persistToken = (tk) => {
|
|
||||||
token = tk;
|
|
||||||
client = this.getAxiosClient();
|
|
||||||
localStorage.setItem('token', token);
|
|
||||||
}
|
|
||||||
|
|
||||||
getAxiosClient = () => {
|
getAxiosClient = () => {
|
||||||
const headers = {
|
const headers = {
|
||||||
Accept: "application/json"
|
Accept: "application/json"
|
||||||
}
|
}
|
||||||
|
|
||||||
if (token) {
|
|
||||||
headers['x-session-token'] = `${token}`; // we use `x-session-token` instead of `Authorization` because the latter is reserved by kubectl proxy, making mizu view not work
|
|
||||||
}
|
|
||||||
return axios.create({
|
return axios.create({
|
||||||
baseURL: apiURL,
|
baseURL: apiURL,
|
||||||
timeout: 31000,
|
timeout: 31000,
|
||||||
@@ -146,12 +131,3 @@ export default class Api {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getWebsocketUrl() {
|
|
||||||
let websocketUrl = MizuWebsocketURL;
|
|
||||||
if (token) {
|
|
||||||
websocketUrl += `/${token}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
return websocketUrl;
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user