Skip to content

Commit eb96fde

Browse files
committed
feat: add log destinations for applications and jobs with Grafana links
1 parent 7df02ae commit eb96fde

File tree

6 files changed

+63
-39
lines changed

6 files changed

+63
-39
lines changed

src/routes/team/[team]/[env]/app/[app]/Status.svelte

+2-14
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,7 @@
1717
graphql(`
1818
fragment AppStatus on Application {
1919
name
20-
logDestinations {
21-
id
22-
__typename
23-
... on LogDestinationLoki {
24-
grafanaURL
25-
}
26-
}
20+
2721
team {
2822
slug
2923
}
@@ -61,13 +55,7 @@
6155
/> Application status unknown.
6256
{/if}
6357
</BodyShort>
64-
{#if $data.logDestinations}
65-
{#each $data.logDestinations as logDestination (logDestination.id)}
66-
{#if logDestination.__typename === 'LogDestinationLoki'}
67-
<Link href={logDestination.grafanaURL}>View logs in Grafana</Link>
68-
{/if}
69-
{/each}
70-
{/if}
58+
7159
{#if nErrors > 0}
7260
<Link href="/team/{$data.team.slug}/{$data.environment.name}/app/{$data.name}/status">
7361
View {nErrors} issue{nErrors > 1 ? 's' : ''}

src/routes/team/[team]/[env]/app/[app]/logs/+page.gql

+7
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,13 @@ query Instances($app: String!, $team: Slug!, $env: String!) {
1010
name
1111
}
1212
}
13+
logDestinations {
14+
id
15+
__typename
16+
... on LogDestinationLoki {
17+
grafanaURL
18+
}
19+
}
1320
}
1421
}
1522
}

src/routes/team/[team]/[env]/app/[app]/logs/+page.svelte

+16-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<script lang="ts">
22
import LogViewer from '$lib/LogViewer.svelte';
33
import { Button, Chips, Fieldset, ToggleChip } from '@nais/ds-svelte-community';
4+
import { ExternalLinkIcon } from '@nais/ds-svelte-community/icons';
45
import { SvelteSet } from 'svelte/reactivity';
56
import type { PageData } from './$houdini';
67
@@ -43,8 +44,12 @@
4344
}
4445
</script>
4546

47+
<!--
48+
{
49+
-->
4650
{#if $Instances.data}
4751
{@const instances = $Instances.data.team.environment.application.instances.nodes}
52+
4853
<div class="topbar">
4954
<div class="instances">
5055
{#if $Instances.data}
@@ -120,6 +125,16 @@
120125
{/each}
121126
</Chips>
122127
</div>
128+
<div>
129+
{#if $Instances.data.team.environment.application.logDestinations}
130+
{#each $Instances.data.team.environment.application.logDestinations as logDestination (logDestination.id)}
131+
{#if logDestination.__typename === 'LogDestinationLoki'}
132+
<a href={logDestination.grafanaURL}>View logs in Grafana <ExternalLinkIcon /></a>
133+
{/if}
134+
{/each}
135+
{/if}
136+
</div>
137+
123138
<LogViewer
124139
{app}
125140
{env}
@@ -159,7 +174,7 @@
159174
display: flex;
160175
flex-direction: row;
161176
gap: 0.5rem;
162-
padding-top: 0.8rem;
177+
padding: var(--a-spacing-3) 0;
163178
}
164179
165180
.instance-button {

src/routes/team/[team]/[env]/job/[job]/Status.svelte

+3-15
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import ErrorIcon from '$lib/icons/ErrorIcon.svelte';
44
import SuccessIcon from '$lib/icons/SuccessIcon.svelte';
55
import WarningIcon from '$lib/icons/WarningIcon.svelte';
6-
import { Detail, Heading, Link } from '@nais/ds-svelte-community';
6+
import { Detail, Heading } from '@nais/ds-svelte-community';
77
import { QuestionmarkDiamondFillIcon } from '@nais/ds-svelte-community/icons';
88
99
interface Props {
@@ -22,13 +22,7 @@
2222
environment {
2323
name
2424
}
25-
logDestinations {
26-
id
27-
__typename
28-
... on LogDestinationLoki {
29-
grafanaURL
30-
}
31-
}
25+
3226
name
3327
status {
3428
state
@@ -62,13 +56,7 @@
6256
Job status unknown.
6357
{/if}
6458
</div>
65-
{#if $data.logDestinations}
66-
{#each $data.logDestinations as logDestination (logDestination.id)}
67-
{#if logDestination.__typename === 'LogDestinationLoki'}
68-
<Link href={logDestination.grafanaURL}>View logs in Grafana</Link>
69-
{/if}
70-
{/each}
71-
{/if}
59+
7260
{#if nErrors > 0}
7361
<div style="margin-top: var(--a-spacing-2)">
7462
<a href="/team/{$data.team.slug}/{$data.environment.name}/job/{$data.name}/status">

src/routes/team/[team]/[env]/job/[job]/logs/+page.gql

+7
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,13 @@ query RunsWithPodNames($job: String!, $team: Slug!, $env: String!) {
55
name
66
job(name: $job) {
77
name
8+
logDestinations {
9+
id
10+
__typename
11+
... on LogDestinationLoki {
12+
grafanaURL
13+
}
14+
}
815
runs {
916
nodes {
1017
id

src/routes/team/[team]/[env]/job/[job]/logs/+page.svelte

+28-9
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
ToggleGroup,
88
ToggleGroupItem
99
} from '@nais/ds-svelte-community';
10+
import { ExternalLinkIcon } from '@nais/ds-svelte-community/icons';
1011
import { SvelteSet } from 'svelte/reactivity';
1112
import type { PageData } from './$houdini';
1213
@@ -97,15 +98,27 @@
9798
{#if fetching}
9899
<div style:font-size="12px" style:text-align="right" style:width="100%">Streaming logs...</div>
99100
{/if}
100-
<Chips size="small">
101-
{#each viewOptions as option (option)}
102-
<ToggleChip
103-
value={option}
104-
selected={selectedViewOptions.has(option)}
105-
onclick={() => toggleSelectedViewOptions(option)}
106-
/>
107-
{/each}
108-
</Chips>
101+
<div class="chips">
102+
Columns:
103+
<Chips size="small">
104+
{#each viewOptions as option (option)}
105+
<ToggleChip
106+
value={option}
107+
selected={selectedViewOptions.has(option)}
108+
onclick={() => toggleSelectedViewOptions(option)}
109+
/>
110+
{/each}
111+
</Chips>
112+
</div>
113+
<div>
114+
{#if $RunsWithPodNames.data?.team.environment.job.logDestinations}
115+
{#each $RunsWithPodNames.data?.team.environment.job.logDestinations as logDestination (logDestination.id)}
116+
{#if logDestination.__typename === 'LogDestinationLoki'}
117+
<a href={logDestination.grafanaURL}>View logs in Grafana <ExternalLinkIcon /></a>
118+
{/if}
119+
{/each}
120+
{/if}
121+
</div>
109122
<LogViewer
110123
job={result.team.environment.job.name}
111124
env={result.team.environment.name}
@@ -136,4 +149,10 @@
136149
align-items: center;
137150
gap: 0.5rem;
138151
}
152+
.chips {
153+
display: flex;
154+
flex-direction: row;
155+
gap: 0.5rem;
156+
padding: var(--a-spacing-3) 0;
157+
}
139158
</style>

0 commit comments

Comments
 (0)