logdna/ts/logdna.logdnaaccount.ts

61 lines
1.5 KiB
TypeScript
Raw Normal View History

2018-11-01 17:13:34 +00:00
import * as plugins from './logdna.plugins';
import { LogdnaMessage } from './logdna.classes.logmessage';
/**
* the main logdna account
*/
export class LogdnaAccount {
apiKey: string;
baseUrl = 'https://logs.logdna.com/logs/ingest';
/**
* Create basic authentication
*/
createBasicAuth() {
const userNamePasswordString = `${this.apiKey}:`;
return `Basic ${plugins.smartstring.base64.encode(userNamePasswordString)}`;
}
/**
*
* @param apiKeyArg
*/
constructor(apiKeyArg: string) {
this.apiKey = apiKeyArg;
}
/**
* sends a logmessage
* async, so it returns a Promise. In most cases it does not make sense to wait for it though.
*/
public async sendLogDnaMessage(logdnaMessageArg: LogdnaMessage) {
const lm = logdnaMessageArg;
const euc = encodeURIComponent;
const requestUrlWithParams = `${this.baseUrl}?hostname=${euc(
lm.options.hostname
)}&mac=${euc(lm.options.mac)}&ip=1${euc(lm.options.ip)}&now=${Date.now()}`;
await plugins.smartrequest.postJson(requestUrlWithParams, {
headers: {
'Authorization': this.createBasicAuth(),
'charset': 'UTF-8'
},
requestBody: {
"lines": [
{
"line":"This is an awesome log statement",
"app":"myapp",
"level": "INFO",
"env": "production",
"meta": {
"customfield": {
"nestedfield": "nestedvalue"
}
}
}
]
}
});
}
}