Skip to content

Commit e374772

Browse files
Added Prometheus monitoring CPU and memory selector. (#1387)
* Added Prometheus monitoring CPU and memory selector. * Minor text fixes * Fixed memory units, improvements to get return * Updated logic to add storageClassName to get response * Minor fixes, removed warnings * Removed blank entry for empty storageclassname Co-authored-by: Daniel Valdivia <[email protected]>
1 parent 257f02c commit e374772

File tree

8 files changed

+273
-134
lines changed

8 files changed

+273
-134
lines changed

models/tenant_monitoring_info.go

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

operatorapi/embedded_spec.go

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

operatorapi/operator_tenants.go

Lines changed: 73 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2143,49 +2143,75 @@ func getTenantMonitoringResponse(session *models.Principal, params operator_api.
21432143
return nil, prepareError(err)
21442144
}
21452145

2146-
var storageClassName string
21472146
monitoringInfo := &models.TenantMonitoringInfo{}
21482147

2149-
if minInst.Spec.Prometheus == nil {
2150-
monitoringInfo := &models.TenantMonitoringInfo{
2151-
PrometheusEnabled: (false),
2152-
}
2148+
if minInst.Spec.Prometheus != nil {
2149+
monitoringInfo.PrometheusEnabled = true
2150+
} else {
2151+
monitoringInfo.PrometheusEnabled = false
21532152
return monitoringInfo, nil
21542153
}
21552154

2155+
var storageClassName string
21562156
if minInst.Spec.Prometheus.StorageClassName != nil {
21572157
storageClassName = *minInst.Spec.Prometheus.StorageClassName
2158+
monitoringInfo.StorageClassName = storageClassName
21582159
}
21592160

2160-
mLabels := []*models.Label{}
2161-
for k, v := range minInst.Spec.Prometheus.Labels {
2162-
mLabels = append(mLabels, &models.Label{Key: k, Value: v})
2161+
var requestedCPU string
2162+
var requestedMem string
2163+
2164+
if minInst.Spec.Prometheus.Resources.Requests != nil {
2165+
requestedCPUQ := minInst.Spec.Prometheus.Resources.Requests["cpu"]
2166+
requestedCPU = strconv.FormatInt(requestedCPUQ.Value(), 10)
2167+
requestedMemQ := minInst.Spec.Prometheus.Resources.Requests["memory"]
2168+
requestedMem = strconv.FormatInt(requestedMemQ.Value(), 10)
2169+
monitoringInfo.MonitoringCPURequest = requestedCPU
2170+
monitoringInfo.MonitoringMemRequest = requestedMem
21632171
}
2164-
mAnnotations := []*models.Annotation{}
2165-
for k, v := range minInst.Spec.Prometheus.Annotations {
2166-
mAnnotations = append(mAnnotations, &models.Annotation{Key: k, Value: v})
2172+
2173+
if len(minInst.Spec.Prometheus.Labels) != 0 && minInst.Spec.Prometheus.Labels != nil {
2174+
mLabels := []*models.Label{}
2175+
for k, v := range minInst.Spec.Prometheus.Labels {
2176+
mLabels = append(mLabels, &models.Label{Key: k, Value: v})
2177+
}
2178+
monitoringInfo.Labels = mLabels
21672179
}
2168-
mNodeSelector := []*models.NodeSelector{}
2169-
for k, v := range minInst.Spec.Prometheus.NodeSelector {
2170-
mNodeSelector = append(mNodeSelector, &models.NodeSelector{Key: k, Value: v})
2180+
2181+
if len(minInst.Spec.Prometheus.Annotations) != 0 && minInst.Spec.Prometheus.Annotations != nil {
2182+
mAnnotations := []*models.Annotation{}
2183+
for k, v := range minInst.Spec.Prometheus.Annotations {
2184+
mAnnotations = append(mAnnotations, &models.Annotation{Key: k, Value: v})
2185+
}
2186+
monitoringInfo.Annotations = mAnnotations
21712187
}
21722188

2173-
if minInst.Spec.Prometheus != nil {
2174-
monitoringInfo = &models.TenantMonitoringInfo{
2175-
PrometheusEnabled: (true),
2176-
Annotations: mAnnotations,
2177-
DiskCapacityGB: strconv.Itoa(*minInst.Spec.Prometheus.DiskCapacityDB),
2178-
Image: minInst.Spec.Prometheus.Image,
2179-
InitImage: minInst.Spec.Prometheus.InitImage,
2180-
Labels: mLabels,
2181-
NodeSelector: mNodeSelector,
2182-
ServiceAccountName: minInst.Spec.Prometheus.ServiceAccountName,
2183-
SidecarImage: minInst.Spec.Prometheus.SideCarImage,
2184-
StorageClassName: storageClassName,
2189+
if len(minInst.Spec.Prometheus.NodeSelector) != 0 && minInst.Spec.Prometheus.NodeSelector != nil {
2190+
mNodeSelector := []*models.NodeSelector{}
2191+
for k, v := range minInst.Spec.Prometheus.NodeSelector {
2192+
mNodeSelector = append(mNodeSelector, &models.NodeSelector{Key: k, Value: v})
21852193
}
2186-
return monitoringInfo, nil
2194+
monitoringInfo.NodeSelector = mNodeSelector
2195+
}
2196+
2197+
if *minInst.Spec.Prometheus.DiskCapacityDB != 0 {
2198+
monitoringInfo.DiskCapacityGB = strconv.Itoa(*minInst.Spec.Prometheus.DiskCapacityDB)
2199+
}
2200+
if len(minInst.Spec.Prometheus.Image) != 0 {
2201+
monitoringInfo.Image = minInst.Spec.Prometheus.Image
2202+
}
2203+
if len(minInst.Spec.Prometheus.InitImage) != 0 {
2204+
monitoringInfo.InitImage = minInst.Spec.Prometheus.InitImage
21872205
}
2206+
if len(minInst.Spec.Prometheus.ServiceAccountName) != 0 {
2207+
monitoringInfo.ServiceAccountName = minInst.Spec.Prometheus.ServiceAccountName
2208+
}
2209+
if len(minInst.Spec.Prometheus.SideCarImage) != 0 {
2210+
monitoringInfo.SidecarImage = minInst.Spec.Prometheus.SideCarImage
2211+
}
2212+
21882213
return monitoringInfo, nil
2214+
21892215
}
21902216

21912217
//sets tenant Prometheus monitoring cofiguration fields to values provided
@@ -2245,18 +2271,34 @@ func setTenantMonitoringResponse(session *models.Principal, params operator_api.
22452271
}
22462272
}
22472273

2248-
var storageClassName string
2249-
if &params.Data.StorageClassName != nil {
2250-
storageClassName = params.Data.StorageClassName
2274+
monitoringResourceRequest := make(corev1.ResourceList)
2275+
if &params.Data.MonitoringCPURequest != nil {
2276+
2277+
cpuQuantity, err := resource.ParseQuantity(params.Data.MonitoringCPURequest)
2278+
if err != nil {
2279+
return false, prepareError(err)
2280+
}
2281+
memQuantity, err := resource.ParseQuantity(params.Data.MonitoringMemRequest)
2282+
if err != nil {
2283+
return false, prepareError(err)
2284+
}
2285+
monitoringResourceRequest["cpu"] = cpuQuantity
2286+
monitoringResourceRequest["memory"] = memQuantity
22512287
}
22522288

2289+
minTenant.Spec.Prometheus.Resources.Requests = monitoringResourceRequest
22532290
minTenant.Spec.Prometheus.Labels = labels
22542291
minTenant.Spec.Prometheus.Annotations = annotations
22552292
minTenant.Spec.Prometheus.NodeSelector = nodeSelector
22562293
minTenant.Spec.Prometheus.Image = params.Data.Image
22572294
minTenant.Spec.Prometheus.SideCarImage = params.Data.SidecarImage
22582295
minTenant.Spec.Prometheus.InitImage = params.Data.InitImage
2259-
minTenant.Spec.Prometheus.StorageClassName = &storageClassName
2296+
if params.Data.StorageClassName == "" {
2297+
minTenant.Spec.Prometheus.StorageClassName = nil
2298+
} else {
2299+
minTenant.Spec.Prometheus.StorageClassName = &params.Data.StorageClassName
2300+
}
2301+
22602302
diskCapacityGB, err := strconv.Atoi(params.Data.DiskCapacityGB)
22612303
if err == nil {
22622304
*minTenant.Spec.Prometheus.DiskCapacityDB = diskCapacityGB

portal-ui/package.json

Lines changed: 100 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -1,102 +1,102 @@
11
{
2-
"name": "portal-ui",
3-
"version": "0.1.0",
4-
"homepage": ".",
5-
"private": true,
6-
"dependencies": {
7-
"@codemirror/lang-json": "^0.19.1",
8-
"@codemirror/legacy-modes": "^0.19.0",
9-
"@codemirror/stream-parser": "^0.19.3",
10-
"@date-io/moment": "1.x",
11-
"@emotion/react": "^11.4.1",
12-
"@emotion/styled": "^11.3.0",
13-
"@hot-loader/react-dom": "17.0.1",
14-
"@mui/icons-material": "^5.0.4",
15-
"@mui/lab": "^5.0.0-alpha.30",
16-
"@mui/material": "^5.0.4",
17-
"@mui/styled-engine-sc": "^5.0.3",
18-
"@mui/styles": "^5.0.1",
19-
"@types/history": "^4.7.3",
20-
"@types/jest": "24.0.23",
21-
"@types/lodash": "^4.14.149",
22-
"@types/node": "12.12.8",
23-
"@types/react": "17.0.0",
24-
"@types/react-copy-to-clipboard": "^4.3.0",
25-
"@types/react-dom": "16.9.4",
26-
"@types/react-grid-layout": "^1.1.1",
27-
"@types/react-redux": "^7.1.5",
28-
"@types/react-router": "^5.1.3",
29-
"@types/react-router-dom": "^5.1.2",
30-
"@types/react-virtualized": "^9.21.10",
31-
"@types/superagent": "^4.1.12",
32-
"@types/webpack-env": "^1.14.1",
33-
"@types/websocket": "^1.0.0",
34-
"@uiw/react-codemirror": "^4.3.2",
35-
"ansi-to-react": "^6.0.5",
36-
"chart.js": "^2.9.3",
37-
"codemirror": "^5.52.2",
38-
"history": "^4.10.1",
39-
"local-storage-fallback": "^4.1.1",
40-
"lodash": "^4.17.21",
41-
"moment": "^2.29.1",
42-
"react": "^17.0.2",
43-
"react-async-hook": "^3.6.1",
44-
"react-chartjs-2": "^2.9.0",
45-
"react-copy-to-clipboard": "^5.0.2",
46-
"react-dom": "17.0.1",
47-
"react-dropzone": "^11.4.2",
48-
"react-grid-layout": "^1.2.0",
49-
"react-hot-loader": "^4.13.0",
50-
"react-moment": "^1.1.1",
51-
"react-redux": "^7.1.3",
52-
"react-router-dom": "^5.1.2",
53-
"react-virtualized": "^9.22.2",
54-
"react-window": "^1.8.6",
55-
"react-window-infinite-loader": "^1.0.7",
56-
"recharts": "^2.1.1",
57-
"redux": "^4.0.5",
58-
"redux-thunk": "^2.3.0",
59-
"styled-components": "^5.3.1",
60-
"superagent": "^6.1.0",
61-
"typeface-roboto": "^0.0.75",
62-
"use-debounce": "^5.0.1",
63-
"websocket": "^1.0.31"
64-
},
65-
"scripts": {
66-
"start": "PORT=5005 react-app-rewired start",
67-
"build": "react-scripts build",
68-
"test": "react-scripts test",
69-
"eject": "react-scripts eject"
70-
},
71-
"eslintConfig": {
72-
"extends": "react-app"
73-
},
74-
"browserslist": {
75-
"production": [
76-
">0.2%",
77-
"not dead",
78-
"not op_mini all"
79-
],
80-
"development": [
81-
"last 1 chrome version",
82-
"last 1 firefox version",
83-
"last 1 safari version"
84-
]
85-
},
86-
"proxy": "http://localhost:9090/",
87-
"devDependencies": {
88-
"@types/react-window": "^1.8.5",
89-
"@types/react-window-infinite-loader": "^1.0.5",
90-
"@types/recharts": "^1.8.22",
91-
"prettier": "2.3.2",
92-
"react-app-rewire-hot-loader": "^2.0.1",
93-
"react-app-rewired": "^2.1.6",
94-
"react-scripts": "5.0.0",
95-
"typescript": "^4.4.3"
96-
},
97-
"resolutions": {
98-
"ansi-regex": "^5.0.1",
99-
"nth-check": "^2.0.1",
100-
"postcss": "^8.2.13"
101-
}
2+
"name": "portal-ui",
3+
"version": "0.1.0",
4+
"homepage": ".",
5+
"private": true,
6+
"dependencies": {
7+
"@codemirror/lang-json": "^0.19.1",
8+
"@codemirror/legacy-modes": "^0.19.0",
9+
"@codemirror/stream-parser": "^0.19.3",
10+
"@date-io/moment": "1.x",
11+
"@emotion/react": "^11.4.1",
12+
"@emotion/styled": "^11.3.0",
13+
"@hot-loader/react-dom": "17.0.1",
14+
"@mui/icons-material": "^5.0.4",
15+
"@mui/lab": "^5.0.0-alpha.30",
16+
"@mui/material": "^5.0.4",
17+
"@mui/styled-engine-sc": "^5.0.3",
18+
"@mui/styles": "^5.0.1",
19+
"@types/history": "^4.7.3",
20+
"@types/jest": "24.0.23",
21+
"@types/lodash": "^4.14.149",
22+
"@types/node": "12.12.8",
23+
"@types/react": "17.0.0",
24+
"@types/react-copy-to-clipboard": "^4.3.0",
25+
"@types/react-dom": "16.9.4",
26+
"@types/react-grid-layout": "^1.1.1",
27+
"@types/react-redux": "^7.1.5",
28+
"@types/react-router": "^5.1.3",
29+
"@types/react-router-dom": "^5.1.2",
30+
"@types/react-virtualized": "^9.21.10",
31+
"@types/superagent": "^4.1.12",
32+
"@types/webpack-env": "^1.14.1",
33+
"@types/websocket": "^1.0.0",
34+
"@uiw/react-codemirror": "^4.3.2",
35+
"ansi-to-react": "^6.0.5",
36+
"chart.js": "^2.9.3",
37+
"codemirror": "^5.52.2",
38+
"history": "^4.10.1",
39+
"local-storage-fallback": "^4.1.1",
40+
"lodash": "^4.17.21",
41+
"moment": "^2.29.1",
42+
"react": "^17.0.2",
43+
"react-async-hook": "^3.6.1",
44+
"react-chartjs-2": "^2.9.0",
45+
"react-copy-to-clipboard": "^5.0.2",
46+
"react-dom": "17.0.1",
47+
"react-dropzone": "^11.4.2",
48+
"react-grid-layout": "^1.2.0",
49+
"react-hot-loader": "^4.13.0",
50+
"react-moment": "^1.1.1",
51+
"react-redux": "^7.1.3",
52+
"react-router-dom": "^5.1.2",
53+
"react-virtualized": "^9.22.2",
54+
"react-window": "^1.8.6",
55+
"react-window-infinite-loader": "^1.0.7",
56+
"recharts": "^2.1.1",
57+
"redux": "^4.0.5",
58+
"redux-thunk": "^2.3.0",
59+
"styled-components": "^5.3.1",
60+
"superagent": "^6.1.0",
61+
"typeface-roboto": "^0.0.75",
62+
"use-debounce": "^5.0.1",
63+
"websocket": "^1.0.31"
64+
},
65+
"scripts": {
66+
"start": "PORT=5005 react-app-rewired start",
67+
"build": "react-scripts build",
68+
"test": "react-scripts test",
69+
"eject": "react-scripts eject"
70+
},
71+
"eslintConfig": {
72+
"extends": "react-app"
73+
},
74+
"browserslist": {
75+
"production": [
76+
">0.2%",
77+
"not dead",
78+
"not op_mini all"
79+
],
80+
"development": [
81+
"last 1 chrome version",
82+
"last 1 firefox version",
83+
"last 1 safari version"
84+
]
85+
},
86+
"proxy": "http://localhost:9090/",
87+
"devDependencies": {
88+
"@types/react-window": "^1.8.5",
89+
"@types/react-window-infinite-loader": "^1.0.5",
90+
"@types/recharts": "^1.8.22",
91+
"prettier": "2.3.2",
92+
"react-app-rewire-hot-loader": "^2.0.1",
93+
"react-app-rewired": "^2.1.6",
94+
"react-scripts": "5.0.0",
95+
"typescript": "^4.4.3"
96+
},
97+
"resolutions": {
98+
"ansi-regex": "^5.0.1",
99+
"nth-check": "^2.0.1",
100+
"postcss": "^8.2.13"
101+
}
102102
}

0 commit comments

Comments
 (0)