Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | import axios from "axios";
import {isSet, nowISO8601, nowMinusHoursUTCISO, toHuman, toHumanDay, toHumanTime} from "../lib/Common.js";
import {NEWS_LABEL} from "../services/NewsService.js";
/**
* autonomous gist : https://gist.github.com/boly38/e853a1d83b63481fd5a97e4b7822813e
*/
export default class LogtailService {
constructor(config, loggerService) {
this.config = config;
this.tz = config.tz;
this.logger = loggerService.getLogger().child({label: 'LogtailService'});
this.logtail_api_v1 = config.log?.logtailApiV1;
this.logtail_api_token = config.log?.logtailApiToken;
this.logtail_source_id = config.log?.logtailSourceId;
if (isSet(this.logtail_api_v1) && isSet(this.logtail_api_token) && isSet(this.logtail_source_id)) {
this.logtailClient = axios.create({
baseURL: this.logtail_api_v1,
timeout: 30000,
headers: {'Authorization': `Bearer ${this.logtail_api_token}`}
});
}
}
isAvailable() {
return isSet(this.logtailClient);
}
querySource(sourceIds/* coma separated ids */, query, from, to, batch = 100) {
const service = this;
return new Promise((resolve, reject) => {
// query source(s) - https://betterstack.com/docs/logs/query-api/
service.logtailClient.get('/query', {params: {source_ids: sourceIds, query, from, to, batch}})
.then(res => resolve(res?.data))
.catch(res => reject(res));
});
}
perDateMessage(logs) {
const {tz} = this
const resultMap = {};
logs.forEach(d => {
const dt = toHumanTime(d.dt, tz);
const day = toHumanDay(d.dt, tz);
const message = d.message;
if (!resultMap[day]) {
resultMap[day] = [];
}
resultMap[day].push({dt,message});
});
return resultMap;
}
getRecentNews() {
const service = this;
const {logger, tz} = this
return new Promise((resolve, reject) => {
const logtail_source_id = this.logtail_source_id;
const from = nowMinusHoursUTCISO(3 * 24);//now - 3 days
const to = nowISO8601();//now
// query syntax : https://betterstack.com/docs/logs/using-logtail/live-tail-query-language/
const query = `label:"${NEWS_LABEL}"`;
logger.debug(`querySource id=${logtail_source_id}, query=${query}, from=${from} to=${to} tz=${tz}`);
service.querySource(logtail_source_id, query, from, to)
.then(result => {
const data = this.perDateMessage(result.data);
const logtailNews = {
"from": toHuman(from, tz),
"to": toHuman(to, tz),
data
};
logger.debug(`result news ${logtailNews.data?.length}`);
resolve(logtailNews);
})
.catch(reject);
});
}
} |