From feae744daee729ba4a5012a26f26b07aae357ebd Mon Sep 17 00:00:00 2001 From: Erfan Besharat Date: Sun, 27 Oct 2024 16:48:56 +0100 Subject: [PATCH] Use public facing gateway for telemetry --- package-lock.json | 15 ++++++++++++-- packages/cli/package.json | 1 + packages/cli/src/index.ts | 8 +++---- packages/cli/src/telemetry.ts | 39 +++++++---------------------------- 4 files changed, 24 insertions(+), 39 deletions(-) diff --git a/package-lock.json b/package-lock.json index f4f5fab9..6c4e309b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4682,6 +4682,17 @@ "postcss": "^8.1.0" } }, + "node_modules/axios": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -10152,7 +10163,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true, "license": "MIT" }, "node_modules/pstree.remy": { @@ -12925,8 +12935,9 @@ }, "packages/cli": { "name": "@nanoapi.io/napi", - "version": "0.0.3", + "version": "0.0.4", "dependencies": { + "axios": "^1.7.7", "dependency-tree": "^11.0.1", "express": "^4.21.1", "http-proxy-middleware": "^3.0.3", diff --git a/packages/cli/package.json b/packages/cli/package.json index 763f1a1f..0fd0f607 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -74,6 +74,7 @@ "vitest": "^2.1.1" }, "dependencies": { + "axios": "^1.7.7", "dependency-tree": "^11.0.1", "express": "^4.21.1", "http-proxy-middleware": "^3.0.3", diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index 7e770f4c..4f79bebd 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -18,11 +18,9 @@ if (process.env.NODE_ENV !== "development") { process.removeAllListeners("warning"); } -if (process.env.NAPI_DISABLE_TELEMETRY !== "true") { - trackEvent(TelemetryEvents.APP_START, { - message: "Napi started with Telemetry enabled", - }); -} +trackEvent(TelemetryEvents.APP_START, { + message: "Napi started with Telemetry enabled", +}); yargs(hideBin(process.argv)) .options({ diff --git a/packages/cli/src/telemetry.ts b/packages/cli/src/telemetry.ts index 45ca7863..3200d269 100644 --- a/packages/cli/src/telemetry.ts +++ b/packages/cli/src/telemetry.ts @@ -1,9 +1,7 @@ -// telemetry.ts +import axios from "axios"; import { EventEmitter } from "events"; import { existsSync, readFileSync, writeFileSync } from "fs"; -import { request } from "http"; import { join } from "path"; -import { URL } from "url"; import { v4 as uuidv4 } from "uuid"; export enum TelemetryEvents { @@ -27,9 +25,9 @@ export interface TelemetryEvent { } const telemetry = new EventEmitter(); -// TODO: @erbesharat: Deploy mongoose script to GCF and update the endpoint const TELEMETRY_ENDPOINT = - process.env.TELEMETRY_ENDPOINT || "http://localhost:3000/telemetry"; + process.env.TELEMETRY_ENDPOINT || + "https://napi-watchdog-api-gateway-33ge7a49.nw.gateway.dev/telemetryHandler"; const SESSION_FILE_PATH = join("/tmp", "napi_session_id"); // getSessionId generates a new session ID and cache it in SESSION_FILE_PATH @@ -56,40 +54,17 @@ telemetry.on("event", (data) => { sendTelemetryData(data); }); -const sendTelemetryData = (data: TelemetryEvent) => { +const sendTelemetryData = async (data: TelemetryEvent) => { try { - const url = new URL(TELEMETRY_ENDPOINT); - const options = { - hostname: url.hostname, - port: url.port || (url.protocol === "https:" ? 443 : 80), - path: url.pathname, - method: "POST", + await axios.post(TELEMETRY_ENDPOINT, data, { headers: { "Content-Type": "application/json", - "Content-Length": Buffer.byteLength(JSON.stringify(data)), "User-Agent": "napi", }, - }; - - const req = request(options, (res) => { - let responseData = ""; - res.on("data", (chunk) => { - responseData += chunk; - }); - - res.on("end", () => { - console.info(`Telemetry response: ${res.statusCode} - ${responseData}`); - }); + timeout: 5000, }); - - req.on("error", (error) => { - console.error(`Failed to send telemetry data: ${error}`); - }); - - req.write(JSON.stringify(data)); - req.end(); } catch (error) { - console.error(`Error in telemetry setup: ${error}`); + console.error(`Failed to send telemetry data: ${error}`); } };