Skip to content

Commit

Permalink
refactor: log.ts to async-first (#453)
Browse files Browse the repository at this point in the history
  • Loading branch information
AVaksman committed May 8, 2019
1 parent 9a9d3db commit af0994f
Show file tree
Hide file tree
Showing 3 changed files with 167 additions and 286 deletions.
215 changes: 67 additions & 148 deletions src/log.ts
Expand Up @@ -15,7 +15,7 @@
*/

import {DeleteCallback} from '@google-cloud/common';
import {callbackifyAll, promisifyAll} from '@google-cloud/promisify';
import {callbackifyAll} from '@google-cloud/promisify';
import arrify = require('arrify');
import * as extend from 'extend';
import {CallOptions} from 'google-gax';
Expand Down Expand Up @@ -154,17 +154,11 @@ class Log implements LogSeverityFunctions {
alert(entry: Entry | Entry[], callback: ApiResponseCallback): void;
alert(
entry: Entry | Entry[],
optionsOrCallback?: WriteOptions | ApiResponseCallback,
cb?: ApiResponseCallback
): void | Promise<ApiResponse> {
const options =
typeof optionsOrCallback === 'object' ? optionsOrCallback : {};
const callback =
typeof optionsOrCallback === 'function' ? optionsOrCallback : cb;
this.write(
options?: WriteOptions | ApiResponseCallback
): Promise<ApiResponse> {
return this.write(
Log.assignSeverityToEntries_(entry, 'ALERT'),
options,
callback!
options! as WriteOptions
);
}

Expand Down Expand Up @@ -196,10 +190,6 @@ class Log implements LogSeverityFunctions {
* const apiResponse = data[0];
* });
*/
critical(
entry: Entry | Entry[],
options?: WriteOptions
): Promise<ApiResponse>;
critical(
entry: Entry | Entry[],
options: WriteOptions,
Expand All @@ -208,15 +198,12 @@ class Log implements LogSeverityFunctions {
critical(entry: Entry | Entry[], callback: ApiResponseCallback): void;
critical(
entry: Entry | Entry[],
optionsOrCallback?: WriteOptions | ApiResponseCallback,
cb?: ApiResponseCallback
): void | Promise<ApiResponse> {
const options =
typeof optionsOrCallback === 'object' ? optionsOrCallback : {};
const callback =
typeof optionsOrCallback === 'function' ? optionsOrCallback : cb;
const entries = Log.assignSeverityToEntries_(entry, 'CRITICAL');
this.write(entries, options, callback!);
options?: WriteOptions | ApiResponseCallback
): Promise<ApiResponse> {
return this.write(
Log.assignSeverityToEntries_(entry, 'CRITICAL'),
options! as WriteOptions
);
}

/**
Expand Down Expand Up @@ -256,17 +243,11 @@ class Log implements LogSeverityFunctions {
debug(entry: Entry | Entry[], callback: ApiResponseCallback): void;
debug(
entry: Entry | Entry[],
optionsOrCallback?: WriteOptions | ApiResponseCallback,
cb?: ApiResponseCallback
): void | Promise<ApiResponse> {
const options =
typeof optionsOrCallback === 'object' ? optionsOrCallback : {};
const callback =
typeof optionsOrCallback === 'function' ? optionsOrCallback : cb;
this.write(
options?: WriteOptions | ApiResponseCallback
): Promise<ApiResponse> {
return this.write(
Log.assignSeverityToEntries_(entry, 'DEBUG'),
options,
callback!
options! as WriteOptions
);
}

Expand Down Expand Up @@ -314,25 +295,17 @@ class Log implements LogSeverityFunctions {
delete(gaxOptions?: CallOptions): Promise<ApiResponse>;
delete(gaxOptions: CallOptions, callback: DeleteCallback): void;
delete(callback: DeleteCallback): void;
delete(
optionsOrCallback?: CallOptions | DeleteCallback,
cb?: DeleteCallback
): void | Promise<ApiResponse> {
const gaxOptions =
typeof optionsOrCallback === 'object' ? optionsOrCallback : {};
const callback =
typeof optionsOrCallback === 'function' ? optionsOrCallback : cb;
async delete(
gaxOptions?: CallOptions | DeleteCallback
): Promise<ApiResponse> {
const projectId = await this.logging.auth.getProjectId();
this.formattedName_ = Log.formatName_(projectId, this.name);
const reqOpts = {
logName: this.formattedName_,
};
this.logging.request(
{
client: 'LoggingServiceV2Client',
method: 'deleteLog',
reqOpts,
gaxOpts: gaxOptions,
},
callback
return this.logging.loggingService.deleteLog(
reqOpts,
gaxOptions! as CallOptions
);
}

Expand Down Expand Up @@ -364,10 +337,6 @@ class Log implements LogSeverityFunctions {
* const apiResponse = data[0];
* });
*/
emergency(
entry: Entry | Entry[],
options?: WriteOptions
): Promise<ApiResponse>;
emergency(
entry: Entry | Entry[],
options: WriteOptions,
Expand All @@ -376,15 +345,12 @@ class Log implements LogSeverityFunctions {
emergency(entry: Entry | Entry[], callback: ApiResponseCallback): void;
emergency(
entry: Entry | Entry[],
optionsOrCallback?: WriteOptions | ApiResponseCallback,
cb?: ApiResponseCallback
): void | Promise<ApiResponse> {
const options =
typeof optionsOrCallback === 'object' ? optionsOrCallback : {};
const callback =
typeof optionsOrCallback === 'function' ? optionsOrCallback : cb;
const entries = Log.assignSeverityToEntries_(entry, 'EMERGENCY');
this.write(entries, options, callback!);
options?: WriteOptions | ApiResponseCallback
): Promise<ApiResponse> {
return this.write(
Log.assignSeverityToEntries_(entry, 'EMERGENCY'),
options as WriteOptions
);
}

/**
Expand Down Expand Up @@ -488,17 +454,11 @@ class Log implements LogSeverityFunctions {
error(entry: Entry | Entry[], callback: ApiResponseCallback): void;
error(
entry: Entry | Entry[],
optionsOrCallback?: WriteOptions | ApiResponseCallback,
cb?: ApiResponseCallback
): void | Promise<ApiResponse> {
const options =
typeof optionsOrCallback === 'object' ? optionsOrCallback : {};
const callback =
typeof optionsOrCallback === 'function' ? optionsOrCallback : cb;
this.write(
options?: WriteOptions | ApiResponseCallback
): Promise<ApiResponse> {
return this.write(
Log.assignSeverityToEntries_(entry, 'ERROR'),
options,
callback!
options! as WriteOptions
);
}

Expand Down Expand Up @@ -551,8 +511,8 @@ class Log implements LogSeverityFunctions {
opts?: GetEntriesRequest | GetEntriesCallback
): Promise<GetEntriesResponse> {
const options = extend({}, opts as GetEntriesRequest);
this.logging.projectId = await this.logging.auth.getProjectId();
this.formattedName_ = Log.formatName_(this.logging.projectId, this.name);
const projectId = await this.logging.auth.getProjectId();
this.formattedName_ = Log.formatName_(projectId, this.name);
if (options.filter) {
options.filter = `(${options.filter}) AND logName="${
this.formattedName_
Expand Down Expand Up @@ -644,14 +604,12 @@ class Log implements LogSeverityFunctions {
info(entry: Entry | Entry[], callback: ApiResponseCallback): void;
info(
entry: Entry | Entry[],
optionsOrCallback?: WriteOptions | ApiResponseCallback,
cb?: ApiResponseCallback
): void | Promise<ApiResponse> {
const options =
typeof optionsOrCallback === 'object' ? optionsOrCallback : {};
const callback =
typeof optionsOrCallback === 'function' ? optionsOrCallback : cb;
this.write(Log.assignSeverityToEntries_(entry, 'INFO'), options, callback!);
options?: WriteOptions | ApiResponseCallback
): Promise<ApiResponse> {
return this.write(
Log.assignSeverityToEntries_(entry, 'INFO'),
options! as WriteOptions
);
}

/**
Expand Down Expand Up @@ -691,17 +649,11 @@ class Log implements LogSeverityFunctions {
notice(entry: Entry | Entry[], callback: ApiResponseCallback): void;
notice(
entry: Entry | Entry[],
optionsOrCallback?: WriteOptions | ApiResponseCallback,
cb?: ApiResponseCallback
): void | Promise<ApiResponse> {
const options =
typeof optionsOrCallback === 'object' ? optionsOrCallback : {};
const callback =
typeof optionsOrCallback === 'function' ? optionsOrCallback : cb;
this.write(
options?: WriteOptions | ApiResponseCallback
): Promise<ApiResponse> {
return this.write(
Log.assignSeverityToEntries_(entry, 'NOTICE'),
options,
callback!
options! as WriteOptions
);
}

Expand Down Expand Up @@ -742,17 +694,11 @@ class Log implements LogSeverityFunctions {
warning(entry: Entry | Entry[], callback: ApiResponseCallback): void;
warning(
entry: Entry | Entry[],
optionsOrCallback?: WriteOptions | ApiResponseCallback,
cb?: ApiResponseCallback
): void | Promise<ApiResponse> {
const options =
typeof optionsOrCallback === 'object' ? optionsOrCallback : {};
const callback =
typeof optionsOrCallback === 'function' ? optionsOrCallback : cb;
this.write(
options?: WriteOptions | ApiResponseCallback
): Promise<ApiResponse> {
return this.write(
Log.assignSeverityToEntries_(entry, 'WARNING'),
options,
callback!
options as WriteOptions
);
}

Expand Down Expand Up @@ -854,37 +800,34 @@ class Log implements LogSeverityFunctions {
callback: ApiResponseCallback
): void;
write(entry: Entry | Entry[], callback: ApiResponseCallback): void;
write(
async write(
entry: Entry | Entry[],
optionsOrCallback?: WriteOptions | ApiResponseCallback,
cb?: ApiResponseCallback
): void | Promise<ApiResponse> {
const options =
typeof optionsOrCallback === 'object' ? optionsOrCallback : {};
const callback =
typeof optionsOrCallback === 'function' ? optionsOrCallback : cb;
opts?: WriteOptions | ApiResponseCallback
): Promise<ApiResponse> {
const options = opts ? (opts as WriteOptions) : {};
const self = this;

if (options.resource) {
if (options.resource.labels) {
options.resource.labels = snakeCaseKeys(options.resource.labels);
}
writeWithResource(options.resource);
return writeWithResource(options.resource);
} else if (this.logging.detectedResource) {
writeWithResource(this.logging.detectedResource);
return writeWithResource(this.logging.detectedResource);
} else {
getDefaultResource(this.logging.auth).then(resource => {
this.logging.detectedResource = resource;
writeWithResource(resource);
});
const resource = await getDefaultResource(this.logging.auth);
this.logging.detectedResource = resource;
return writeWithResource(resource);
}
function writeWithResource(resource: {} | null) {
async function writeWithResource(resource: {} | null) {
let decoratedEntries;
try {
decoratedEntries = self.decorateEntries_(arrify(entry) as Entry[]);
} catch (err) {
// Ignore errors (the API will speak up if it has an issue).
}
const projectId = await self.logging.auth.getProjectId();
self.formattedName_ = Log.formatName_(projectId, self.name);
const reqOpts = extend(
{
logName: self.formattedName_,
Expand All @@ -894,14 +837,9 @@ class Log implements LogSeverityFunctions {
options
);
delete reqOpts.gaxOptions;
self.logging.request(
{
client: 'LoggingServiceV2Client',
method: 'writeLogEntries',
reqOpts,
gaxOpts: options.gaxOptions,
},
callback
return self.logging.loggingService.writeLogEntries(
reqOpts,
options.gaxOptions
);
}
}
Expand Down Expand Up @@ -969,29 +907,10 @@ class Log implements LogSeverityFunctions {

/*! Developer Documentation
*
* All async methods (except for streams) will return a Promise in the event
* that a callback is omitted.
* All async methods (except for streams) will call a callback in the event
* that a callback is provided .
*/
promisifyAll(Log, {
exclude: ['entry', 'getEntries'],
});

callbackifyAll(Log, {
exclude: [
'alert',
'critical',
'debug',
'delete',
'emergency',
'entry',
'error',
'getEntriesStream',
'info',
'notice',
'warning',
'write',
],
});
callbackifyAll(Log, {exclude: ['entry', 'getEntriesStream']});

/**
* Reference to the {@link Log} class.
Expand Down
5 changes: 5 additions & 0 deletions system-test/logging.ts
Expand Up @@ -355,6 +355,11 @@ describe('Logging', () => {
log.write(logEntries[0], options, done);
});

it('should write a single entry to a log as a Promise', async () => {
const {log, logEntries} = getTestLog();
log.write(logEntries[1], options);
});

it('should write multiple entries to a log', done => {
const {log, logEntries} = getTestLog();

Expand Down

0 comments on commit af0994f

Please sign in to comment.