Skip to content

Commit 36d07e0

Browse files
amlannandyhudsongeovane
authored andcommitted
feat: statefulsets, daemonsets, jobs and volumes implementation in k8s infra monitoring (SigNoz#6629)
1 parent 6aa0079 commit 36d07e0

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+8968
-128
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
import axios from 'api';
2+
import { ErrorResponseHandler } from 'api/ErrorResponseHandler';
3+
import { AxiosError } from 'axios';
4+
import { ErrorResponse, SuccessResponse } from 'types/api';
5+
import { BaseAutocompleteData } from 'types/api/queryBuilder/queryAutocompleteResponse';
6+
import { TagFilter } from 'types/api/queryBuilder/queryBuilderData';
7+
8+
export interface K8sDaemonSetsListPayload {
9+
filters: TagFilter;
10+
groupBy?: BaseAutocompleteData[];
11+
offset?: number;
12+
limit?: number;
13+
orderBy?: {
14+
columnName: string;
15+
order: 'asc' | 'desc';
16+
};
17+
}
18+
19+
export interface K8sDaemonSetsData {
20+
daemonSetName: string;
21+
cpuUsage: number;
22+
memoryUsage: number;
23+
cpuRequest: number;
24+
memoryRequest: number;
25+
cpuLimit: number;
26+
memoryLimit: number;
27+
restarts: number;
28+
desiredNodes: number;
29+
availableNodes: number;
30+
meta: {
31+
k8s_cluster_name: string;
32+
k8s_daemonset_name: string;
33+
k8s_namespace_name: string;
34+
};
35+
}
36+
37+
export interface K8sDaemonSetsListResponse {
38+
status: string;
39+
data: {
40+
type: string;
41+
records: K8sDaemonSetsData[];
42+
groups: null;
43+
total: number;
44+
sentAnyHostMetricsData: boolean;
45+
isSendingK8SAgentMetrics: boolean;
46+
};
47+
}
48+
49+
export const getK8sDaemonSetsList = async (
50+
props: K8sDaemonSetsListPayload,
51+
signal?: AbortSignal,
52+
headers?: Record<string, string>,
53+
): Promise<SuccessResponse<K8sDaemonSetsListResponse> | ErrorResponse> => {
54+
try {
55+
const response = await axios.post('/daemonsets/list', props, {
56+
signal,
57+
headers,
58+
});
59+
60+
return {
61+
statusCode: 200,
62+
error: null,
63+
message: 'Success',
64+
payload: response.data,
65+
params: props,
66+
};
67+
} catch (error) {
68+
return ErrorResponseHandler(error as AxiosError);
69+
}
70+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
import axios from 'api';
2+
import { ErrorResponseHandler } from 'api/ErrorResponseHandler';
3+
import { AxiosError } from 'axios';
4+
import { ErrorResponse, SuccessResponse } from 'types/api';
5+
import { BaseAutocompleteData } from 'types/api/queryBuilder/queryAutocompleteResponse';
6+
import { TagFilter } from 'types/api/queryBuilder/queryBuilderData';
7+
8+
export interface K8sJobsListPayload {
9+
filters: TagFilter;
10+
groupBy?: BaseAutocompleteData[];
11+
offset?: number;
12+
limit?: number;
13+
orderBy?: {
14+
columnName: string;
15+
order: 'asc' | 'desc';
16+
};
17+
}
18+
19+
export interface K8sJobsData {
20+
jobName: string;
21+
cpuUsage: number;
22+
memoryUsage: number;
23+
cpuRequest: number;
24+
memoryRequest: number;
25+
cpuLimit: number;
26+
memoryLimit: number;
27+
restarts: number;
28+
desiredSuccessfulPods: number;
29+
activePods: number;
30+
failedPods: number;
31+
successfulPods: number;
32+
meta: {
33+
k8s_cluster_name: string;
34+
k8s_job_name: string;
35+
k8s_namespace_name: string;
36+
};
37+
}
38+
39+
export interface K8sJobsListResponse {
40+
status: string;
41+
data: {
42+
type: string;
43+
records: K8sJobsData[];
44+
groups: null;
45+
total: number;
46+
sentAnyHostMetricsData: boolean;
47+
isSendingK8SAgentMetrics: boolean;
48+
};
49+
}
50+
51+
export const getK8sJobsList = async (
52+
props: K8sJobsListPayload,
53+
signal?: AbortSignal,
54+
headers?: Record<string, string>,
55+
): Promise<SuccessResponse<K8sJobsListResponse> | ErrorResponse> => {
56+
try {
57+
const response = await axios.post('/jobs/list', props, {
58+
signal,
59+
headers,
60+
});
61+
62+
return {
63+
statusCode: 200,
64+
error: null,
65+
message: 'Success',
66+
payload: response.data,
67+
params: props,
68+
};
69+
} catch (error) {
70+
return ErrorResponseHandler(error as AxiosError);
71+
}
72+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
import axios from 'api';
2+
import { ErrorResponseHandler } from 'api/ErrorResponseHandler';
3+
import { AxiosError } from 'axios';
4+
import { ErrorResponse, SuccessResponse } from 'types/api';
5+
import { BaseAutocompleteData } from 'types/api/queryBuilder/queryAutocompleteResponse';
6+
import { TagFilter } from 'types/api/queryBuilder/queryBuilderData';
7+
8+
export interface K8sVolumesListPayload {
9+
filters: TagFilter;
10+
groupBy?: BaseAutocompleteData[];
11+
offset?: number;
12+
limit?: number;
13+
orderBy?: {
14+
columnName: string;
15+
order: 'asc' | 'desc';
16+
};
17+
}
18+
19+
export interface K8sVolumesData {
20+
persistentVolumeClaimName: string;
21+
volumeAvailable: number;
22+
volumeCapacity: number;
23+
volumeInodes: number;
24+
volumeInodesFree: number;
25+
volumeInodesUsed: number;
26+
volumeUsage: number;
27+
meta: {
28+
k8s_cluster_name: string;
29+
k8s_namespace_name: string;
30+
k8s_node_name: string;
31+
k8s_persistentvolumeclaim_name: string;
32+
k8s_pod_name: string;
33+
k8s_pod_uid: string;
34+
k8s_statefulset_name: string;
35+
};
36+
}
37+
38+
export interface K8sVolumesListResponse {
39+
status: string;
40+
data: {
41+
type: string;
42+
records: K8sVolumesData[];
43+
groups: null;
44+
total: number;
45+
sentAnyHostMetricsData: boolean;
46+
isSendingK8SAgentMetrics: boolean;
47+
};
48+
}
49+
50+
export const getK8sVolumesList = async (
51+
props: K8sVolumesListPayload,
52+
signal?: AbortSignal,
53+
headers?: Record<string, string>,
54+
): Promise<SuccessResponse<K8sVolumesListResponse> | ErrorResponse> => {
55+
try {
56+
const response = await axios.post('/pvcs/list', props, {
57+
signal,
58+
headers,
59+
});
60+
61+
return {
62+
statusCode: 200,
63+
error: null,
64+
message: 'Success',
65+
payload: response.data,
66+
params: props,
67+
};
68+
} catch (error) {
69+
return ErrorResponseHandler(error as AxiosError);
70+
}
71+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
import axios from 'api';
2+
import { ErrorResponseHandler } from 'api/ErrorResponseHandler';
3+
import { AxiosError } from 'axios';
4+
import { ErrorResponse, SuccessResponse } from 'types/api';
5+
import { BaseAutocompleteData } from 'types/api/queryBuilder/queryAutocompleteResponse';
6+
import { TagFilter } from 'types/api/queryBuilder/queryBuilderData';
7+
8+
export interface K8sStatefulSetsListPayload {
9+
filters: TagFilter;
10+
groupBy?: BaseAutocompleteData[];
11+
offset?: number;
12+
limit?: number;
13+
orderBy?: {
14+
columnName: string;
15+
order: 'asc' | 'desc';
16+
};
17+
}
18+
19+
export interface K8sStatefulSetsData {
20+
statefulSetName: string;
21+
cpuUsage: number;
22+
memoryUsage: number;
23+
desiredPods: number;
24+
availablePods: number;
25+
cpuRequest: number;
26+
memoryRequest: number;
27+
cpuLimit: number;
28+
memoryLimit: number;
29+
restarts: number;
30+
meta: {
31+
k8s_statefulset_name: string;
32+
k8s_namespace_name: string;
33+
};
34+
}
35+
36+
export interface K8sStatefulSetsListResponse {
37+
status: string;
38+
data: {
39+
type: string;
40+
records: K8sStatefulSetsData[];
41+
groups: null;
42+
total: number;
43+
sentAnyHostMetricsData: boolean;
44+
isSendingK8SAgentMetrics: boolean;
45+
};
46+
}
47+
48+
export const getK8sStatefulSetsList = async (
49+
props: K8sStatefulSetsListPayload,
50+
signal?: AbortSignal,
51+
headers?: Record<string, string>,
52+
): Promise<SuccessResponse<K8sStatefulSetsListResponse> | ErrorResponse> => {
53+
try {
54+
const response = await axios.post('/statefulsets/list', props, {
55+
signal,
56+
headers,
57+
});
58+
59+
return {
60+
statusCode: 200,
61+
error: null,
62+
message: 'Success',
63+
payload: response.data,
64+
params: props,
65+
};
66+
} catch (error) {
67+
return ErrorResponseHandler(error as AxiosError);
68+
}
69+
};

frontend/src/constants/reactQueryKeys.ts

+4
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,8 @@ export const REACT_QUERY_KEY = {
2626
GET_DEPLOYMENT_LIST: 'GET_DEPLOYMENT_LIST',
2727
GET_CLUSTER_LIST: 'GET_CLUSTER_LIST',
2828
GET_NAMESPACE_LIST: 'GET_NAMESPACE_LIST',
29+
GET_STATEFULSET_LIST: 'GET_STATEFULSET_LIST',
30+
GET_JOB_LIST: 'GET_JOB_LIST',
31+
GET_DAEMONSET_LIST: 'GET_DAEMONSET_LIST,',
32+
GET_VOLUME_LIST: 'GET_VOLUME_LIST',
2933
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { K8sDaemonSetsData } from 'api/infraMonitoring/getK8sDaemonSetsList';
2+
3+
export type DaemonSetDetailsProps = {
4+
daemonSet: K8sDaemonSetsData | null;
5+
isModalTimeSelection: boolean;
6+
onClose: () => void;
7+
};

0 commit comments

Comments
 (0)