Skip to content

Commit 276e7d3

Browse files
committed
feat(logs): added ability to view raw job logs
1 parent a71705a commit 276e7d3

File tree

6 files changed

+215
-21
lines changed

6 files changed

+215
-21
lines changed

package-lock.json

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

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@
164164
"sass-loader": "^6.0.6",
165165
"shebang": "0.0.1",
166166
"source-map-loader": "^0.2.3",
167+
"strip-ansi": "^4.0.0",
167168
"style-loader": "^0.19.0",
168169
"temp": "^0.8.3",
169170
"to-string-loader": "^1.1.5",

src/api/image-builder.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,11 @@ export function buildDockerImage(data: ImageData): void {
4444
.then(output => {
4545
output.on('data', d => {
4646
const output = d.toString();
47-
const parsed = JSON.parse(output);
47+
let parsed = null;
48+
49+
try {
50+
parsed = JSON.parse(output);
51+
} catch (e) { }
4852

4953
if (parsed && parsed.errorDetail) {
5054
const error = parsed.errorDetail.error ? `(${parsed.errorDetail.error})` : '';

src/api/server-routes.ts

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import {
2727
saveRepositorySettings
2828
} from './db/repository';
2929
import { getBuilds, getBuild } from './db/build';
30-
import { getJob } from './db/job';
30+
import { getJob, getLastRun } from './db/job';
3131
import { getJobRuns, getJobRunsBetween } from './db/job-run';
3232
import { insertAccessToken, getAccessTokens, removeAccessToken } from './db/access-token';
3333
import {
@@ -59,6 +59,7 @@ import {
5959
} from './setup';
6060
import { startBuild } from './process-manager';
6161
import * as multer from 'multer';
62+
import * as stripAnsi from 'strip-ansi';
6263

6364
const config: any = getConfig();
6465

@@ -130,18 +131,23 @@ export function buildRoutes(): express.Router {
130131
export function jobRoutes(): express.Router {
131132
const router = express.Router();
132133

134+
router.get('/:id/log', (req: express.Request, res: express.Response) => {
135+
getLastRun(req.params.id).then(jobRun => {
136+
if (jobRun && jobRun.log) {
137+
const log = stripAnsi(jobRun.log.replace(/\r\n/g, '<br/>'));
138+
return res.status(200).type('html').send(log);
139+
} else {
140+
return res.status(404).json({ data: 'not found' });
141+
}
142+
})
143+
.catch(err => res.status(200).json({ err: err }));
144+
});
145+
133146
router.get('/:id/:userid?', (req: express.Request, res: express.Response) => {
134-
if (req.params.userid) {
135-
getJob(req.params.id, req.params.userid).then(job => {
136-
return res.status(200).json({ data: job });
137-
})
138-
.catch(err => res.status(200).json({ err: err }));
139-
} else {
140-
getJob(req.params.id, req.params.userid).then(job => {
141-
return res.status(200).json({ data: job });
142-
})
143-
.catch(err => res.status(200).json({ err: err }));
144-
}
147+
getJob(req.params.id, req.params.userid).then(job => {
148+
return res.status(200).json({ data: job });
149+
})
150+
.catch(err => res.status(200).json({ err: err }));
145151
});
146152

147153
return router;

src/app/components/app-job/app-job.component.html

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,13 @@ <h2 name="message" *ngIf="commitMessage">{{ commitMessage }}</h2>
169169
</div>
170170
</div>
171171
<div class="column is-12">
172-
<app-terminal [data]="terminalInput" (outputData)="terminalOutput($event)" [options]="terminalOptions"></app-terminal>
172+
<div class="terminal-container">
173+
<app-terminal [data]="terminalInput" (outputData)="terminalOutput($event)" [options]="terminalOptions"></app-terminal>
174+
<a class="view-raw-log" *ngIf="jobRun?.status !== 'running'" [href]="'/api/jobs/' + job?.id + '/log'" target="_blank">
175+
<i class="ionicon ion-document-text"></i>
176+
View Raw Log
177+
</a>
178+
</div>
173179
</div>
174180
</div>
175181
</div>

0 commit comments

Comments
 (0)