github-issue-tower-defence-management 1.107.0 → 1.109.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +14 -1
  3. package/bin/adapter/entry-points/cli/index.js +4 -4
  4. package/bin/adapter/entry-points/cli/index.js.map +1 -1
  5. package/bin/adapter/entry-points/console/dashboardComposeService.js +1 -0
  6. package/bin/adapter/entry-points/console/dashboardComposeService.js.map +1 -1
  7. package/bin/adapter/entry-points/handlers/GetStoryObjectMapUseCaseHandler.js +1 -1
  8. package/bin/adapter/entry-points/handlers/GetStoryObjectMapUseCaseHandler.js.map +1 -1
  9. package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js +1 -1
  10. package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js.map +1 -1
  11. package/bin/adapter/entry-points/handlers/machineStatusWriter.js +2 -0
  12. package/bin/adapter/entry-points/handlers/machineStatusWriter.js.map +1 -1
  13. package/bin/adapter/repositories/GraphqlProjectRepository.js +98 -4
  14. package/bin/adapter/repositories/GraphqlProjectRepository.js.map +1 -1
  15. package/bin/adapter/repositories/LocalStorageCacheRepository.js +5 -1
  16. package/bin/adapter/repositories/LocalStorageCacheRepository.js.map +1 -1
  17. package/bin/adapter/repositories/LocalStorageRepository.js +3 -0
  18. package/bin/adapter/repositories/LocalStorageRepository.js.map +1 -1
  19. package/bin/adapter/repositories/ProcHostMetricsRepository.js +25 -2
  20. package/bin/adapter/repositories/ProcHostMetricsRepository.js.map +1 -1
  21. package/bin/domain/usecases/dashboard/ComposeDashboardUseCase.js +12 -6
  22. package/bin/domain/usecases/dashboard/ComposeDashboardUseCase.js.map +1 -1
  23. package/package.json +1 -1
  24. package/src/adapter/entry-points/cli/index.ts +4 -0
  25. package/src/adapter/entry-points/console/dashboardComposeService.test.ts +8 -1
  26. package/src/adapter/entry-points/console/dashboardComposeService.ts +1 -0
  27. package/src/adapter/entry-points/console/webServer.test.ts +4 -1
  28. package/src/adapter/entry-points/handlers/GetStoryObjectMapUseCaseHandler.test.ts +6 -1
  29. package/src/adapter/entry-points/handlers/GetStoryObjectMapUseCaseHandler.ts +4 -1
  30. package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.test.ts +6 -1
  31. package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts +1 -0
  32. package/src/adapter/entry-points/handlers/machineStatusWriter.test.ts +14 -2
  33. package/src/adapter/entry-points/handlers/machineStatusWriter.ts +3 -0
  34. package/src/adapter/repositories/GraphqlProjectRepository.diskCache.test.ts +354 -0
  35. package/src/adapter/repositories/GraphqlProjectRepository.ts +139 -1
  36. package/src/adapter/repositories/LocalStorageCacheRepository.test.ts +35 -2
  37. package/src/adapter/repositories/LocalStorageCacheRepository.ts +5 -4
  38. package/src/adapter/repositories/LocalStorageRepository.test.ts +12 -0
  39. package/src/adapter/repositories/LocalStorageRepository.ts +3 -0
  40. package/src/adapter/repositories/ProcHostMetricsRepository.test.ts +26 -0
  41. package/src/adapter/repositories/ProcHostMetricsRepository.ts +36 -0
  42. package/src/domain/usecases/dashboard/ComposeDashboardUseCase.test.ts +44 -17
  43. package/src/domain/usecases/dashboard/ComposeDashboardUseCase.ts +13 -5
  44. package/types/adapter/entry-points/console/dashboardComposeService.d.ts.map +1 -1
  45. package/types/adapter/entry-points/handlers/GetStoryObjectMapUseCaseHandler.d.ts.map +1 -1
  46. package/types/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.d.ts.map +1 -1
  47. package/types/adapter/entry-points/handlers/machineStatusWriter.d.ts +1 -0
  48. package/types/adapter/entry-points/handlers/machineStatusWriter.d.ts.map +1 -1
  49. package/types/adapter/repositories/GraphqlProjectRepository.d.ts +10 -0
  50. package/types/adapter/repositories/GraphqlProjectRepository.d.ts.map +1 -1
  51. package/types/adapter/repositories/LocalStorageCacheRepository.d.ts.map +1 -1
  52. package/types/adapter/repositories/LocalStorageRepository.d.ts +1 -0
  53. package/types/adapter/repositories/LocalStorageRepository.d.ts.map +1 -1
  54. package/types/adapter/repositories/ProcHostMetricsRepository.d.ts +10 -1
  55. package/types/adapter/repositories/ProcHostMetricsRepository.d.ts.map +1 -1
  56. package/types/domain/usecases/dashboard/ComposeDashboardUseCase.d.ts +2 -1
  57. package/types/domain/usecases/dashboard/ComposeDashboardUseCase.d.ts.map +1 -1
@@ -2,10 +2,12 @@ import * as fs from 'fs';
2
2
  import * as os from 'os';
3
3
  import * as path from 'path';
4
4
  import {
5
+ DiskBlocks,
5
6
  ProcHostMetricsRepository,
6
7
  cpuUsedPercentFromSamples,
7
8
  cycleMinutesFromMtimes,
8
9
  parseCpuSample,
10
+ parseDiskUsedPercent,
9
11
  parseLoadAverages,
10
12
  parseMemoryUsedPercent,
11
13
  } from './ProcHostMetricsRepository';
@@ -72,6 +74,20 @@ describe('parseLoadAverages', () => {
72
74
  });
73
75
  });
74
76
 
77
+ describe('parseDiskUsedPercent', () => {
78
+ it('excludes root-reserved blocks from the denominator like df', () => {
79
+ expect(parseDiskUsedPercent(1100, 200, 100)).toBe(90);
80
+ });
81
+
82
+ it('matches df when there is no root reservation (bfree equals bavail)', () => {
83
+ expect(parseDiskUsedPercent(1000, 100, 100)).toBe(90);
84
+ });
85
+
86
+ it('throws when the disk total is not positive', () => {
87
+ expect(() => parseDiskUsedPercent(100, 200, 0)).toThrow();
88
+ });
89
+ });
90
+
75
91
  describe('cycleMinutesFromMtimes', () => {
76
92
  it('rounds the gap between the two newest generations to whole minutes', () => {
77
93
  expect(cycleMinutesFromMtimes([1782469254.0, 1782468443.0])).toBe(14);
@@ -120,6 +136,16 @@ describe('ProcHostMetricsRepository', () => {
120
136
  });
121
137
  });
122
138
 
139
+ it('reads the df-style disk used percent from the root filesystem statfs', () => {
140
+ const diskBlocks: DiskBlocks = { blocks: 1100, bfree: 200, bavail: 100 };
141
+ const repository = new ProcHostMetricsRepository(
142
+ procDirectory,
143
+ async () => {},
144
+ () => diskBlocks,
145
+ );
146
+ expect(repository.readDiskUsedPercent()).toBe(90);
147
+ });
148
+
123
149
  it('samples /proc/stat twice and computes the busy percent', async () => {
124
150
  const statPath = path.join(procDirectory, 'stat');
125
151
  let sampleIndex = 0;
@@ -13,8 +13,15 @@ export type LoadAverages = {
13
13
  };
14
14
 
15
15
  const DEFAULT_PROC_DIRECTORY = '/proc';
16
+ const DEFAULT_ROOT_PATH = '/';
16
17
  const CPU_SAMPLE_INTERVAL_MS = 400;
17
18
 
19
+ export type DiskBlocks = {
20
+ blocks: number;
21
+ bfree: number;
22
+ bavail: number;
23
+ };
24
+
18
25
  export const parseMemoryUsedPercent = (meminfoText: string): number => {
19
26
  const fields = new Map<string, number>();
20
27
  for (const line of meminfoText.split('\n')) {
@@ -76,6 +83,19 @@ export const cpuUsedPercentFromSamples = (
76
83
  return Math.round((busyDelta / totalDelta) * 100);
77
84
  };
78
85
 
86
+ export const parseDiskUsedPercent = (
87
+ blocks: number,
88
+ bfree: number,
89
+ bavail: number,
90
+ ): number => {
91
+ const total = blocks - bfree + bavail;
92
+ if (total <= 0) {
93
+ throw new Error('disk total must be positive');
94
+ }
95
+ const used = blocks - bfree;
96
+ return Math.round((used / total) * 100);
97
+ };
98
+
79
99
  export const parseLoadAverages = (loadavgText: string): LoadAverages => {
80
100
  const parts = loadavgText.trim().split(/\s+/);
81
101
  const oneMinute = Number(parts[0]);
@@ -111,6 +131,17 @@ export class ProcHostMetricsRepository {
111
131
  new Promise((resolve) => {
112
132
  setTimeout(resolve, milliseconds);
113
133
  }),
134
+ private readonly readDiskBlocks: (rootPath: string) => DiskBlocks = (
135
+ rootPath,
136
+ ) => {
137
+ const stats = fs.statfsSync(rootPath);
138
+ return {
139
+ blocks: Number(stats.blocks),
140
+ bfree: Number(stats.bfree),
141
+ bavail: Number(stats.bavail),
142
+ };
143
+ },
144
+ private readonly rootPath: string = DEFAULT_ROOT_PATH,
114
145
  ) {}
115
146
 
116
147
  readMemoryUsedPercent = (): number =>
@@ -133,4 +164,9 @@ export class ProcHostMetricsRepository {
133
164
  parseLoadAverages(
134
165
  fs.readFileSync(path.join(this.procDirectory, 'loadavg'), 'utf8'),
135
166
  );
167
+
168
+ readDiskUsedPercent = (): number => {
169
+ const { blocks, bfree, bavail } = this.readDiskBlocks(this.rootPath);
170
+ return parseDiskUsedPercent(blocks, bfree, bavail);
171
+ };
136
172
  }
@@ -2,7 +2,7 @@ import {
2
2
  ComposeDashboardInput,
3
3
  ComposeDashboardUseCase,
4
4
  PROJECT_ROW_WIDTH_BUDGET,
5
- formatMachineStatusLine,
5
+ formatMachineStatusLines,
6
6
  formatProjectHeaderLine,
7
7
  formatProjectRowLine,
8
8
  formatResetCountdown,
@@ -64,53 +64,76 @@ describe('formatResetCountdown', () => {
64
64
  });
65
65
  });
66
66
 
67
- describe('formatMachineStatusLine', () => {
68
- it('renders the host-metrics line from a machine status', () => {
67
+ describe('formatMachineStatusLines', () => {
68
+ it('renders the host metrics as two lines from a machine status', () => {
69
69
  expect(
70
- formatMachineStatusLine({
70
+ formatMachineStatusLines({
71
71
  memPct: 55,
72
72
  cpuPct: 62,
73
+ diskPct: 93,
73
74
  load: [16, 23, 40],
74
- cycleMinutes: 14,
75
+ cycleMinutes: 13,
75
76
  }),
76
- ).toBe('M55% C62% LA 16 23 40 cy14');
77
+ ).toEqual(['M55% C62% D93% cy13', 'LA 16 23 40']);
77
78
  });
78
79
 
79
80
  it('rounds loads with half-to-even and renders integers', () => {
80
81
  expect(
81
- formatMachineStatusLine({
82
+ formatMachineStatusLines({
82
83
  memPct: 62,
83
84
  cpuPct: 31,
85
+ diskPct: 7,
84
86
  load: [1.2, 0.98, 0.75],
85
87
  cycleMinutes: 14,
86
88
  }),
87
- ).toBe('M62% C31% LA 1 1 1 cy14');
89
+ ).toEqual(['M62% C31% D7% cy14', 'LA 1 1 1']);
88
90
  });
89
91
 
90
92
  it('falls back to placeholders when the machine status is absent', () => {
91
- expect(formatMachineStatusLine(null)).toBe('M?% C?% LA ? ? ? cy-');
93
+ expect(formatMachineStatusLines(null)).toEqual([
94
+ 'M?% C?% D?% cy-',
95
+ 'LA ? ? ?',
96
+ ]);
92
97
  });
93
98
 
94
99
  it('renders cy- when cycle minutes is null', () => {
95
100
  expect(
96
- formatMachineStatusLine({
101
+ formatMachineStatusLines({
97
102
  memPct: 1,
98
103
  cpuPct: 2,
104
+ diskPct: 3,
99
105
  load: [0, 0, 0],
100
106
  cycleMinutes: null,
101
107
  }),
102
- ).toBe('M1% C2% LA 0 0 0 cy-');
108
+ ).toEqual(['M1% C2% D3% cy-', 'LA 0 0 0']);
109
+ });
110
+
111
+ it('renders D?% when only the disk percent is unavailable', () => {
112
+ expect(
113
+ formatMachineStatusLines({
114
+ memPct: 55,
115
+ cpuPct: 62,
116
+ diskPct: null,
117
+ load: [16, 23, 40],
118
+ cycleMinutes: 13,
119
+ }),
120
+ ).toEqual(['M55% C62% D?% cy13', 'LA 16 23 40']);
103
121
  });
104
122
 
105
- it('stays within the 32 character width budget at worst case', () => {
106
- const line = formatMachineStatusLine({
123
+ it('keeps both lines within the 32 character width budget at worst case', () => {
124
+ const lines = formatMachineStatusLines({
107
125
  memPct: 100,
108
126
  cpuPct: 100,
127
+ diskPct: 100,
109
128
  load: [108.5, 120.25, 95.1],
110
129
  cycleMinutes: 999,
111
130
  });
112
- expect(line).toBe('M100% C100% LA 108 120 95 cy999');
113
- expect(codePointLength(line)).toBeLessThanOrEqual(PROJECT_ROW_WIDTH_BUDGET);
131
+ expect(lines).toEqual(['M100% C100% D100% cy999', 'LA 108 120 95']);
132
+ for (const line of lines) {
133
+ expect(codePointLength(line)).toBeLessThanOrEqual(
134
+ PROJECT_ROW_WIDTH_BUDGET,
135
+ );
136
+ }
114
137
  });
115
138
  });
116
139
 
@@ -260,6 +283,7 @@ describe('ComposeDashboardUseCase', () => {
260
283
  machineStatus: {
261
284
  memPct: 55,
262
285
  cpuPct: 62,
286
+ diskPct: 89,
263
287
  load: [16, 23, 40],
264
288
  cycleMinutes: 14,
265
289
  },
@@ -310,7 +334,8 @@ describe('ComposeDashboardUseCase', () => {
310
334
  };
311
335
 
312
336
  const expectedBody =
313
- '<tt>M55%&nbsp;C62%&nbsp;LA&nbsp;16&nbsp;23&nbsp;40&nbsp;cy14</tt><br>\n' +
337
+ '<tt>M55%&nbsp;C62%&nbsp;D89%&nbsp;cy14</tt><br>\n' +
338
+ '<tt>LA&nbsp;16&nbsp;23&nbsp;40</tt><br>\n' +
314
339
  '<tt>pj&nbsp;&nbsp;&nbsp;unr&nbsp;tdo&nbsp;aqc&nbsp;fal&nbsp;prp&nbsp;aws&nbsp;dep</tt><br>\n' +
315
340
  '<tt>🟢um&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;1</tt><br>\n' +
316
341
  '<tt>🟠xm&nbsp;&nbsp;12&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;16&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0</tt><br>\n' +
@@ -357,7 +382,8 @@ describe('ComposeDashboardUseCase', () => {
357
382
  });
358
383
  expect(
359
384
  output.startsWith(
360
- '<tt>M?%&nbsp;C?%&nbsp;LA&nbsp;?&nbsp;?&nbsp;?&nbsp;cy-</tt><br>\n',
385
+ '<tt>M?%&nbsp;C?%&nbsp;D?%&nbsp;cy-</tt><br>\n' +
386
+ '<tt>LA&nbsp;?&nbsp;?&nbsp;?</tt><br>\n',
361
387
  ),
362
388
  ).toBe(true);
363
389
  });
@@ -367,6 +393,7 @@ describe('ComposeDashboardUseCase', () => {
367
393
  machineStatus: {
368
394
  memPct: 100,
369
395
  cpuPct: 100,
396
+ diskPct: 100,
370
397
  load: [108.5, 120.25, 95.1],
371
398
  cycleMinutes: 999,
372
399
  },
@@ -11,6 +11,7 @@ export type ComposeDashboardProject = {
11
11
  export type ComposeDashboardMachineStatus = {
12
12
  memPct: number | null;
13
13
  cpuPct: number | null;
14
+ diskPct: number | null;
14
15
  load: [number, number, number] | null;
15
16
  cycleMinutes: number | null;
16
17
  };
@@ -97,9 +98,9 @@ export const formatResetCountdown = (totalSeconds: number): string => {
97
98
  )}`;
98
99
  };
99
100
 
100
- export const formatMachineStatusLine = (
101
+ export const formatMachineStatusLines = (
101
102
  machineStatus: ComposeDashboardMachineStatus | null,
102
- ): string => {
103
+ ): [string, string] => {
103
104
  const memText =
104
105
  machineStatus !== null && machineStatus.memPct !== null
105
106
  ? `${machineStatus.memPct}%`
@@ -108,6 +109,10 @@ export const formatMachineStatusLine = (
108
109
  machineStatus !== null && machineStatus.cpuPct !== null
109
110
  ? `${machineStatus.cpuPct}%`
110
111
  : '?%';
112
+ const diskText =
113
+ machineStatus !== null && machineStatus.diskPct !== null
114
+ ? `${machineStatus.diskPct}%`
115
+ : '?%';
111
116
  const load = machineStatus !== null ? machineStatus.load : null;
112
117
  const oneMinute = load === null ? '?' : String(roundHalfToEven(load[0]));
113
118
  const fiveMinute = load === null ? '?' : String(roundHalfToEven(load[1]));
@@ -116,7 +121,10 @@ export const formatMachineStatusLine = (
116
121
  machineStatus !== null && machineStatus.cycleMinutes !== null
117
122
  ? `cy${machineStatus.cycleMinutes}`
118
123
  : 'cy-';
119
- return `M${memText} C${cpuText} LA ${oneMinute} ${fiveMinute} ${fifteenMinute} ${cycle}`;
124
+ return [
125
+ `M${memText} C${cpuText} D${diskText} ${cycle}`,
126
+ `LA ${oneMinute} ${fiveMinute} ${fifteenMinute}`,
127
+ ];
120
128
  };
121
129
 
122
130
  const capThreeDigits = (value: number): string =>
@@ -206,7 +214,7 @@ const wrapLine = (line: string): string =>
206
214
 
207
215
  export class ComposeDashboardUseCase {
208
216
  run = (input: ComposeDashboardInput): string => {
209
- const statsLine = formatMachineStatusLine(input.machineStatus);
217
+ const statsLines = formatMachineStatusLines(input.machineStatus);
210
218
  const projectLines = [
211
219
  formatProjectHeaderLine(),
212
220
  ...input.projects.map((project) => formatProjectRowLine(project)),
@@ -214,7 +222,7 @@ export class ComposeDashboardUseCase {
214
222
  const tokenLines = sortTokens(input.tokens).map((token) =>
215
223
  formatTokenRowLine(token),
216
224
  );
217
- const lines = [statsLine, ...projectLines, '', ...tokenLines];
225
+ const lines = [...statsLines, ...projectLines, '', ...tokenLines];
218
226
  return lines.map((line) => wrapLine(line)).join('\n') + '\n';
219
227
  };
220
228
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dashboardComposeService.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/console/dashboardComposeService.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,qBAAqB,EAItB,MAAM,4DAA4D,CAAC;AAOpE,MAAM,MAAM,uBAAuB,GAAG;IACpC,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC;AA2IF,eAAO,MAAM,0BAA0B,GACrC,SAAS,uBAAuB,KAC/B,qBAYF,CAAC;AAUF,eAAO,MAAM,4BAA4B,GACvC,SAAS,uBAAuB,KAC/B,OAYF,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,SAAS,uBAAuB,KAC/B,MACqE,CAAC"}
1
+ {"version":3,"file":"dashboardComposeService.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/console/dashboardComposeService.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,qBAAqB,EAItB,MAAM,4DAA4D,CAAC;AAOpE,MAAM,MAAM,uBAAuB,GAAG;IACpC,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC;AA4IF,eAAO,MAAM,0BAA0B,GACrC,SAAS,uBAAuB,KAC/B,qBAYF,CAAC;AAUF,eAAO,MAAM,4BAA4B,GACvC,SAAS,uBAAuB,KAC/B,OAYF,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,SAAS,uBAAuB,KAC/B,MACqE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"GetStoryObjectMapUseCaseHandler.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/GetStoryObjectMapUseCaseHandler.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAG3D,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAEzE,qBAAa,+BAA+B;IAC1C,MAAM,GACJ,gBAAgB,MAAM,EACtB,UAAU,OAAO,EACjB,oBAAoB,MAAM,KACzB,OAAO,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;QACnB,cAAc,EAAE,cAAc,CAAC;KAChC,CAAC,CA2DA;CACH"}
1
+ {"version":3,"file":"GetStoryObjectMapUseCaseHandler.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/GetStoryObjectMapUseCaseHandler.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAG3D,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAEzE,qBAAa,+BAA+B;IAC1C,MAAM,GACJ,gBAAgB,MAAM,EACtB,UAAU,OAAO,EACjB,oBAAoB,MAAM,KACzB,OAAO,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;QACnB,cAAc,EAAE,cAAc,CAAC;KAChC,CAAC,CA8DA;CACH"}
@@ -1 +1 @@
1
- {"version":3,"file":"HandleScheduledEventUseCaseHandler.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts"],"names":[],"mappings":"AA8BA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAgC3D,qBAAa,kCAAkC;IAC7C,MAAM,GACJ,gBAAgB,MAAM,EACtB,UAAU,OAAO,KAChB,OAAO,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;QACnB,eAAe,EAAE,IAAI,EAAE,CAAC;KACzB,GAAG,IAAI,CAAC,CAwcP;CACH"}
1
+ {"version":3,"file":"HandleScheduledEventUseCaseHandler.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts"],"names":[],"mappings":"AA8BA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAgC3D,qBAAa,kCAAkC;IAC7C,MAAM,GACJ,gBAAgB,MAAM,EACtB,UAAU,OAAO,KAChB,OAAO,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;QACnB,eAAe,EAAE,IAAI,EAAE,CAAC;KACzB,GAAG,IAAI,CAAC,CAycP;CACH"}
@@ -8,6 +8,7 @@ export type MachineStatusWriterParams = {
8
8
  export type MachineStatusFile = {
9
9
  memPct: number;
10
10
  cpuPct: number;
11
+ diskPct: number;
11
12
  load: [number, number, number];
12
13
  cycleMinutes: number | null;
13
14
  capturedAt: string;
@@ -1 +1 @@
1
- {"version":3,"file":"machineStatusWriter.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/machineStatusWriter.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,yBAAyB,EAE1B,MAAM,8CAA8C,CAAC;AAEtD,MAAM,MAAM,yBAAyB,GAAG;IACtC,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC5C,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC7C,qBAAqB,CAAC,EAAE,yBAAyB,CAAC;IAClD,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AA8BF,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,yBAAyB,KAChC,OAAO,CAAC,IAAI,CA0Bd,CAAC"}
1
+ {"version":3,"file":"machineStatusWriter.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/machineStatusWriter.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,yBAAyB,EAE1B,MAAM,8CAA8C,CAAC;AAEtD,MAAM,MAAM,yBAAyB,GAAG;IACtC,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC5C,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC7C,qBAAqB,CAAC,EAAE,yBAAyB,CAAC;IAClD,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AA8BF,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,yBAAyB,KAChC,OAAO,CAAC,IAAI,CA4Bd,CAAC"}
@@ -1,10 +1,20 @@
1
1
  import { BaseGitHubRepository } from './BaseGitHubRepository';
2
+ import { LocalStorageCacheRepository } from './LocalStorageCacheRepository';
3
+ import { LocalStorageRepository } from './LocalStorageRepository';
2
4
  import { ProjectRepository } from '../../domain/usecases/adapter-interfaces/ProjectRepository';
3
5
  import { FieldOption, Project } from '../../domain/entities/Project';
6
+ export declare const resolveProjectCacheTtlMs: (rawValue: string | undefined) => number;
4
7
  export declare const convertToFieldOptionColor: (color: string) => FieldOption["color"];
5
8
  export declare class GraphqlProjectRepository extends BaseGitHubRepository implements Pick<ProjectRepository, 'getProject' | 'findProjectIdByUrl' | 'getByUrl' | 'updateStoryList' | 'updateStatusList'> {
6
9
  private readonly projectIdCache;
7
10
  private readonly fetchProjectIdFailedAt;
11
+ private readonly projectCache?;
12
+ private readonly projectCacheTtlMs;
13
+ constructor(localStorageRepository: LocalStorageRepository, ghToken?: string, projectCache?: Pick<LocalStorageCacheRepository, 'getLatest' | 'set'>, projectCacheTtlMs?: number);
14
+ private readProjectIdFromDiskCache;
15
+ private writeProjectIdToDiskCache;
16
+ private readProjectFromDiskCache;
17
+ private writeProjectToDiskCache;
8
18
  extractProjectFromUrl: (projectUrl: string) => {
9
19
  owner: string;
10
20
  projectNumber: number;
@@ -1 +1 @@
1
- {"version":3,"file":"GraphqlProjectRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/GraphqlProjectRepository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4DAA4D,CAAC;AAC/F,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAKrE,eAAO,MAAM,yBAAyB,GACpC,OAAO,MAAM,KACZ,WAAW,CAAC,OAAO,CAcrB,CAAC;AAEF,qBAAa,wBACX,SAAQ,oBACR,YACE,IAAI,CACF,iBAAiB,EACf,YAAY,GACZ,oBAAoB,GACpB,UAAU,GACV,iBAAiB,GACjB,kBAAkB,CACrB;IAEH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6B;IAC5D,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAA6B;IAEpE,qBAAqB,GACnB,YAAY,MAAM,KACjB;QACD,KAAK,EAAE,MAAM,CAAC;QACd,aAAa,EAAE,MAAM,CAAC;KACvB,CAMC;IACF,cAAc,GACZ,OAAO,MAAM,EACb,eAAe,MAAM,KACpB,OAAO,CAAC,MAAM,CAAC,CAsFhB;IACF,kBAAkB,GAChB,YAAY,MAAM,KACjB,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAG9B;IACF,UAAU,GAAU,WAAW,OAAO,CAAC,IAAI,CAAC,KAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CA8MpE;IACF,QAAQ,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,OAAO,CAAC,CAU9C;IACF,eAAe,GACb,SAAS,OAAO,EAChB,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG;QACvC,EAAE,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;KAC9B,CAAC,EAAE,KACH,OAAO,CAAC,WAAW,EAAE,CAAC,CA+CvB;IACF,gBAAgB,GACd,SAAS,OAAO,EAChB,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG;QACxC,EAAE,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;KAC9B,CAAC,EAAE,KACH,OAAO,CAAC,WAAW,EAAE,CAAC,CA4CvB;CACH"}
1
+ {"version":3,"file":"GraphqlProjectRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/GraphqlProjectRepository.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4DAA4D,CAAC;AAC/F,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAOrE,eAAO,MAAM,wBAAwB,GACnC,UAAU,MAAM,GAAG,SAAS,KAC3B,MASF,CAAC;AAKF,eAAO,MAAM,yBAAyB,GACpC,OAAO,MAAM,KACZ,WAAW,CAAC,OAAO,CAcrB,CAAC;AAEF,qBAAa,wBACX,SAAQ,oBACR,YACE,IAAI,CACF,iBAAiB,EACf,YAAY,GACZ,oBAAoB,GACpB,UAAU,GACV,iBAAiB,GACjB,kBAAkB,CACrB;IAEH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6B;IAC5D,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAA6B;IACpE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAG5B;IACF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;gBAGzC,sBAAsB,EAAE,sBAAsB,EAC9C,OAAO,GAAE,MAAwC,EACjD,YAAY,CAAC,EAAE,IAAI,CAAC,2BAA2B,EAAE,WAAW,GAAG,KAAK,CAAC,EACrE,iBAAiB,GAAE,MAElB;IAOH,OAAO,CAAC,0BAA0B,CAwBhC;IAEF,OAAO,CAAC,yBAAyB,CAe/B;IAEF,OAAO,CAAC,wBAAwB,CAyB9B;IAEF,OAAO,CAAC,uBAAuB,CAe7B;IAEF,qBAAqB,GACnB,YAAY,MAAM,KACjB;QACD,KAAK,EAAE,MAAM,CAAC;QACd,aAAa,EAAE,MAAM,CAAC;KACvB,CAMC;IACF,cAAc,GACZ,OAAO,MAAM,EACb,eAAe,MAAM,KACpB,OAAO,CAAC,MAAM,CAAC,CA4FhB;IACF,kBAAkB,GAChB,YAAY,MAAM,KACjB,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAG9B;IACF,UAAU,GAAU,WAAW,OAAO,CAAC,IAAI,CAAC,KAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAoNpE;IACF,QAAQ,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,OAAO,CAAC,CAU9C;IACF,eAAe,GACb,SAAS,OAAO,EAChB,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG;QACvC,EAAE,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;KAC9B,CAAC,EAAE,KACH,OAAO,CAAC,WAAW,EAAE,CAAC,CA+CvB;IACF,gBAAgB,GACd,SAAS,OAAO,EAChB,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG;QACxC,EAAE,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;KAC9B,CAAC,EAAE,KACH,OAAO,CAAC,WAAW,EAAE,CAAC,CA4CvB;CACH"}
@@ -1 +1 @@
1
- {"version":3,"file":"LocalStorageCacheRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/LocalStorageCacheRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,qBAAa,2BAA2B;IAEpC,QAAQ,CAAC,sBAAsB,EAAE,sBAAsB;IACvD,QAAQ,CAAC,SAAS;gBADT,sBAAsB,EAAE,sBAAsB,EAC9C,SAAS,SAAgB;IAGpC,SAAS,GACP,KAAK,MAAM,KACV,OAAO,CAAC;QACT,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,IAAI,CAAC;KACjB,GAAG,IAAI,CAAC,CA6BP;IACF,GAAG,GAAU,CAAC,EAAE,KAAK,MAAM,EAAE,OAAO,CAAC,KAAG,OAAO,CAAC,IAAI,CAAC,CAQnD;CACH"}
1
+ {"version":3,"file":"LocalStorageCacheRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/LocalStorageCacheRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,qBAAa,2BAA2B;IAEpC,QAAQ,CAAC,sBAAsB,EAAE,sBAAsB;IACvD,QAAQ,CAAC,SAAS;gBADT,sBAAsB,EAAE,sBAAsB,EAC9C,SAAS,SAAgB;IAGpC,SAAS,GACP,KAAK,MAAM,KACV,OAAO,CAAC;QACT,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,IAAI,CAAC;KACjB,GAAG,IAAI,CAAC,CA8BP;IACF,GAAG,GAAU,CAAC,EAAE,KAAK,MAAM,EAAE,OAAO,CAAC,KAAG,OAAO,CAAC,IAAI,CAAC,CAQnD;CACH"}
@@ -1,6 +1,7 @@
1
1
  export declare class LocalStorageRepository {
2
2
  write: (path: string, value: string) => void;
3
3
  read: (path: string) => string | null;
4
+ rename: (oldPath: string, newPath: string) => void;
4
5
  listFiles: (dirPath: string) => string[];
5
6
  mkdir: (dirPath: string) => void;
6
7
  remove: (path: string) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"LocalStorageRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/LocalStorageRepository.ts"],"names":[],"mappings":"AAEA,qBAAa,sBAAsB;IACjC,KAAK,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,UAIlC;IACF,IAAI,GAAI,MAAM,MAAM,KAAG,MAAM,GAAG,IAAI,CAElC;IACF,SAAS,GAAI,SAAS,MAAM,KAAG,MAAM,EAAE,CAKrC;IACF,KAAK,GAAI,SAAS,MAAM,UAEtB;IACF,MAAM,GAAI,MAAM,MAAM,UAKpB;CACH"}
1
+ {"version":3,"file":"LocalStorageRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/LocalStorageRepository.ts"],"names":[],"mappings":"AAEA,qBAAa,sBAAsB;IACjC,KAAK,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,UAIlC;IACF,IAAI,GAAI,MAAM,MAAM,KAAG,MAAM,GAAG,IAAI,CAElC;IACF,MAAM,GAAI,SAAS,MAAM,EAAE,SAAS,MAAM,UAExC;IACF,SAAS,GAAI,SAAS,MAAM,KAAG,MAAM,EAAE,CAKrC;IACF,KAAK,GAAI,SAAS,MAAM,UAEtB;IACF,MAAM,GAAI,MAAM,MAAM,UAKpB;CACH"}
@@ -7,17 +7,26 @@ export type LoadAverages = {
7
7
  fiveMinute: number;
8
8
  fifteenMinute: number;
9
9
  };
10
+ export type DiskBlocks = {
11
+ blocks: number;
12
+ bfree: number;
13
+ bavail: number;
14
+ };
10
15
  export declare const parseMemoryUsedPercent: (meminfoText: string) => number;
11
16
  export declare const parseCpuSample: (statText: string) => CpuSample;
12
17
  export declare const cpuUsedPercentFromSamples: (first: CpuSample, second: CpuSample) => number;
18
+ export declare const parseDiskUsedPercent: (blocks: number, bfree: number, bavail: number) => number;
13
19
  export declare const parseLoadAverages: (loadavgText: string) => LoadAverages;
14
20
  export declare const cycleMinutesFromMtimes: (mtimesDescendingSeconds: number[]) => number | null;
15
21
  export declare class ProcHostMetricsRepository {
16
22
  private readonly procDirectory;
17
23
  private readonly sleep;
18
- constructor(procDirectory?: string, sleep?: (milliseconds: number) => Promise<void>);
24
+ private readonly readDiskBlocks;
25
+ private readonly rootPath;
26
+ constructor(procDirectory?: string, sleep?: (milliseconds: number) => Promise<void>, readDiskBlocks?: (rootPath: string) => DiskBlocks, rootPath?: string);
19
27
  readMemoryUsedPercent: () => number;
20
28
  readCpuUsedPercent: () => Promise<number>;
21
29
  readLoadAverages: () => LoadAverages;
30
+ readDiskUsedPercent: () => number;
22
31
  }
23
32
  //# sourceMappingURL=ProcHostMetricsRepository.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProcHostMetricsRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/ProcHostMetricsRepository.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAKF,eAAO,MAAM,sBAAsB,GAAI,aAAa,MAAM,KAAG,MA2B5D,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,UAAU,MAAM,KAAG,SAiBjD,CAAC;AAEF,eAAO,MAAM,yBAAyB,GACpC,OAAO,SAAS,EAChB,QAAQ,SAAS,KAChB,MAQF,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,aAAa,MAAM,KAAG,YAavD,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,yBAAyB,MAAM,EAAE,KAChC,MAAM,GAAG,IAOX,CAAC;AAEF,qBAAa,yBAAyB;IAElC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,KAAK;gBADL,aAAa,GAAE,MAA+B,EAC9C,KAAK,GAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAK1D;IAGN,qBAAqB,QAAO,MAAM,CAG9B;IAEJ,kBAAkB,QAAa,OAAO,CAAC,MAAM,CAAC,CAS5C;IAEF,gBAAgB,QAAO,YAAY,CAG/B;CACL"}
1
+ {"version":3,"file":"ProcHostMetricsRepository.d.ts","sourceRoot":"","sources":["../../../src/adapter/repositories/ProcHostMetricsRepository.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAMF,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,aAAa,MAAM,KAAG,MA2B5D,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,UAAU,MAAM,KAAG,SAiBjD,CAAC;AAEF,eAAO,MAAM,yBAAyB,GACpC,OAAO,SAAS,EAChB,QAAQ,SAAS,KAChB,MAQF,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,MAAM,EACd,OAAO,MAAM,EACb,QAAQ,MAAM,KACb,MAOF,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,aAAa,MAAM,KAAG,YAavD,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,yBAAyB,MAAM,EAAE,KAChC,MAAM,GAAG,IAOX,CAAC;AAEF,qBAAa,yBAAyB;IAElC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,KAAK;IAMtB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAU/B,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAjBR,aAAa,GAAE,MAA+B,EAC9C,KAAK,GAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAK1D,EACa,cAAc,GAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,UAStD,EACgB,QAAQ,GAAE,MAA0B;IAGvD,qBAAqB,QAAO,MAAM,CAG9B;IAEJ,kBAAkB,QAAa,OAAO,CAAC,MAAM,CAAC,CAS5C;IAEF,gBAAgB,QAAO,YAAY,CAG/B;IAEJ,mBAAmB,QAAO,MAAM,CAG9B;CACH"}
@@ -8,6 +8,7 @@ export type ComposeDashboardProject = {
8
8
  export type ComposeDashboardMachineStatus = {
9
9
  memPct: number | null;
10
10
  cpuPct: number | null;
11
+ diskPct: number | null;
11
12
  load: [number, number, number] | null;
12
13
  cycleMinutes: number | null;
13
14
  };
@@ -18,7 +19,7 @@ export type ComposeDashboardInput = {
18
19
  };
19
20
  export declare const roundHalfToEven: (value: number) => number;
20
21
  export declare const formatResetCountdown: (totalSeconds: number) => string;
21
- export declare const formatMachineStatusLine: (machineStatus: ComposeDashboardMachineStatus | null) => string;
22
+ export declare const formatMachineStatusLines: (machineStatus: ComposeDashboardMachineStatus | null) => [string, string];
22
23
  export declare const formatProjectHeaderLine: () => string;
23
24
  export declare const formatProjectRowLine: (project: ComposeDashboardProject) => string;
24
25
  export declare const formatTokenRowLine: (token: TokenStatus) => string;
@@ -1 +1 @@
1
- {"version":3,"file":"ComposeDashboardUseCase.d.ts","sourceRoot":"","sources":["../../../../src/domain/usecases/dashboard/ComposeDashboardUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAoB,MAAM,8BAA8B,CAAC;AAE7E,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,YAAY,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACtC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,uBAAuB,EAAE,CAAC;IACpC,aAAa,EAAE,6BAA6B,GAAG,IAAI,CAAC;IACpD,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB,CAAC;AAmDF,eAAO,MAAM,eAAe,GAAI,OAAO,MAAM,KAAG,MAU/C,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,cAAc,MAAM,KAAG,MAa3D,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,eAAe,6BAA6B,GAAG,IAAI,KAClD,MAkBF,CAAC;AAKF,eAAO,MAAM,uBAAuB,QAAO,MAM1C,CAAC;AAkBF,eAAO,MAAM,oBAAoB,GAC/B,SAAS,uBAAuB,KAC/B,MAQF,CAAC;AA6BF,eAAO,MAAM,kBAAkB,GAAI,OAAO,WAAW,KAAG,MAcvD,CAAC;AAKF,qBAAa,uBAAuB;IAClC,GAAG,GAAI,OAAO,qBAAqB,KAAG,MAAM,CAW1C;CACH"}
1
+ {"version":3,"file":"ComposeDashboardUseCase.d.ts","sourceRoot":"","sources":["../../../../src/domain/usecases/dashboard/ComposeDashboardUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAoB,MAAM,8BAA8B,CAAC;AAE7E,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,YAAY,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACtC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,uBAAuB,EAAE,CAAC;IACpC,aAAa,EAAE,6BAA6B,GAAG,IAAI,CAAC;IACpD,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB,CAAC;AAmDF,eAAO,MAAM,eAAe,GAAI,OAAO,MAAM,KAAG,MAU/C,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,cAAc,MAAM,KAAG,MAa3D,CAAC;AAEF,eAAO,MAAM,wBAAwB,GACnC,eAAe,6BAA6B,GAAG,IAAI,KAClD,CAAC,MAAM,EAAE,MAAM,CAyBjB,CAAC;AAKF,eAAO,MAAM,uBAAuB,QAAO,MAM1C,CAAC;AAkBF,eAAO,MAAM,oBAAoB,GAC/B,SAAS,uBAAuB,KAC/B,MAQF,CAAC;AA6BF,eAAO,MAAM,kBAAkB,GAAI,OAAO,WAAW,KAAG,MAcvD,CAAC;AAKF,qBAAa,uBAAuB;IAClC,GAAG,GAAI,OAAO,qBAAqB,KAAG,MAAM,CAW1C;CACH"}