@appsignal/nodejs
Advanced tools
Comparing version
@@ -29,5 +29,14 @@ "use strict"; | ||
console.log(` Installation result`); | ||
console.log(` Status: success`); | ||
const installReport = data["installation"]; | ||
console.log(` Status: ${installReport["result"]["status"]}`); | ||
const resultMessage = data["installation"]["result"]["message"]; | ||
if (resultMessage) { | ||
console.log(` Message: ${resultMessage}`); | ||
} | ||
const resultError = data["installation"]["result"]["error"]; | ||
if (resultError) { | ||
console.log(` Error: ${resultError}`); | ||
} | ||
console.log(` Language details`); | ||
console.log(` Node.js version: ${data["host"]["language_version"]}`); | ||
console.log(` Node.js version: ${data["installation"]["language"]["version"]}`); | ||
console.log(` Download details`); | ||
@@ -34,0 +43,0 @@ console.log(` Download URL: ${data["installation"]["download"]["download_url"]}`); |
import { NodeClient, Metrics, Plugin, Tracer } from "@appsignal/types"; | ||
import { Agent } from "./agent"; | ||
import { Extension } from "./extension"; | ||
import { Configuration } from "./config"; | ||
@@ -16,5 +16,5 @@ import { Instrumentation } from "./instrument"; | ||
#private; | ||
readonly VERSION = "2.1.0"; | ||
readonly VERSION = "2.1.1"; | ||
config: Configuration; | ||
agent: Agent; | ||
extension: Extension; | ||
instrumentation: Instrumentation; | ||
@@ -21,0 +21,0 @@ /** |
@@ -6,3 +6,3 @@ "use strict"; | ||
const tslib_1 = require("tslib"); | ||
const agent_1 = require("./agent"); | ||
const extension_1 = require("./extension"); | ||
const config_1 = require("./config"); | ||
@@ -39,3 +39,3 @@ const tracer_1 = require("./tracer"); | ||
this.config = new config_1.Configuration(options); | ||
this.agent = new agent_1.Agent({ active }); | ||
this.extension = new extension_1.Extension({ active }); | ||
this.instrumentation = new instrument_1.Instrumentation(this.tracer(), this.metrics()); | ||
@@ -49,3 +49,3 @@ bootstrap_1.initCorePlugins(this.instrumentation, { ignoreInstrumentation }); | ||
get isActive() { | ||
return this.agent.isLoaded && this.config.isValid; | ||
return this.extension.isLoaded && this.config.isValid; | ||
} | ||
@@ -63,3 +63,3 @@ set isActive(arg) { | ||
if (this.config.isValid) { | ||
this.agent.start(); | ||
this.extension.start(); | ||
} | ||
@@ -83,3 +83,3 @@ else { | ||
} | ||
this.agent.stop(); | ||
this.extension.stop(); | ||
} | ||
@@ -86,0 +86,0 @@ /** |
@@ -40,3 +40,3 @@ /// <reference types="node" /> | ||
app: {}; | ||
agent: object; | ||
extension: object; | ||
config: { | ||
@@ -43,0 +43,0 @@ options: { |
"use strict"; | ||
var _config, _agent; | ||
var _config, _extension; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
@@ -11,3 +11,3 @@ exports.DiagnoseTool = void 0; | ||
const crypto_1 = require("crypto"); | ||
const agent_1 = require("./agent"); | ||
const extension_1 = require("./extension"); | ||
const config_1 = require("./config"); | ||
@@ -19,5 +19,5 @@ const version_1 = require("./version"); | ||
_config.set(this, void 0); | ||
_agent.set(this, void 0); | ||
_extension.set(this, void 0); | ||
tslib_1.__classPrivateFieldSet(this, _config, new config_1.Configuration({ active })); | ||
tslib_1.__classPrivateFieldSet(this, _agent, new agent_1.Agent({ active })); | ||
tslib_1.__classPrivateFieldSet(this, _extension, new extension_1.Extension({ active })); | ||
} | ||
@@ -38,3 +38,3 @@ /** | ||
app: {}, | ||
agent: tslib_1.__classPrivateFieldGet(this, _agent).diagnose(), | ||
extension: tslib_1.__classPrivateFieldGet(this, _extension).diagnose(), | ||
config: { | ||
@@ -56,3 +56,3 @@ options: this.getConfigData(), | ||
agent_version: version_1.AGENT_VERSION, | ||
extension_loaded: tslib_1.__classPrivateFieldGet(this, _agent).isLoaded | ||
extension_loaded: tslib_1.__classPrivateFieldGet(this, _extension).isLoaded | ||
}; | ||
@@ -163,3 +163,3 @@ } | ||
exports.DiagnoseTool = DiagnoseTool; | ||
_config = new WeakMap(), _agent = new WeakMap(); | ||
_config = new WeakMap(), _extension = new WeakMap(); | ||
// This implementation should match the `packages/nodejs-ext/scripts/report.js` | ||
@@ -166,0 +166,0 @@ // implementation to generate the same path. |
@@ -1,3 +0,20 @@ | ||
import { Extension } from "./interfaces/extension"; | ||
declare let mod: Extension; | ||
export = mod; | ||
/** | ||
* The public interface for the extension. | ||
* | ||
* @class | ||
*/ | ||
export declare class Extension { | ||
isLoaded: boolean; | ||
constructor(options?: { | ||
active: boolean; | ||
}); | ||
/** | ||
* Starts the extension. | ||
*/ | ||
start(): boolean; | ||
/** | ||
* Stops the extension. | ||
*/ | ||
stop(): boolean; | ||
diagnose(): object; | ||
} |
"use strict"; | ||
let mod; | ||
try { | ||
mod = require("@appsignal/nodejs-ext"); | ||
} | ||
catch (e) { | ||
mod = { | ||
extension: { | ||
start() { | ||
throw new Error("Extension module not loaded"); | ||
}, | ||
stop() { | ||
return; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.Extension = void 0; | ||
const extension_wrapper_1 = require("./extension_wrapper"); | ||
/** | ||
* The public interface for the extension. | ||
* | ||
* @class | ||
*/ | ||
class Extension { | ||
constructor(options) { | ||
this.isLoaded = false; | ||
if (options === null || options === void 0 ? void 0 : options.active) | ||
this.start(); | ||
} | ||
/** | ||
* Starts the extension. | ||
*/ | ||
start() { | ||
try { | ||
extension_wrapper_1.extension.start(); | ||
this.isLoaded = true; | ||
} | ||
catch (e) { | ||
if (e.message === "Extension module not loaded") { | ||
console.warn("AppSignal extension not loaded. This could mean that your current environment isn't supported, or that another error has occurred."); | ||
} | ||
else { | ||
console.error(`Failed to load AppSignal extension with error: ${e.message}. Please email us at support@appsignal.com for support.`); | ||
} | ||
this.isLoaded = false; | ||
} | ||
}; | ||
return this.isLoaded; | ||
} | ||
/** | ||
* Stops the extension. | ||
*/ | ||
stop() { | ||
if (this.isLoaded) { | ||
extension_wrapper_1.extension.stop(); | ||
this.isLoaded = false; | ||
} | ||
return this.isLoaded; | ||
} | ||
diagnose() { | ||
if (this.isLoaded) { | ||
return JSON.parse(extension_wrapper_1.extension.diagnoseRaw()); | ||
} | ||
else { | ||
return {}; | ||
} | ||
} | ||
} | ||
module.exports = mod; | ||
exports.Extension = Extension; |
import { HashMap } from "@appsignal/types"; | ||
import { datamap, dataarray } from "../extension"; | ||
import { datamap, dataarray } from "../extension_wrapper"; | ||
export declare class Data { | ||
@@ -4,0 +4,0 @@ static generate(data: Array<any> | HashMap<any>, filtered?: boolean): any; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.Data = void 0; | ||
const extension_1 = require("../extension"); | ||
const extension_wrapper_1 = require("../extension_wrapper"); | ||
class Data { | ||
@@ -18,41 +18,41 @@ static generate(data, filtered = false) { | ||
static toJson(data) { | ||
return JSON.parse(extension_1.datamap.toJson(data)); | ||
return JSON.parse(extension_wrapper_1.datamap.toJson(data)); | ||
} | ||
static mapObject(hash_value, filtered) { | ||
let map = filtered ? extension_1.datamap.createFiltered() : extension_1.datamap.create(); | ||
let map = filtered ? extension_wrapper_1.datamap.createFiltered() : extension_wrapper_1.datamap.create(); | ||
Object.entries(hash_value).forEach(([key, value]) => { | ||
switch (typeof value) { | ||
case "string": | ||
extension_1.datamap.setString(key, value, map); | ||
extension_wrapper_1.datamap.setString(key, value, map); | ||
break; | ||
case "number": | ||
if (Number.isInteger(value)) { | ||
extension_1.datamap.setInteger(key, value, map); | ||
extension_wrapper_1.datamap.setInteger(key, value, map); | ||
} | ||
else { | ||
extension_1.datamap.setFloat(key, value, map); | ||
extension_wrapper_1.datamap.setFloat(key, value, map); | ||
} | ||
break; | ||
case "bigint": | ||
extension_1.datamap.setString(key, `bigint:${value}`, map); | ||
extension_wrapper_1.datamap.setString(key, `bigint:${value}`, map); | ||
break; | ||
case "boolean": | ||
extension_1.datamap.setBoolean(key, value, map); | ||
extension_wrapper_1.datamap.setBoolean(key, value, map); | ||
break; | ||
case "undefined": | ||
extension_1.datamap.setString(key, "undefined", map); | ||
extension_wrapper_1.datamap.setString(key, "undefined", map); | ||
break; | ||
case "object": | ||
if (!value) { | ||
extension_1.datamap.setNull(key, map); | ||
extension_wrapper_1.datamap.setNull(key, map); | ||
} | ||
else if (Array.isArray(value)) { | ||
extension_1.datamap.setData(key, this.mapArray(value, filtered), map); | ||
extension_wrapper_1.datamap.setData(key, this.mapArray(value, filtered), map); | ||
} | ||
else if ((value === null || value === void 0 ? void 0 : value.constructor.name) === "Object") { | ||
extension_1.datamap.setData(key, this.mapObject(value, filtered), map); | ||
extension_wrapper_1.datamap.setData(key, this.mapObject(value, filtered), map); | ||
} | ||
else { | ||
// attempt to co-erce whatever the data is to a string | ||
extension_1.datamap.setString(key, String(value), map); | ||
extension_wrapper_1.datamap.setString(key, String(value), map); | ||
} | ||
@@ -65,24 +65,24 @@ break; | ||
static mapArray(array_value, filtered) { | ||
let array = extension_1.dataarray.create(); | ||
let array = extension_wrapper_1.dataarray.create(); | ||
array_value.forEach(value => { | ||
switch (typeof value) { | ||
case "string": | ||
extension_1.dataarray.appendString(value, array); | ||
extension_wrapper_1.dataarray.appendString(value, array); | ||
break; | ||
case "number": | ||
if (Number.isInteger(value)) { | ||
extension_1.dataarray.appendInteger(value, array); | ||
extension_wrapper_1.dataarray.appendInteger(value, array); | ||
} | ||
else { | ||
extension_1.dataarray.appendFloat(value, array); | ||
extension_wrapper_1.dataarray.appendFloat(value, array); | ||
} | ||
break; | ||
case "bigint": | ||
extension_1.dataarray.appendString(`bigint:${value}`, array); | ||
extension_wrapper_1.dataarray.appendString(`bigint:${value}`, array); | ||
break; | ||
case "boolean": | ||
extension_1.dataarray.appendBoolean(value, array); | ||
extension_wrapper_1.dataarray.appendBoolean(value, array); | ||
break; | ||
case "undefined": | ||
extension_1.dataarray.appendString("undefined", array); | ||
extension_wrapper_1.dataarray.appendString("undefined", array); | ||
break; | ||
@@ -92,13 +92,13 @@ case "object": | ||
if (!value) { | ||
extension_1.dataarray.appendNull(array); | ||
extension_wrapper_1.dataarray.appendNull(array); | ||
} | ||
else if (Array.isArray(value)) { | ||
extension_1.dataarray.appendData(this.mapArray(value, filtered), array); | ||
extension_wrapper_1.dataarray.appendData(this.mapArray(value, filtered), array); | ||
} | ||
else if ((value === null || value === void 0 ? void 0 : value.constructor.name) === "Object") { | ||
extension_1.dataarray.appendData(this.mapObject(value, filtered), array); | ||
extension_wrapper_1.dataarray.appendData(this.mapObject(value, filtered), array); | ||
} | ||
else { | ||
// attempt to co-erce whatever the data is to a string | ||
extension_1.dataarray.appendString(String(value), array); | ||
extension_wrapper_1.dataarray.appendString(String(value), array); | ||
} | ||
@@ -105,0 +105,0 @@ break; |
@@ -7,3 +7,3 @@ "use strict"; | ||
const probes_1 = require("./probes"); | ||
const extension_1 = require("./extension"); | ||
const extension_wrapper_1 = require("./extension_wrapper"); | ||
const data_1 = require("./internal/data"); | ||
@@ -43,3 +43,3 @@ /** | ||
return this; | ||
extension_1.metrics.setGauge(key, value, data_1.Data.generate(tags || {})); | ||
extension_wrapper_1.metrics.setGauge(key, value, data_1.Data.generate(tags || {})); | ||
return this; | ||
@@ -63,3 +63,3 @@ } | ||
return this; | ||
extension_1.metrics.addDistributionValue(key, value, data_1.Data.generate(tags || {})); | ||
extension_wrapper_1.metrics.addDistributionValue(key, value, data_1.Data.generate(tags || {})); | ||
return this; | ||
@@ -84,3 +84,3 @@ } | ||
return this; | ||
extension_1.metrics.incrementCounter(key, value, data_1.Data.generate(tags || {})); | ||
extension_wrapper_1.metrics.incrementCounter(key, value, data_1.Data.generate(tags || {})); | ||
return this; | ||
@@ -87,0 +87,0 @@ } |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.RootSpan = exports.ChildSpan = exports.BaseSpan = void 0; | ||
const extension_1 = require("./extension"); | ||
const extension_wrapper_1 = require("./extension_wrapper"); | ||
const data_1 = require("./internal/data"); | ||
@@ -21,3 +21,3 @@ const utils_1 = require("./utils"); | ||
get traceId() { | ||
return extension_1.span.getTraceId(this._ref); | ||
return extension_wrapper_1.span.getTraceId(this._ref); | ||
} | ||
@@ -28,3 +28,3 @@ /** | ||
get spanId() { | ||
return extension_1.span.getSpanId(this._ref); | ||
return extension_wrapper_1.span.getSpanId(this._ref); | ||
} | ||
@@ -52,14 +52,14 @@ /** | ||
if (typeof value === "string") { | ||
extension_1.span.setSpanAttributeString(this._ref, key, value); | ||
extension_wrapper_1.span.setSpanAttributeString(this._ref, key, value); | ||
} | ||
if (typeof value === "number") { | ||
if (Number.isInteger(value)) { | ||
extension_1.span.setSpanAttributeInt(this._ref, key, value); | ||
extension_wrapper_1.span.setSpanAttributeInt(this._ref, key, value); | ||
} | ||
else { | ||
extension_1.span.setSpanAttributeDouble(this._ref, key, value); | ||
extension_wrapper_1.span.setSpanAttributeDouble(this._ref, key, value); | ||
} | ||
} | ||
if (typeof value === "boolean") { | ||
extension_1.span.setSpanAttributeBool(this._ref, key, value); | ||
extension_wrapper_1.span.setSpanAttributeBool(this._ref, key, value); | ||
} | ||
@@ -78,3 +78,3 @@ return this; | ||
} | ||
extension_1.span.setSpanAttributeSqlString(this._ref, "appsignal:body", value); | ||
extension_wrapper_1.span.setSpanAttributeSqlString(this._ref, "appsignal:body", value); | ||
return this; | ||
@@ -89,3 +89,3 @@ } | ||
return this; | ||
extension_1.span.setSpanName(this._ref, name); | ||
extension_wrapper_1.span.setSpanName(this._ref, name); | ||
return this; | ||
@@ -101,3 +101,3 @@ } | ||
} | ||
extension_1.span.setSpanAttributeString(this._ref, "appsignal:category", category); | ||
extension_wrapper_1.span.setSpanAttributeString(this._ref, "appsignal:category", category); | ||
return this; | ||
@@ -112,3 +112,3 @@ } | ||
try { | ||
extension_1.span.setSpanSampleData(this._ref, key, data_1.Data.generate(data, true)); | ||
extension_wrapper_1.span.setSpanSampleData(this._ref, key, data_1.Data.generate(data, true)); | ||
} | ||
@@ -150,7 +150,7 @@ catch (e) { | ||
const { sec, nsec } = utils_1.getAgentTimestamps(endTime); | ||
extension_1.span.closeSpanWithTimestamp(this._ref, sec, nsec); | ||
extension_wrapper_1.span.closeSpanWithTimestamp(this._ref, sec, nsec); | ||
return this; | ||
} | ||
else { | ||
extension_1.span.closeSpan(this._ref); | ||
extension_wrapper_1.span.closeSpan(this._ref); | ||
return this; | ||
@@ -163,3 +163,3 @@ } | ||
toJSON() { | ||
const json = extension_1.span.spanToJSON(this._ref); | ||
const json = extension_wrapper_1.span.spanToJSON(this._ref); | ||
// if this is true, then the span has been garbage collected | ||
@@ -185,6 +185,6 @@ // @TODO: i feel that this could have better ergonomics on the agent | ||
const { sec, nsec } = utils_1.getAgentTimestamps(startTime); | ||
this._ref = extension_1.span.createChildSpanWithTimestamp(spanOrContext.ref(), sec, nsec); | ||
this._ref = extension_wrapper_1.span.createChildSpanWithTimestamp(spanOrContext.ref(), sec, nsec); | ||
} | ||
else { | ||
this._ref = extension_1.span.createChildSpan(spanOrContext.ref()); | ||
this._ref = extension_wrapper_1.span.createChildSpan(spanOrContext.ref()); | ||
} | ||
@@ -194,3 +194,3 @@ } | ||
const { traceId, spanId } = spanOrContext; | ||
this._ref = extension_1.span.createSpanFromTraceparent(`00-${traceId}-${spanId}-00`); | ||
this._ref = extension_wrapper_1.span.createSpanFromTraceparent(`00-${traceId}-${spanId}-00`); | ||
} | ||
@@ -209,6 +209,6 @@ } | ||
const { sec, nsec } = utils_1.getAgentTimestamps(startTime); | ||
this._ref = extension_1.span.createRootSpanWithTimestamp(namespace, sec, nsec); | ||
this._ref = extension_wrapper_1.span.createRootSpanWithTimestamp(namespace, sec, nsec); | ||
} | ||
else { | ||
this._ref = extension_1.span.createRootSpan(namespace); | ||
this._ref = extension_wrapper_1.span.createRootSpan(namespace); | ||
} | ||
@@ -223,3 +223,3 @@ } | ||
const stackdata = data_1.Data.generate(error.stack ? error.stack.split("\n") : ["No stacktrace available."]); | ||
extension_1.span.addSpanError(this._ref, error.name, error.message, stackdata); | ||
extension_wrapper_1.span.addSpanError(this._ref, error.name, error.message, stackdata); | ||
return this; | ||
@@ -226,0 +226,0 @@ } |
@@ -1,2 +0,2 @@ | ||
export declare const VERSION = "2.1.0"; | ||
export declare const VERSION = "2.1.1"; | ||
export declare const AGENT_VERSION = "7376537"; |
@@ -5,3 +5,3 @@ "use strict"; | ||
// Do not touch this file, auto-generated by scripts/create-versionfile | ||
exports.VERSION = "2.1.0"; | ||
exports.VERSION = "2.1.1"; | ||
exports.AGENT_VERSION = "7376537"; |
{ | ||
"name": "@appsignal/nodejs", | ||
"version": "2.1.0", | ||
"version": "2.1.1", | ||
"main": "dist/index", | ||
@@ -19,3 +19,3 @@ "types": "dist/index", | ||
"optionalDependencies": { | ||
"@appsignal/nodejs-ext": "=2.0.1" | ||
"@appsignal/nodejs-ext": "=2.0.2" | ||
}, | ||
@@ -22,0 +22,0 @@ "devDependencies": { |
340800
0.36%78
2.63%3158
0.57%