logs_model.ts 861 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import _ from 'lodash';
  2. export enum LogLevel {
  3. crit = 'crit',
  4. warn = 'warn',
  5. err = 'error',
  6. error = 'error',
  7. info = 'info',
  8. debug = 'debug',
  9. trace = 'trace',
  10. }
  11. export interface LogSearchMatch {
  12. start: number;
  13. length: number;
  14. text: string;
  15. }
  16. export interface LogRow {
  17. key: string;
  18. entry: string;
  19. logLevel: LogLevel;
  20. timestamp: string;
  21. timeFromNow: string;
  22. timeLocal: string;
  23. searchWords?: string[];
  24. }
  25. export interface LogsModel {
  26. rows: LogRow[];
  27. }
  28. export function mergeStreams(streams: LogsModel[], limit?: number): LogsModel {
  29. const combinedEntries = streams.reduce((acc, stream) => {
  30. return [...acc, ...stream.rows];
  31. }, []);
  32. const sortedEntries = _.chain(combinedEntries)
  33. .sortBy('timestamp')
  34. .reverse()
  35. .slice(0, limit || combinedEntries.length)
  36. .value();
  37. return { rows: sortedEntries };
  38. }