blob: 9be319761521f0364e3858f77315cbf44a4ba98f [file] [log] [blame]
import { Injectable } from '@angular/core';
import { map } from 'rxjs/operators';
import * as _ from 'lodash';
import { HelixService } from '../../core/helix.service';
import { History } from './history.model';
@Injectable()
export class HistoryService extends HelixService {
getControllerHistory(clusterName: string) {
return this.request(`/clusters/${clusterName}/controller/history`).pipe(
map((data) => this.parseHistory(data.history))
);
}
getInstanceHistory(clusterName: string, instanceName: string) {
return this.request(
`/clusters/${clusterName}/instances/${instanceName}/history`
).pipe(map((data) => this.parseHistory(data.listFields.HISTORY)));
// TODO: implement data.simpleFields.LAST_OFFLINE_TIME
}
protected parseHistory(data: any): History[] {
const histories: History[] = [];
if (data) {
for (const record of data) {
// controller: {DATE=2017-04-13-22:33:55, CONTROLLER=ltx1-app1133.stg.linkedin.com_12923, TIME=1492122835198}
// instance: {DATE=2017-05-01T08:21:42:114, SESSION=55a8e28052bcb56, TIME=1493626902114}
const history = new History();
for (const seg of _.words(record, /[^{}, ]+/g)) {
const name = _.words(seg, /[^=]+/g)[0];
const value = _.words(seg, /[^=]+/g)[1];
if (name == 'DATE') {
history.date = value;
} else if (name == 'CONTROLLER') {
history.controller = value;
} else if (name == 'SESSION') {
history.session = value;
} else if (name == 'TIME') {
history.time = +value;
}
}
histories.push(history);
}
}
return histories;
}
}