Skip to content

Commit 8cb11ef

Browse files
authored
feat(ui): add mustache templating in pod log url (caraml-dev#414)
* feat(ui): add mustache templating in pod log url * fix(ui): change variables passed to createLogImageBuilderUrl * fix(ui): refactor constant vars
1 parent 34c8f32 commit 8cb11ef

6 files changed

Lines changed: 127 additions & 40 deletions

File tree

ui/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
"js-yaml": "^4.1.0",
1818
"mitt": "^3.0.1",
1919
"moment": "^2.30.1",
20+
"mustache": "^4.2.0",
2021
"object-assign-deep": "^0.4.0",
2122
"proper-url-join": "2.1.1",
2223
"query-string": "^9.0.0",

ui/src/components/pod_logs_viewer/PodLogsViewer.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export const PodLogsViewer = ({
1818
query,
1919
onQueryChange,
2020
batchSize,
21-
stackdriverUrls,
21+
podLogUrls,
2222
}) => {
2323
const filters = useMemo(
2424
() => [
@@ -114,15 +114,15 @@ export const PodLogsViewer = ({
114114
return (
115115
<>
116116
{
117-
Object.keys(stackdriverUrls).length !== 0 &&
117+
Object.keys(podLogUrls).length !== 0 &&
118118
(
119119
<>
120120
<EuiPanel>
121121
<EuiFlexGroup direction="row" alignItems="center">
122122
<EuiFlexItem style={{marginTop:0, marginBottom:0}} grow={false}>
123-
<EuiText style={{ fontSize: '14px', fontWeight:"bold"}}>Stackdriver Logs</EuiText>
123+
<EuiText style={{ fontSize: '14px', fontWeight:"bold"}}>Pod Logs</EuiText>
124124
</EuiFlexItem>
125-
{Object.entries(stackdriverUrls).map(([component,url])=> (
125+
{Object.entries(podLogUrls).map(([component,url])=> (
126126
<EuiFlexItem style={{marginTop:0, marginBottom:0, paddingLeft:"10px", textTransform: "capitalize"}} key={component} grow={false}>
127127
<EuiText size="xs" >
128128
<EuiLink href={url} target="_blank" external>{component.replace(new RegExp("_", "g"), " ")}</EuiLink>

ui/src/config.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,12 @@ export const appConfig = {
5959
batchSize: 500,
6060
// Default number of tail log entries to be fetched
6161
defaultTailLines: 1000,
62+
urlTemplates: {
63+
// Available values `{{cluster_name}}` `{{namespace_name}}` `{{pod_prefix_name}}` `{{start_time}}`
64+
turingUrl: "",
65+
// Available values `{{cluster_name}}` `{{namespace_name}}` `{{job_name}}` `{{start_time}}` `{{end_time}}`
66+
imageBuilderUrl: "",
67+
},
6268
},
6369
imagebuilder: {
6470
cluster: process.env.REACT_APP_IMAGE_BUILDER_CLUSTER,

ui/src/router/details/logs/RouterLogsView.js

Lines changed: 85 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { useLogsEmitter } from "../../../components/pod_logs_viewer/hooks/useLog
99
import { createStackdriverUrl } from "../../../utils/createStackdriverUrl";
1010
import EnsemblersContext from "../../../providers/ensemblers/context";
1111
import EnvironmentsContext from "../../../providers/environments/context";
12+
import {createLogImageBuilderUrl, createLogUrl} from "../../../utils/createLogUrl";
1213

1314
const components = [
1415
{
@@ -27,6 +28,7 @@ const components = [
2728

2829
export const RouterLogsView = ({ router }) => {
2930
const { appConfig } = useConfig();
31+
const { imageBuilderUrl, turingUrl } = appConfig.podLogs.urlTemplates
3032

3133
const { currentProject } = useContext(ProjectsContext);
3234

@@ -38,7 +40,7 @@ export const RouterLogsView = ({ router }) => {
3840
const environment = Object.values(environments)
3941
.find((value) => value.name === router?.environment_name)
4042

41-
const [stackdriverUrls, setStackdriverUrls] = useState({});
43+
const [podLogUrls, setPodLogUrls] = useState({});
4244

4345
useEffect(() => {
4446
replaceBreadcrumbs([
@@ -78,54 +80,101 @@ export const RouterLogsView = ({ router }) => {
7880
() => {
7981
let urls = {}
8082
if (
81-
appConfig.imagebuilder.cluster &&
82-
appConfig.imagebuilder.gcp_project &&
83-
appConfig.imagebuilder.namespace &&
83+
environment &&
8484
currentProject
8585
) {
86-
// set router url
87-
urls["router"] = createStackdriverUrl({
88-
gcp_project: environment.gcp_project,
89-
cluster: environment.cluster,
90-
namespace: currentProject.name,
91-
pod_name: router.name + "-turing-router-" + router.config.version,
92-
start_time: router.updated_at,
93-
}, "router")
94-
95-
// set enricher url
96-
if (router.config.enricher.type === "docker") {
97-
urls["enricher"] = createStackdriverUrl({
86+
if (turingUrl) {
87+
// using new url
88+
89+
// set router url
90+
urls["router"] = createLogUrl(
91+
turingUrl,
92+
environment.cluster,
93+
currentProject.name,
94+
router.name + "-turing-router-" + router.config.version,
95+
router.updated_at,
96+
)
97+
98+
// set enricher url
99+
if (router.config.enricher.type === "docker") {
100+
urls["enricher"] = createLogUrl(
101+
turingUrl,
102+
environment.cluster,
103+
currentProject.name,
104+
router.name + "-turing-enricher-" + router.config.version,
105+
router.updated_at,
106+
)
107+
}
108+
109+
// set ensembler url
110+
if (router.config.ensembler.type === "docker" || router.config.ensembler.type === "pyfunc") {
111+
urls["ensembler"] = createLogUrl(
112+
turingUrl,
113+
environment.cluster,
114+
currentProject.name,
115+
router.name + "-turing-ensembler-" + router.config.version,
116+
router.updated_at,
117+
)
118+
}
119+
} else {
120+
// fallback to old url
121+
122+
// set router url
123+
urls["router"] = createStackdriverUrl({
98124
gcp_project: environment.gcp_project,
99125
cluster: environment.cluster,
100126
namespace: currentProject.name,
101-
pod_name: router.name + "-turing-enricher-" + router.config.version,
127+
pod_name: router.name + "-turing-router-" + router.config.version,
102128
start_time: router.updated_at,
103-
}, "enricher")
104-
}
105-
106-
// set ensembler url
107-
if (router.config.ensembler.type === "docker" || router.config.ensembler.type === "pyfunc") {
108-
urls["ensembler"] = createStackdriverUrl({
109-
gcp_project: environment.gcp_project,
110-
cluster: environment.cluster,
111-
namespace: currentProject.name,
112-
pod_name: router.name + "-turing-ensembler-" + router.config.version,
113-
start_time: router.updated_at,
114-
}, "ensembler")
129+
}, "router")
130+
131+
// set enricher url
132+
if (router.config.enricher.type === "docker") {
133+
urls["enricher"] = createStackdriverUrl({
134+
gcp_project: environment.gcp_project,
135+
cluster: environment.cluster,
136+
namespace: currentProject.name,
137+
pod_name: router.name + "-turing-enricher-" + router.config.version,
138+
start_time: router.updated_at,
139+
}, "enricher")
140+
}
141+
142+
// set ensembler url
143+
if (router.config.ensembler.type === "docker" || router.config.ensembler.type === "pyfunc") {
144+
urls["ensembler"] = createStackdriverUrl({
145+
gcp_project: environment.gcp_project,
146+
cluster: environment.cluster,
147+
namespace: currentProject.name,
148+
pod_name: router.name + "-turing-ensembler-" + router.config.version,
149+
start_time: router.updated_at,
150+
}, "ensembler")
151+
}
115152
}
116153

117154
// set image builder url
118155
if (router.config.ensembler.type === "pyfunc" && ensembler) {
119-
urls["ensembler_image_builder"] = createStackdriverUrl({
120-
job_name: "service-" + currentProject.name + "-" + ensembler.name,
121-
start_time: ensembler.updated_at,
122-
}, "ensembler_image_builder")
156+
if (imageBuilderUrl) {
157+
// using new url
158+
urls["ensembler_image_builder"] = createLogImageBuilderUrl(
159+
imageBuilderUrl,
160+
appConfig.imagebuilder.cluster,
161+
appConfig.imagebuilder.namespace,
162+
"service-" + currentProject.name + "-" + ensembler.name,
163+
ensembler.updated_at,
164+
)
165+
} else {
166+
// fallback to old url
167+
urls["ensembler_image_builder"] = createStackdriverUrl({
168+
job_name: "service-" + currentProject.name + "-" + ensembler.name,
169+
start_time: ensembler.updated_at,
170+
}, "ensembler_image_builder")
171+
}
123172
}
124173

125-
setStackdriverUrls(urls);
174+
setPodLogUrls(urls);
126175
}
127176
},
128-
[currentProject, ensembler, environment, router, appConfig.imagebuilder]
177+
[currentProject, ensembler, environment, router, appConfig.imagebuilder, turingUrl, imageBuilderUrl]
129178
);
130179

131180
return (
@@ -136,7 +185,7 @@ export const RouterLogsView = ({ router }) => {
136185
query={query}
137186
onQueryChange={setQuery}
138187
batchSize={appConfig.podLogs.batchSize}
139-
stackdriverUrls={stackdriverUrls}
188+
podLogUrls={podLogUrls}
140189
/>
141190
</ConfigSection>
142191
);

ui/src/utils/createLogUrl.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import Mustache from "mustache";
2+
const moment = require("moment");
3+
4+
export const createLogImageBuilderUrl = (template, cluster, namespace, jobName, startTime) => {
5+
const endTime = moment(startTime, "YYYY-MM-DDTHH:mm.SSZ").add(1, "hour") // we assume the image builder finished after 1 hour
6+
const data = {
7+
cluster_name: cluster,
8+
namespace_name: namespace,
9+
job_name: jobName,
10+
start_time: startTime,
11+
end_time: endTime.toISOString(),
12+
};
13+
14+
return Mustache.render(template, data);
15+
}
16+
17+
export const createLogUrl = (template, cluster, namespace, podPrefixName, startTime) => {
18+
const data = {
19+
cluster_name: cluster,
20+
namespace_name: namespace,
21+
pod_prefix_name: podPrefixName,
22+
start_time: startTime,
23+
};
24+
25+
return Mustache.render(template, data);
26+
}

ui/yarn.lock

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7911,6 +7911,11 @@ multicast-dns@^7.2.5:
79117911
dns-packet "^5.2.2"
79127912
thunky "^1.0.2"
79137913

7914+
mustache@^4.2.0:
7915+
version "4.2.0"
7916+
resolved "https://registry.yarnpkg.com/mustache/-/mustache-4.2.0.tgz#e5892324d60a12ec9c2a73359edca52972bf6f64"
7917+
integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==
7918+
79147919
mz@^2.7.0:
79157920
version "2.7.0"
79167921
resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"

0 commit comments

Comments
 (0)