@quiltdata/benchling-webhook 0.8.0-20251118T054240Z → 0.8.2

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.
@@ -1,19 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Check CloudWatch logs for the deployed Benchling webhook ECS service
4
- *
5
- * @deprecated Use `npx @quiltdata/benchling-webhook logs` instead
6
- *
7
- * This script is deprecated and will be removed in v1.0.0.
8
- * Please use the new `logs` command which provides the same functionality
9
- * with better NPX compatibility and proper profile support.
10
- *
11
- * Migration:
12
- * Old: npx ts-node scripts/check-logs.ts --profile sales --type ecs
13
- * New: npx @quiltdata/benchling-webhook logs --profile sales --type ecs
14
- *
15
- * @module scripts/check-logs
16
- * @version 0.7.0
17
- */
18
- export {};
19
- //# sourceMappingURL=check-logs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"check-logs.d.ts","sourceRoot":"","sources":["../../scripts/check-logs.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;GAeG"}
@@ -1,302 +0,0 @@
1
- #!/usr/bin/env node
2
- "use strict";
3
- /**
4
- * Check CloudWatch logs for the deployed Benchling webhook ECS service
5
- *
6
- * @deprecated Use `npx @quiltdata/benchling-webhook logs` instead
7
- *
8
- * This script is deprecated and will be removed in v1.0.0.
9
- * Please use the new `logs` command which provides the same functionality
10
- * with better NPX compatibility and proper profile support.
11
- *
12
- * Migration:
13
- * Old: npx ts-node scripts/check-logs.ts --profile sales --type ecs
14
- * New: npx @quiltdata/benchling-webhook logs --profile sales --type ecs
15
- *
16
- * @module scripts/check-logs
17
- * @version 0.7.0
18
- */
19
- Object.defineProperty(exports, "__esModule", { value: true });
20
- const child_process_1 = require("child_process");
21
- const xdg_config_1 = require("../lib/xdg-config");
22
- const STACK_NAME = "BenchlingWebhookStack";
23
- /**
24
- * Get deployment configuration from profile
25
- *
26
- * Reads from ~/.config/benchling-webhook/{profile}/deployments.json
27
- */
28
- function getDeploymentFromProfile(profile, stage) {
29
- try {
30
- const xdg = new xdg_config_1.XDGConfig();
31
- const deployment = xdg.getActiveDeployment(profile, stage);
32
- if (deployment) {
33
- return {
34
- region: deployment.region,
35
- };
36
- }
37
- }
38
- catch {
39
- // Deployment tracking not available, will fall back to env vars
40
- }
41
- return null;
42
- }
43
- /**
44
- * Get AWS region from deployment tracking or environment
45
- */
46
- function getAwsRegion(profile, stage) {
47
- // Try to get region from deployment tracking
48
- const deployment = getDeploymentFromProfile(profile, stage);
49
- if (deployment) {
50
- return deployment.region;
51
- }
52
- // Fall back to environment variables
53
- if (process.env.CDK_DEFAULT_REGION) {
54
- return process.env.CDK_DEFAULT_REGION;
55
- }
56
- if (process.env.AWS_REGION) {
57
- return process.env.AWS_REGION;
58
- }
59
- // Default to us-east-1
60
- console.warn("⚠️ No region found in deployment tracking or environment variables");
61
- console.warn(" Defaulting to us-east-1");
62
- return "us-east-1";
63
- }
64
- function getStackOutputs(region, profile) {
65
- try {
66
- const profileFlag = profile !== "default" ? `--profile ${profile}` : "";
67
- const output = (0, child_process_1.execSync)(`aws cloudformation describe-stacks --stack-name ${STACK_NAME} --region ${region} ${profileFlag} --query 'Stacks[0].Outputs' --output json`, { encoding: "utf-8" });
68
- return JSON.parse(output);
69
- }
70
- catch {
71
- console.error(`Error: Could not get stack outputs for ${STACK_NAME}`);
72
- console.error("Make sure the stack is deployed and AWS credentials are configured.");
73
- process.exit(1);
74
- }
75
- }
76
- function getLogGroupFromOutputs(outputs, logType) {
77
- let outputKey;
78
- if (logType === "ecs") {
79
- outputKey = "EcsLogGroup";
80
- }
81
- else if (logType === "api") {
82
- outputKey = "ApiGatewayLogGroup";
83
- }
84
- else if (logType === "api-exec") {
85
- outputKey = "ApiGatewayExecutionLogGroup";
86
- }
87
- else {
88
- console.error(`Error: Invalid log type '${logType}'`);
89
- process.exit(1);
90
- }
91
- const logGroupOutput = outputs.find((o) => o.OutputKey === outputKey);
92
- if (!logGroupOutput) {
93
- console.error(`Error: Could not find ${outputKey} in stack outputs`);
94
- console.error("Make sure the stack has been deployed with the latest changes.");
95
- process.exit(1);
96
- }
97
- return logGroupOutput.OutputValue;
98
- }
99
- function printStackInfo(outputs, logGroup, logType, profile, stage) {
100
- console.log("=".repeat(80));
101
- console.log("Benchling Webhook Stack Information");
102
- console.log("=".repeat(80));
103
- const clusterName = outputs.find((o) => o.OutputKey === "FargateServiceClusterNameCD3B109F");
104
- const serviceName = outputs.find((o) => o.OutputKey === "FargateServiceServiceName24CFD869");
105
- const webhookEndpoint = outputs.find((o) => o.OutputKey === "WebhookEndpoint");
106
- const version = outputs.find((o) => o.OutputKey === "StackVersion");
107
- const ecsLogGroup = outputs.find((o) => o.OutputKey === "EcsLogGroup");
108
- const apiLogGroup = outputs.find((o) => o.OutputKey === "ApiGatewayLogGroup");
109
- const apiExecLogGroup = outputs.find((o) => o.OutputKey === "ApiGatewayExecutionLogGroup");
110
- const albDns = outputs.find((o) => o.OutputKey === "LoadBalancerDNS");
111
- console.log(`Profile: ${profile}`);
112
- console.log(`Stage: ${stage}`);
113
- if (clusterName)
114
- console.log(`Cluster: ${clusterName.OutputValue}`);
115
- if (serviceName)
116
- console.log(`Service: ${serviceName.OutputValue}`);
117
- if (webhookEndpoint)
118
- console.log(`Endpoint: ${webhookEndpoint.OutputValue}`);
119
- if (albDns)
120
- console.log(`ALB DNS: ${albDns.OutputValue}`);
121
- if (version)
122
- console.log(`Version: ${version.OutputValue}`);
123
- console.log("");
124
- console.log("Log Groups:");
125
- if (ecsLogGroup)
126
- console.log(` ECS: ${ecsLogGroup.OutputValue}${logType === "ecs" ? " (viewing)" : ""}`);
127
- if (apiLogGroup)
128
- console.log(` API Access: ${apiLogGroup.OutputValue}${logType === "api" ? " (viewing)" : ""}`);
129
- if (apiExecLogGroup)
130
- console.log(` API Exec: ${apiExecLogGroup.OutputValue}${logType === "api-exec" ? " (viewing)" : ""}`);
131
- console.log("=".repeat(80));
132
- console.log("");
133
- }
134
- function main() {
135
- // Show deprecation warning
136
- console.warn("\n⚠️ DEPRECATION WARNING");
137
- console.warn("═".repeat(80));
138
- console.warn("This script is deprecated. Please use the new 'logs' command instead:");
139
- console.warn("");
140
- console.warn(" npx @quiltdata/benchling-webhook logs [options]");
141
- console.warn("");
142
- console.warn("The new command provides:");
143
- console.warn(" - Better NPX compatibility (no ts-node required)");
144
- console.warn(" - Proper profile support");
145
- console.warn(" - Listed in --help output");
146
- console.warn(" - Same functionality as this script");
147
- console.warn("");
148
- console.warn("This script will be removed in v1.0.0");
149
- console.warn("═".repeat(80));
150
- console.warn("");
151
- const args = process.argv.slice(2);
152
- const logType = args.find((arg) => arg.startsWith("--type="))?.split("=")[1] || "all";
153
- const filterPattern = args.find((arg) => arg.startsWith("--filter="))?.split("=")[1];
154
- const since = args.find((arg) => arg.startsWith("--since="))?.split("=")[1] || "5m";
155
- const follow = args.includes("--follow") || args.includes("-f");
156
- const tail = args.find((arg) => arg.startsWith("--tail="))?.split("=")[1] || "100";
157
- const profile = args.find((arg) => arg.startsWith("--profile="))?.split("=")[1] || "default";
158
- const stage = args.find((arg) => arg.startsWith("--stage="))?.split("=")[1] || "prod";
159
- // Validate log type
160
- if (!["ecs", "api", "api-exec", "all"].includes(logType)) {
161
- console.error("Error: --type must be 'ecs', 'api', 'api-exec', or 'all'");
162
- process.exit(1);
163
- }
164
- // Get AWS region
165
- const AWS_REGION = getAwsRegion(profile, stage);
166
- // Get stack outputs
167
- const outputs = getStackOutputs(AWS_REGION, profile);
168
- // Handle 'all' type - show all three log groups
169
- if (logType === "all") {
170
- printStackInfo(outputs, null, "all", profile, stage);
171
- console.log("Showing logs from all sources (most recent first):\n");
172
- const logGroupDefs = [
173
- { type: "ECS", group: outputs.find((o) => o.OutputKey === "EcsLogGroup")?.OutputValue },
174
- { type: "API-Access", group: outputs.find((o) => o.OutputKey === "ApiGatewayLogGroup")?.OutputValue },
175
- { type: "API-Exec", group: outputs.find((o) => o.OutputKey === "ApiGatewayExecutionLogGroup")?.OutputValue },
176
- ];
177
- // Warn about missing log groups
178
- const missingGroups = logGroupDefs.filter(lg => !lg.group);
179
- if (missingGroups.length > 0) {
180
- console.log("⚠️ WARNING: Some log groups are not available in stack outputs:");
181
- missingGroups.forEach(({ type }) => {
182
- console.log(` - ${type}: Stack output not found (may need to redeploy stack)`);
183
- });
184
- console.log("");
185
- }
186
- const logGroups = logGroupDefs.filter(lg => lg.group);
187
- for (const { type, group } of logGroups) {
188
- console.log(`\n${"=".repeat(80)}`);
189
- console.log(`${type}: ${group}`);
190
- console.log("=".repeat(80));
191
- const profileFlag = profile !== "default" ? `--profile ${profile}` : "";
192
- let command = `aws logs tail "${group}"`;
193
- command += ` --region ${AWS_REGION}`;
194
- if (profileFlag)
195
- command += ` ${profileFlag}`;
196
- command += ` --since ${since}`;
197
- command += " --format short";
198
- if (filterPattern) {
199
- command += ` --filter-pattern "${filterPattern}"`;
200
- }
201
- command += ` 2>&1 | tail -${tail}`;
202
- try {
203
- const output = (0, child_process_1.execSync)(command, { encoding: "utf-8", shell: "/bin/bash" });
204
- if (output.trim()) {
205
- console.log(output);
206
- }
207
- else {
208
- console.log(`(No logs in the last ${since})`);
209
- }
210
- }
211
- catch (error) {
212
- const errorMessage = error instanceof Error ? error.message : String(error);
213
- console.log(`Error reading ${type} logs: ${errorMessage}`);
214
- }
215
- }
216
- return;
217
- }
218
- const logGroup = getLogGroupFromOutputs(outputs, logType);
219
- printStackInfo(outputs, logGroup, logType, profile, stage);
220
- // Build AWS logs command
221
- const profileFlag = profile !== "default" ? `--profile ${profile}` : "";
222
- let command = `aws logs tail ${logGroup}`;
223
- command += ` --region ${AWS_REGION}`;
224
- if (profileFlag)
225
- command += ` ${profileFlag}`;
226
- command += ` --since ${since}`;
227
- command += " --format short";
228
- if (filterPattern) {
229
- command += ` --filter-pattern "${filterPattern}"`;
230
- }
231
- if (follow) {
232
- command += " --follow";
233
- console.log("Following logs (Press Ctrl+C to stop)...\n");
234
- }
235
- else {
236
- command += ` | tail -${tail}`;
237
- console.log(`Showing last ${tail} log entries from the past ${since}...\n`);
238
- }
239
- // Execute logs command
240
- try {
241
- (0, child_process_1.execSync)(command, { stdio: "inherit" });
242
- }
243
- catch (error) {
244
- const hasStatus = error && typeof error === "object" && "status" in error;
245
- if (hasStatus && error.status !== 130) {
246
- // Ignore Ctrl+C exit (status 130)
247
- console.error("\nError fetching logs. Make sure:");
248
- console.error("1. The stack is deployed");
249
- console.error("2. AWS CLI is configured with proper credentials");
250
- console.error("3. You have CloudWatch Logs read permissions");
251
- process.exit(1);
252
- }
253
- }
254
- }
255
- function printHelp() {
256
- console.log("⚠️ DEPRECATED - Use 'npx @quiltdata/benchling-webhook logs' instead\n");
257
- console.log("Usage: npm run logs [options]");
258
- console.log("");
259
- console.log("Options:");
260
- console.log(" --profile=NAME Configuration profile to use (default: default)");
261
- console.log(" --stage=STAGE Deployment stage (default: prod)");
262
- console.log(" --type=TYPE Log group to view (default: all)");
263
- console.log(" all = All logs (ECS, API Access, API Execution)");
264
- console.log(" ecs = ECS container logs (application logs)");
265
- console.log(" api = API Gateway access logs (requests/responses)");
266
- console.log(" api-exec = API Gateway execution logs (detailed debugging)");
267
- console.log(" --since=TIME Time period to fetch logs (default: 5m)");
268
- console.log(" Examples: 1h, 30m, 2d, 5m");
269
- console.log(" --filter=PATTERN Filter logs by pattern");
270
- console.log(" Examples: --filter=ERROR, --filter=canvas, --filter=500");
271
- console.log(" --follow, -f Follow log output (like tail -f, not available with --type=all)");
272
- console.log(" --tail=N Show last N lines (default: 100, only without --follow)");
273
- console.log(" --help, -h Show this help message");
274
- console.log("");
275
- console.log("Examples:");
276
- console.log(" npm run logs # View all logs from prod deployment");
277
- console.log(" npm run logs -- --stage=dev # View dev deployment logs");
278
- console.log(" npm run logs -- --profile=dev --stage=dev # View dev profile, dev stage");
279
- console.log(" npm run logs -- --type=ecs # View only ECS logs");
280
- console.log(" npm run logs -- --type=api-exec # View API Gateway execution logs");
281
- console.log(" npm run logs -- --since=1h # Last hour of all logs");
282
- console.log(" npm run logs -- --filter=ERROR # Filter for errors in all logs");
283
- console.log(" npm run logs -- --type=api-exec --filter=500 # API Gateway execution errors");
284
- console.log(" npm run logs -- --type=ecs --follow # Follow ECS logs");
285
- console.log(" npm run logs -- --type=api-exec --since=10m # Last 10 min of execution logs");
286
- }
287
- if (require.main === module) {
288
- const args = process.argv.slice(2);
289
- if (args.includes("--help") || args.includes("-h")) {
290
- printHelp();
291
- process.exit(0);
292
- }
293
- try {
294
- main();
295
- }
296
- catch (error) {
297
- const errorMessage = error instanceof Error ? error.message : String(error);
298
- console.error("Error:", errorMessage);
299
- process.exit(1);
300
- }
301
- }
302
- //# sourceMappingURL=check-logs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"check-logs.js","sourceRoot":"","sources":["../../scripts/check-logs.ts"],"names":[],"mappings":"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"}