Skip to content

Commit

Permalink
Merge pull request #83 from dbolkensteyn/read-log
Browse files Browse the repository at this point in the history
Fixes #82 Add a client for the pod read-log endpoint
  • Loading branch information
k8s-ci-robot authored Mar 27, 2019
2 parents 3811829 + 1d18f90 commit 4a5b84d
Show file tree
Hide file tree
Showing 2 changed files with 97 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@ export * from './exec';
export * from './portforward';
export * from './types';
export * from './yaml';
export * from './log';
96 changes: 96 additions & 0 deletions src/log.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
import { default as request } from 'request';
import { Writable } from 'stream';

import { KubeConfig } from './config';

export interface LogOptions {
/**
* Follow the log stream of the pod. Defaults to false.
*/
follow?: boolean;

/**
* If set, the number of bytes to read from the server before terminating the log output. This may not display a
* complete final line of logging, and may return slightly more or slightly less than the specified limit.
*/
limitBytes?: number;

/**
* If true, then the output is pretty printed.
*/
pretty?: boolean;

/**
* Return previous terminated container logs. Defaults to false.
*/
previous?: boolean;

/**
* A relative time in seconds before the current time from which to show logs. If this value precedes the time a
* pod was started, only logs since the pod start will be returned. If this value is in the future, no logs will
* be returned. Only one of sinceSeconds or sinceTime may be specified.
*/
sinceSeconds?: number;

/**
* If set, the number of lines from the end of the logs to show. If not specified, logs are shown from the creation
* of the container or sinceSeconds or sinceTime
*/
tailLines?: number;

/**
* If true, add an RFC3339 or RFC3339Nano timestamp at the beginning of every line of log output. Defaults to false.
*/
timestamps?: boolean;
}

export class Log {
public config: KubeConfig;

public constructor(config: KubeConfig) {
this.config = config;
}

public log(
namespace: string,
podName: string,
containerName: string,
stream: Writable,
done: (err: any) => void,
options: LogOptions = {},
): request.Request {
const path = `/api/v1/namespaces/${namespace}/pods/${podName}/log`;

const cluster = this.config.getCurrentCluster();
if (!cluster) {
throw new Error('No currently active cluster');
}
const url = cluster.server + path;

const requestOptions: request.Options = {
method: 'GET',
qs: {
...options,
container: containerName,
},
uri: url,
};
this.config.applyToRequest(requestOptions);

const req = request(requestOptions, (error, response, body) => {
if (error) {
done(error);
} else if (response && response.statusCode !== 200) {
done(body);
} else {
done(null);
}
}).on('response', (response) => {
if (response.statusCode === 200) {
req.pipe(stream);
}
});

return req;
}
}

0 comments on commit 4a5b84d

Please sign in to comment.