@adventurelabs/scout-core 1.0.62 → 1.0.64

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.
@@ -75,6 +75,7 @@ export async function server_load_herd_modules() {
75
75
  msg: "No herds found",
76
76
  data: null,
77
77
  time_finished: Date.now(),
78
+ time_sent: Date.now(),
78
79
  server_processing_time_ms: Date.now() - startTime,
79
80
  };
80
81
  }
@@ -87,11 +88,14 @@ export async function server_load_herd_modules() {
87
88
  const endTime = Date.now();
88
89
  const totalLoadTime = endTime - startTime;
89
90
  console.log(`[server_load_herd_modules] Loaded ${new_herds.data.length} herds in ${totalLoadTime}ms (parallel processing)`);
91
+ // Record the time when we're about to send the response
92
+ const timeSent = Date.now();
90
93
  return {
91
94
  status: EnumWebResponse.SUCCESS,
92
95
  msg: "Herd modules loaded successfully",
93
96
  data: serialized_herd_modules,
94
97
  time_finished: endTime,
98
+ time_sent: timeSent,
95
99
  server_processing_time_ms: totalLoadTime,
96
100
  };
97
101
  }
@@ -59,14 +59,18 @@ export function useScoutRefresh(options = {}) {
59
59
  const [herdModulesResult, userResult] = await Promise.all([
60
60
  (async () => {
61
61
  const start = Date.now();
62
+ console.log(`[useScoutRefresh] Starting herd modules request at ${new Date(start).toISOString()}`);
62
63
  const result = await server_load_herd_modules();
63
64
  const duration = Date.now() - start;
65
+ console.log(`[useScoutRefresh] Herd modules request completed in ${duration}ms`);
64
66
  return { result, duration, start };
65
67
  })(),
66
68
  (async () => {
67
69
  const start = Date.now();
70
+ console.log(`[useScoutRefresh] Starting user request at ${new Date(start).toISOString()}`);
68
71
  const result = await server_get_user();
69
72
  const duration = Date.now() - start;
73
+ console.log(`[useScoutRefresh] User request completed in ${duration}ms`);
70
74
  return { result, duration, start };
71
75
  })(),
72
76
  ]);
@@ -77,19 +81,52 @@ export function useScoutRefresh(options = {}) {
77
81
  const res_new_user = userResult.result;
78
82
  const herdModulesDuration = herdModulesResult.duration;
79
83
  const userApiDuration = userResult.duration;
84
+ // Calculate request timing breakdown
85
+ const requestStartTime = parallelStartTime;
86
+ const requestEndTime = Date.now();
87
+ const totalRequestTime = requestEndTime - requestStartTime;
88
+ console.log(`[useScoutRefresh] Request timing breakdown:`);
89
+ console.log(` - Request started at: ${new Date(requestStartTime).toISOString()}`);
90
+ console.log(` - Request completed at: ${new Date(requestEndTime).toISOString()}`);
91
+ console.log(` - Total request time: ${totalRequestTime}ms`);
92
+ console.log(` - Parallel execution time: ${parallelDuration}ms`);
93
+ console.log(` - Request overhead: ${totalRequestTime - parallelDuration}ms`);
80
94
  // Calculate network latency for herd modules
81
95
  let networkLatencyMs = 0;
82
96
  if (herdModulesResponse.status === EnumWebResponse.SUCCESS &&
83
97
  herdModulesResponse.data) {
84
98
  const serverFinishTime = herdModulesResponse.time_finished;
99
+ const serverSentTime = herdModulesResponse.time_sent;
85
100
  const clientReceiveTime = Date.now();
86
- const estimatedNetworkLatency = clientReceiveTime - serverFinishTime;
101
+ // More accurate network latency: from when server sent to when client received
102
+ const estimatedNetworkLatency = clientReceiveTime - serverSentTime;
87
103
  networkLatencyMs = Math.max(0, estimatedNetworkLatency);
104
+ // Time between server finishing processing and sending response
105
+ const serverOverhead = serverSentTime - serverFinishTime;
88
106
  console.log(`[useScoutRefresh] Network latency calculation:`);
89
- console.log(` - Server finished at: ${new Date(serverFinishTime).toISOString()}`);
107
+ console.log(` - Server finished processing at: ${new Date(serverFinishTime).toISOString()}`);
108
+ console.log(` - Server sent response at: ${new Date(serverSentTime).toISOString()}`);
90
109
  console.log(` - Client received at: ${new Date(clientReceiveTime).toISOString()}`);
91
- console.log(` - Estimated network latency: ${networkLatencyMs}ms`);
92
110
  console.log(` - Server processing time: ${herdModulesResponse.server_processing_time_ms}ms`);
111
+ console.log(` - Server overhead (finish to send): ${serverOverhead}ms`);
112
+ console.log(` - Estimated network latency: ${networkLatencyMs}ms`);
113
+ console.log(` - Client total time: ${herdModulesDuration}ms`);
114
+ console.log(` - Breakdown: ${herdModulesResponse.server_processing_time_ms}ms (server) + ${serverOverhead}ms (overhead) + ${networkLatencyMs}ms (network) = ${herdModulesResponse.server_processing_time_ms +
115
+ serverOverhead +
116
+ networkLatencyMs}ms`);
117
+ // Additional analysis
118
+ if (herdModulesResponse.data.length > 0) {
119
+ const totalDevices = herdModulesResponse.data.reduce((sum, hm) => sum + (hm.devices?.length || 0), 0);
120
+ const totalEvents = herdModulesResponse.data.reduce((sum, hm) => sum + (hm.events?.length || 0), 0);
121
+ console.log(` - Response size analysis:`);
122
+ console.log(` * Herds: ${herdModulesResponse.data.length}`);
123
+ console.log(` * Total devices: ${totalDevices}`);
124
+ console.log(` * Total events: ${totalEvents}`);
125
+ console.log(` * Estimated payload: ~${Math.round((herdModulesResponse.data.length * 2 +
126
+ totalDevices * 3 +
127
+ totalEvents * 5) /
128
+ 1024)}KB`);
129
+ }
93
130
  }
94
131
  // Store timing values
95
132
  timingRefs.current.herdModulesDuration = herdModulesDuration;
@@ -109,6 +146,7 @@ export function useScoutRefresh(options = {}) {
109
146
  console.log(` - Estimated network latency: ${networkLatencyMs}ms`);
110
147
  }
111
148
  // Validate API responses
149
+ const validationStartTime = Date.now();
112
150
  if (!herdModulesResponse.data ||
113
151
  !Array.isArray(herdModulesResponse.data)) {
114
152
  throw new Error("Invalid herd modules response");
@@ -116,6 +154,8 @@ export function useScoutRefresh(options = {}) {
116
154
  if (!res_new_user || !res_new_user.data) {
117
155
  throw new Error("Invalid user response");
118
156
  }
157
+ const validationDuration = Date.now() - validationStartTime;
158
+ console.log(`[useScoutRefresh] Data validation took: ${validationDuration}ms`);
119
159
  // Use the validated data
120
160
  const compatible_new_herd_modules = herdModulesResponse.data;
121
161
  // Measure data processing duration
@@ -50,5 +50,6 @@ export interface IHerdModulesResponseWithStatus {
50
50
  msg: string;
51
51
  data: IHerdModule[] | null;
52
52
  time_finished: number;
53
+ time_sent: number;
53
54
  server_processing_time_ms: number;
54
55
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adventurelabs/scout-core",
3
- "version": "1.0.62",
3
+ "version": "1.0.64",
4
4
  "description": "Core utilities and helpers for Adventure Labs Scout applications",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",