@azure/monitor-opentelemetry-exporter 1.0.0-beta.3 → 1.0.0-beta.30
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.
- package/README.md +119 -44
- package/dist/commonjs/Declarations/Constants.d.ts +149 -0
- package/dist/commonjs/Declarations/Constants.d.ts.map +1 -0
- package/dist/commonjs/Declarations/Constants.js +167 -0
- package/dist/commonjs/Declarations/Constants.js.map +1 -0
- package/dist/commonjs/Declarations/Contracts/Constants.d.ts +14 -0
- package/dist/commonjs/Declarations/Contracts/Constants.d.ts.map +1 -0
- package/dist/commonjs/Declarations/Contracts/Constants.js +5 -0
- package/dist/commonjs/Declarations/Contracts/Constants.js.map +1 -0
- package/dist/commonjs/Declarations/Contracts/index.d.ts +2 -0
- package/dist/commonjs/Declarations/Contracts/index.d.ts.map +1 -0
- package/dist/commonjs/Declarations/Contracts/index.js +7 -0
- package/dist/commonjs/Declarations/Contracts/index.js.map +1 -0
- package/dist/commonjs/config.d.ts +30 -0
- package/dist/commonjs/config.d.ts.map +1 -0
- package/dist/commonjs/config.js +3 -0
- package/dist/commonjs/config.js.map +1 -0
- package/dist/commonjs/export/base.d.ts +36 -0
- package/dist/commonjs/export/base.d.ts.map +1 -0
- package/dist/commonjs/export/base.js +59 -0
- package/dist/commonjs/export/base.js.map +1 -0
- package/dist/commonjs/export/log.d.ts +30 -0
- package/dist/commonjs/export/log.d.ts.map +1 -0
- package/dist/commonjs/export/log.js +68 -0
- package/dist/commonjs/export/log.js.map +1 -0
- package/dist/commonjs/export/metric.d.ts +39 -0
- package/dist/commonjs/export/metric.d.ts.map +1 -0
- package/dist/commonjs/export/metric.js +79 -0
- package/dist/commonjs/export/metric.js.map +1 -0
- package/dist/commonjs/export/statsbeat/longIntervalStatsbeatMetrics.d.ts +39 -0
- package/dist/commonjs/export/statsbeat/longIntervalStatsbeatMetrics.d.ts.map +1 -0
- package/dist/commonjs/export/statsbeat/longIntervalStatsbeatMetrics.js +127 -0
- package/dist/commonjs/export/statsbeat/longIntervalStatsbeatMetrics.js.map +1 -0
- package/dist/commonjs/export/statsbeat/networkStatsbeatMetrics.d.ts +51 -0
- package/dist/commonjs/export/statsbeat/networkStatsbeatMetrics.d.ts.map +1 -0
- package/dist/commonjs/export/statsbeat/networkStatsbeatMetrics.js +289 -0
- package/dist/commonjs/export/statsbeat/networkStatsbeatMetrics.js.map +1 -0
- package/dist/commonjs/export/statsbeat/statsbeatExporter.d.ts +32 -0
- package/dist/commonjs/export/statsbeat/statsbeatExporter.d.ts.map +1 -0
- package/dist/commonjs/export/statsbeat/statsbeatExporter.js +62 -0
- package/dist/commonjs/export/statsbeat/statsbeatExporter.js.map +1 -0
- package/dist/commonjs/export/statsbeat/statsbeatMetrics.d.ts +11 -0
- package/dist/commonjs/export/statsbeat/statsbeatMetrics.d.ts.map +1 -0
- package/dist/commonjs/export/statsbeat/statsbeatMetrics.js +106 -0
- package/dist/commonjs/export/statsbeat/statsbeatMetrics.js.map +1 -0
- package/dist/commonjs/export/statsbeat/types.d.ts +102 -0
- package/dist/commonjs/export/statsbeat/types.d.ts.map +1 -0
- package/dist/commonjs/export/statsbeat/types.js +89 -0
- package/dist/commonjs/export/statsbeat/types.js.map +1 -0
- package/dist/commonjs/export/trace.d.ts +31 -0
- package/dist/commonjs/export/trace.d.ts.map +1 -0
- package/dist/commonjs/export/trace.js +76 -0
- package/dist/commonjs/export/trace.js.map +1 -0
- package/dist/commonjs/generated/applicationInsightsClient.d.ts +17 -0
- package/dist/commonjs/generated/applicationInsightsClient.d.ts.map +1 -0
- package/dist/commonjs/generated/applicationInsightsClient.js +89 -0
- package/dist/commonjs/generated/applicationInsightsClient.js.map +1 -0
- package/dist/commonjs/generated/index.d.ts +3 -0
- package/dist/commonjs/generated/index.d.ts.map +1 -0
- package/dist/commonjs/generated/index.js +15 -0
- package/dist/commonjs/generated/index.js.map +1 -0
- package/dist/commonjs/generated/models/index.d.ts +429 -0
- package/dist/commonjs/generated/models/index.d.ts.map +1 -0
- package/dist/commonjs/generated/models/index.js +93 -0
- package/dist/commonjs/generated/models/index.js.map +1 -0
- package/dist/commonjs/generated/models/mappers.d.ts +19 -0
- package/dist/commonjs/generated/models/mappers.d.ts.map +1 -0
- package/dist/commonjs/generated/models/mappers.js +848 -0
- package/dist/commonjs/generated/models/mappers.js.map +1 -0
- package/dist/commonjs/generated/models/parameters.d.ts +6 -0
- package/dist/commonjs/generated/models/parameters.d.ts.map +1 -0
- package/dist/commonjs/generated/models/parameters.js +60 -0
- package/dist/commonjs/generated/models/parameters.js.map +1 -0
- package/dist/commonjs/index.d.ts +10 -0
- package/dist/commonjs/index.d.ts.map +1 -0
- package/dist/commonjs/index.js +20 -0
- package/dist/commonjs/index.js.map +1 -0
- package/dist/commonjs/package.json +3 -0
- package/dist/commonjs/platform/index.d.ts +2 -0
- package/dist/commonjs/platform/index.d.ts.map +1 -0
- package/dist/commonjs/platform/index.js +10 -0
- package/dist/commonjs/platform/index.js.map +1 -0
- package/dist/commonjs/platform/nodejs/baseSender.d.ts +49 -0
- package/dist/commonjs/platform/nodejs/baseSender.d.ts.map +1 -0
- package/dist/commonjs/platform/nodejs/baseSender.js +239 -0
- package/dist/commonjs/platform/nodejs/baseSender.js.map +1 -0
- package/dist/commonjs/platform/nodejs/constants.d.ts +10 -0
- package/dist/commonjs/platform/nodejs/constants.d.ts.map +1 -0
- package/dist/commonjs/platform/nodejs/constants.js +15 -0
- package/dist/commonjs/platform/nodejs/constants.js.map +1 -0
- package/dist/commonjs/platform/nodejs/context/context.d.ts +21 -0
- package/dist/commonjs/platform/nodejs/context/context.d.ts.map +1 -0
- package/dist/commonjs/platform/nodejs/context/context.js +66 -0
- package/dist/commonjs/platform/nodejs/context/context.js.map +1 -0
- package/dist/commonjs/platform/nodejs/context/index.d.ts +2 -0
- package/dist/commonjs/platform/nodejs/context/index.d.ts.map +1 -0
- package/dist/commonjs/platform/nodejs/context/index.js +7 -0
- package/dist/commonjs/platform/nodejs/context/index.js.map +1 -0
- package/dist/commonjs/platform/nodejs/httpSender.d.ts +32 -0
- package/dist/commonjs/platform/nodejs/httpSender.d.ts.map +1 -0
- package/dist/commonjs/platform/nodejs/httpSender.js +70 -0
- package/dist/commonjs/platform/nodejs/httpSender.js.map +1 -0
- package/dist/commonjs/platform/nodejs/index.d.ts +8 -0
- package/dist/commonjs/platform/nodejs/index.d.ts.map +1 -0
- package/dist/commonjs/platform/nodejs/index.js +13 -0
- package/dist/commonjs/platform/nodejs/index.js.map +1 -0
- package/dist/commonjs/platform/nodejs/persist/fileAccessControl.d.ts +18 -0
- package/dist/commonjs/platform/nodejs/persist/fileAccessControl.d.ts.map +1 -0
- package/dist/commonjs/platform/nodejs/persist/fileAccessControl.js +177 -0
- package/dist/commonjs/platform/nodejs/persist/fileAccessControl.js.map +1 -0
- package/dist/commonjs/platform/nodejs/persist/fileSystemHelpers.d.ts +11 -0
- package/dist/commonjs/platform/nodejs/persist/fileSystemHelpers.d.ts.map +1 -0
- package/dist/commonjs/platform/nodejs/persist/fileSystemHelpers.js +60 -0
- package/dist/commonjs/platform/nodejs/persist/fileSystemHelpers.js.map +1 -0
- package/dist/commonjs/platform/nodejs/persist/fileSystemPersist.d.ts +29 -0
- package/dist/commonjs/platform/nodejs/persist/fileSystemPersist.d.ts.map +1 -0
- package/dist/commonjs/platform/nodejs/persist/fileSystemPersist.js +184 -0
- package/dist/commonjs/platform/nodejs/persist/fileSystemPersist.js.map +1 -0
- package/dist/commonjs/platform/nodejs/persist/index.d.ts +2 -0
- package/dist/commonjs/platform/nodejs/persist/index.d.ts.map +1 -0
- package/dist/commonjs/platform/nodejs/persist/index.js +7 -0
- package/dist/commonjs/platform/nodejs/persist/index.js.map +1 -0
- package/dist/commonjs/sampling.d.ts +38 -0
- package/dist/commonjs/sampling.d.ts.map +1 -0
- package/dist/commonjs/sampling.js +92 -0
- package/dist/commonjs/sampling.js.map +1 -0
- package/dist/commonjs/tsdoc-metadata.json +11 -0
- package/dist/commonjs/types.d.ts +101 -0
- package/dist/commonjs/types.d.ts.map +1 -0
- package/dist/commonjs/types.js +111 -0
- package/dist/commonjs/types.js.map +1 -0
- package/dist/commonjs/utils/breezeUtils.d.ts +25 -0
- package/dist/commonjs/utils/breezeUtils.d.ts.map +1 -0
- package/dist/commonjs/utils/breezeUtils.js +39 -0
- package/dist/commonjs/utils/breezeUtils.js.map +1 -0
- package/dist/commonjs/utils/common.d.ts +14 -0
- package/dist/commonjs/utils/common.d.ts.map +1 -0
- package/dist/commonjs/utils/common.js +251 -0
- package/dist/commonjs/utils/common.js.map +1 -0
- package/dist/commonjs/utils/connectionStringParser.d.ts +13 -0
- package/dist/commonjs/utils/connectionStringParser.d.ts.map +1 -0
- package/dist/commonjs/utils/connectionStringParser.js +83 -0
- package/dist/commonjs/utils/connectionStringParser.js.map +1 -0
- package/dist/commonjs/utils/constants/applicationinsights.d.ts +42 -0
- package/dist/commonjs/utils/constants/applicationinsights.d.ts.map +1 -0
- package/dist/commonjs/utils/constants/applicationinsights.js +48 -0
- package/dist/commonjs/utils/constants/applicationinsights.js.map +1 -0
- package/dist/commonjs/utils/constants/span/azAttributes.d.ts +16 -0
- package/dist/commonjs/utils/constants/span/azAttributes.d.ts.map +1 -0
- package/dist/commonjs/utils/constants/span/azAttributes.js +21 -0
- package/dist/commonjs/utils/constants/span/azAttributes.js.map +1 -0
- package/dist/commonjs/utils/eventhub.d.ts +10 -0
- package/dist/commonjs/utils/eventhub.d.ts.map +1 -0
- package/dist/commonjs/utils/eventhub.js +57 -0
- package/dist/commonjs/utils/eventhub.js.map +1 -0
- package/dist/commonjs/utils/logUtils.d.ts +8 -0
- package/dist/commonjs/utils/logUtils.d.ts.map +1 -0
- package/dist/commonjs/utils/logUtils.js +219 -0
- package/dist/commonjs/utils/logUtils.js.map +1 -0
- package/dist/commonjs/utils/metricUtils.d.ts +13 -0
- package/dist/commonjs/utils/metricUtils.d.ts.map +1 -0
- package/dist/commonjs/utils/metricUtils.js +132 -0
- package/dist/commonjs/utils/metricUtils.js.map +1 -0
- package/dist/commonjs/utils/spanUtils.d.ts +27 -0
- package/dist/commonjs/utils/spanUtils.d.ts.map +1 -0
- package/dist/commonjs/utils/spanUtils.js +518 -0
- package/dist/commonjs/utils/spanUtils.js.map +1 -0
- package/dist/esm/Declarations/Constants.d.ts +149 -0
- package/dist/esm/Declarations/Constants.d.ts.map +1 -0
- package/{dist-esm/src → dist/esm}/Declarations/Constants.js +109 -20
- package/dist/esm/Declarations/Constants.js.map +1 -0
- package/dist/esm/Declarations/Contracts/Constants.d.ts +14 -0
- package/dist/esm/Declarations/Contracts/Constants.d.ts.map +1 -0
- package/dist/esm/Declarations/Contracts/Constants.js +4 -0
- package/dist/esm/Declarations/Contracts/Constants.js.map +1 -0
- package/dist/esm/Declarations/Contracts/index.d.ts +2 -0
- package/dist/esm/Declarations/Contracts/index.d.ts.map +1 -0
- package/dist/esm/Declarations/Contracts/index.js +4 -0
- package/dist/esm/Declarations/Contracts/index.js.map +1 -0
- package/dist/esm/config.d.ts +30 -0
- package/dist/esm/config.d.ts.map +1 -0
- package/dist/esm/config.js +2 -0
- package/dist/esm/config.js.map +1 -0
- package/dist/esm/export/base.d.ts +36 -0
- package/dist/esm/export/base.d.ts.map +1 -0
- package/dist/esm/export/base.js +55 -0
- package/dist/esm/export/base.js.map +1 -0
- package/dist/esm/export/log.d.ts +30 -0
- package/dist/esm/export/log.d.ts.map +1 -0
- package/dist/esm/export/log.js +64 -0
- package/dist/esm/export/log.js.map +1 -0
- package/dist/esm/export/metric.d.ts +39 -0
- package/dist/esm/export/metric.d.ts.map +1 -0
- package/dist/esm/export/metric.js +75 -0
- package/dist/esm/export/metric.js.map +1 -0
- package/dist/esm/export/statsbeat/longIntervalStatsbeatMetrics.d.ts +39 -0
- package/dist/esm/export/statsbeat/longIntervalStatsbeatMetrics.d.ts.map +1 -0
- package/dist/esm/export/statsbeat/longIntervalStatsbeatMetrics.js +123 -0
- package/dist/esm/export/statsbeat/longIntervalStatsbeatMetrics.js.map +1 -0
- package/dist/esm/export/statsbeat/networkStatsbeatMetrics.d.ts +51 -0
- package/dist/esm/export/statsbeat/networkStatsbeatMetrics.d.ts.map +1 -0
- package/dist/esm/export/statsbeat/networkStatsbeatMetrics.js +284 -0
- package/dist/esm/export/statsbeat/networkStatsbeatMetrics.js.map +1 -0
- package/dist/esm/export/statsbeat/statsbeatExporter.d.ts +32 -0
- package/dist/esm/export/statsbeat/statsbeatExporter.d.ts.map +1 -0
- package/dist/esm/export/statsbeat/statsbeatExporter.js +58 -0
- package/dist/esm/export/statsbeat/statsbeatExporter.js.map +1 -0
- package/dist/esm/export/statsbeat/statsbeatMetrics.d.ts +11 -0
- package/dist/esm/export/statsbeat/statsbeatMetrics.d.ts.map +1 -0
- package/dist/esm/export/statsbeat/statsbeatMetrics.js +101 -0
- package/dist/esm/export/statsbeat/statsbeatMetrics.js.map +1 -0
- package/dist/esm/export/statsbeat/types.d.ts +102 -0
- package/dist/esm/export/statsbeat/types.d.ts.map +1 -0
- package/dist/esm/export/statsbeat/types.js +84 -0
- package/dist/esm/export/statsbeat/types.js.map +1 -0
- package/dist/esm/export/trace.d.ts +31 -0
- package/dist/esm/export/trace.d.ts.map +1 -0
- package/dist/esm/export/trace.js +72 -0
- package/dist/esm/export/trace.js.map +1 -0
- package/dist/esm/generated/applicationInsightsClient.d.ts +17 -0
- package/dist/esm/generated/applicationInsightsClient.d.ts.map +1 -0
- package/dist/esm/generated/applicationInsightsClient.js +84 -0
- package/dist/esm/generated/applicationInsightsClient.js.map +1 -0
- package/dist/esm/generated/index.d.ts +3 -0
- package/dist/esm/generated/index.d.ts.map +1 -0
- package/{dist-esm/src → dist/esm}/generated/index.js +2 -3
- package/dist/esm/generated/index.js.map +1 -0
- package/dist/esm/generated/models/index.d.ts +429 -0
- package/dist/esm/generated/models/index.d.ts.map +1 -0
- package/dist/esm/generated/models/index.js +90 -0
- package/dist/esm/generated/models/index.js.map +1 -0
- package/dist/esm/generated/models/mappers.d.ts +19 -0
- package/dist/esm/generated/models/mappers.d.ts.map +1 -0
- package/{dist-esm/src → dist/esm}/generated/models/mappers.js +291 -270
- package/dist/esm/generated/models/mappers.js.map +1 -0
- package/dist/esm/generated/models/parameters.d.ts +6 -0
- package/dist/esm/generated/models/parameters.d.ts.map +1 -0
- package/{dist-esm/src → dist/esm}/generated/models/parameters.js +17 -12
- package/dist/esm/generated/models/parameters.js.map +1 -0
- package/dist/esm/index.d.ts +10 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +10 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/platform/index.d.ts +2 -0
- package/dist/esm/platform/index.d.ts.map +1 -0
- package/{dist-esm/src → dist/esm}/platform/index.js +2 -2
- package/dist/esm/platform/index.js.map +1 -0
- package/dist/esm/platform/nodejs/baseSender.d.ts +49 -0
- package/dist/esm/platform/nodejs/baseSender.d.ts.map +1 -0
- package/dist/esm/platform/nodejs/baseSender.js +235 -0
- package/dist/esm/platform/nodejs/baseSender.js.map +1 -0
- package/dist/esm/platform/nodejs/constants.d.ts +10 -0
- package/dist/esm/platform/nodejs/constants.d.ts.map +1 -0
- package/dist/esm/platform/nodejs/constants.js +12 -0
- package/dist/esm/platform/nodejs/constants.js.map +1 -0
- package/dist/esm/platform/nodejs/context/context.d.ts +21 -0
- package/dist/esm/platform/nodejs/context/context.d.ts.map +1 -0
- package/dist/esm/platform/nodejs/context/context.js +60 -0
- package/dist/esm/platform/nodejs/context/context.js.map +1 -0
- package/dist/esm/platform/nodejs/context/index.d.ts +2 -0
- package/dist/esm/platform/nodejs/context/index.d.ts.map +1 -0
- package/dist/esm/platform/nodejs/context/index.js +4 -0
- package/{dist-esm/src → dist/esm}/platform/nodejs/context/index.js.map +1 -1
- package/dist/esm/platform/nodejs/httpSender.d.ts +32 -0
- package/dist/esm/platform/nodejs/httpSender.d.ts.map +1 -0
- package/dist/esm/platform/nodejs/httpSender.js +65 -0
- package/dist/esm/platform/nodejs/httpSender.js.map +1 -0
- package/dist/esm/platform/nodejs/index.d.ts +8 -0
- package/dist/esm/platform/nodejs/index.d.ts.map +1 -0
- package/dist/esm/platform/nodejs/index.js +10 -0
- package/dist/esm/platform/nodejs/index.js.map +1 -0
- package/dist/esm/platform/nodejs/persist/fileAccessControl.d.ts +18 -0
- package/dist/esm/platform/nodejs/persist/fileAccessControl.d.ts.map +1 -0
- package/dist/esm/platform/nodejs/persist/fileAccessControl.js +172 -0
- package/dist/esm/platform/nodejs/persist/fileAccessControl.js.map +1 -0
- package/dist/esm/platform/nodejs/persist/fileSystemHelpers.d.ts +11 -0
- package/dist/esm/platform/nodejs/persist/fileSystemHelpers.d.ts.map +1 -0
- package/dist/esm/platform/nodejs/persist/fileSystemHelpers.js +55 -0
- package/dist/esm/platform/nodejs/persist/fileSystemHelpers.js.map +1 -0
- package/dist/esm/platform/nodejs/persist/fileSystemPersist.d.ts +29 -0
- package/dist/esm/platform/nodejs/persist/fileSystemPersist.d.ts.map +1 -0
- package/dist/esm/platform/nodejs/persist/fileSystemPersist.js +180 -0
- package/dist/esm/platform/nodejs/persist/fileSystemPersist.js.map +1 -0
- package/dist/esm/platform/nodejs/persist/index.d.ts +2 -0
- package/dist/esm/platform/nodejs/persist/index.d.ts.map +1 -0
- package/dist/esm/platform/nodejs/persist/index.js +4 -0
- package/{dist-esm/src → dist/esm}/platform/nodejs/persist/index.js.map +1 -1
- package/dist/esm/sampling.d.ts +38 -0
- package/dist/esm/sampling.d.ts.map +1 -0
- package/dist/esm/sampling.js +88 -0
- package/dist/esm/sampling.js.map +1 -0
- package/dist/esm/types.d.ts +101 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +108 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/utils/breezeUtils.d.ts +25 -0
- package/dist/esm/utils/breezeUtils.d.ts.map +1 -0
- package/dist/esm/utils/breezeUtils.js +35 -0
- package/dist/esm/utils/breezeUtils.js.map +1 -0
- package/dist/esm/utils/common.d.ts +14 -0
- package/dist/esm/utils/common.d.ts.map +1 -0
- package/dist/esm/utils/common.js +240 -0
- package/dist/esm/utils/common.js.map +1 -0
- package/dist/esm/utils/connectionStringParser.d.ts +13 -0
- package/dist/esm/utils/connectionStringParser.d.ts.map +1 -0
- package/{dist-esm/src → dist/esm}/utils/connectionStringParser.js +22 -8
- package/dist/esm/utils/connectionStringParser.js.map +1 -0
- package/dist/esm/utils/constants/applicationinsights.d.ts +42 -0
- package/dist/esm/utils/constants/applicationinsights.d.ts.map +1 -0
- package/dist/esm/utils/constants/applicationinsights.js +45 -0
- package/dist/esm/utils/constants/applicationinsights.js.map +1 -0
- package/dist/esm/utils/constants/span/azAttributes.d.ts +16 -0
- package/dist/esm/utils/constants/span/azAttributes.d.ts.map +1 -0
- package/dist/esm/utils/constants/span/azAttributes.js +18 -0
- package/dist/esm/utils/constants/span/azAttributes.js.map +1 -0
- package/dist/esm/utils/eventhub.d.ts +10 -0
- package/dist/esm/utils/eventhub.d.ts.map +1 -0
- package/{dist-esm/src → dist/esm}/utils/eventhub.js +6 -5
- package/dist/esm/utils/eventhub.js.map +1 -0
- package/dist/esm/utils/logUtils.d.ts +8 -0
- package/dist/esm/utils/logUtils.d.ts.map +1 -0
- package/dist/esm/utils/logUtils.js +216 -0
- package/dist/esm/utils/logUtils.js.map +1 -0
- package/dist/esm/utils/metricUtils.d.ts +13 -0
- package/dist/esm/utils/metricUtils.d.ts.map +1 -0
- package/dist/esm/utils/metricUtils.js +125 -0
- package/dist/esm/utils/metricUtils.js.map +1 -0
- package/dist/esm/utils/spanUtils.d.ts +27 -0
- package/dist/esm/utils/spanUtils.d.ts.map +1 -0
- package/dist/esm/utils/spanUtils.js +502 -0
- package/dist/esm/utils/spanUtils.js.map +1 -0
- package/package.json +98 -57
- package/CHANGELOG.md +0 -22
- package/dist/index.js +0 -1855
- package/dist-esm/src/Declarations/Constants.js.map +0 -1
- package/dist-esm/src/Declarations/Contracts/Constants.js +0 -4
- package/dist-esm/src/Declarations/Contracts/Constants.js.map +0 -1
- package/dist-esm/src/Declarations/Contracts/index.js +0 -4
- package/dist-esm/src/Declarations/Contracts/index.js.map +0 -1
- package/dist-esm/src/config.js +0 -13
- package/dist-esm/src/config.js.map +0 -1
- package/dist-esm/src/export/trace.js +0 -135
- package/dist-esm/src/export/trace.js.map +0 -1
- package/dist-esm/src/generated/applicationInsightsClient.js +0 -64
- package/dist-esm/src/generated/applicationInsightsClient.js.map +0 -1
- package/dist-esm/src/generated/applicationInsightsClientContext.js +0 -32
- package/dist-esm/src/generated/applicationInsightsClientContext.js.map +0 -1
- package/dist-esm/src/generated/index.js.map +0 -1
- package/dist-esm/src/generated/models/index.js +0 -9
- package/dist-esm/src/generated/models/index.js.map +0 -1
- package/dist-esm/src/generated/models/mappers.js.map +0 -1
- package/dist-esm/src/generated/models/parameters.js.map +0 -1
- package/dist-esm/src/index.js +0 -5
- package/dist-esm/src/index.js.map +0 -1
- package/dist-esm/src/platform/index.js.map +0 -1
- package/dist-esm/src/platform/nodejs/constants.js +0 -8
- package/dist-esm/src/platform/nodejs/constants.js.map +0 -1
- package/dist-esm/src/platform/nodejs/context/context.js +0 -105
- package/dist-esm/src/platform/nodejs/context/context.js.map +0 -1
- package/dist-esm/src/platform/nodejs/context/index.js +0 -4
- package/dist-esm/src/platform/nodejs/httpSender.js +0 -34
- package/dist-esm/src/platform/nodejs/httpSender.js.map +0 -1
- package/dist-esm/src/platform/nodejs/index.js +0 -10
- package/dist-esm/src/platform/nodejs/index.js.map +0 -1
- package/dist-esm/src/platform/nodejs/persist/fileSystemHelpers.js +0 -48
- package/dist-esm/src/platform/nodejs/persist/fileSystemHelpers.js.map +0 -1
- package/dist-esm/src/platform/nodejs/persist/fileSystemPersist.js +0 -121
- package/dist-esm/src/platform/nodejs/persist/fileSystemPersist.js.map +0 -1
- package/dist-esm/src/platform/nodejs/persist/index.js +0 -4
- package/dist-esm/src/types.js +0 -4
- package/dist-esm/src/types.js.map +0 -1
- package/dist-esm/src/utils/breezeUtils.js +0 -27
- package/dist-esm/src/utils/breezeUtils.js.map +0 -1
- package/dist-esm/src/utils/connectionStringParser.js.map +0 -1
- package/dist-esm/src/utils/constants/applicationinsights.js +0 -13
- package/dist-esm/src/utils/constants/applicationinsights.js.map +0 -1
- package/dist-esm/src/utils/constants/span/azAttributes.js +0 -6
- package/dist-esm/src/utils/constants/span/azAttributes.js.map +0 -1
- package/dist-esm/src/utils/constants/span/dbAttributes.js +0 -14
- package/dist-esm/src/utils/constants/span/dbAttributes.js.map +0 -1
- package/dist-esm/src/utils/constants/span/grpcAttributes.js +0 -9
- package/dist-esm/src/utils/constants/span/grpcAttributes.js.map +0 -1
- package/dist-esm/src/utils/constants/span/httpAttributes.js +0 -8
- package/dist-esm/src/utils/constants/span/httpAttributes.js.map +0 -1
- package/dist-esm/src/utils/eventhub.js.map +0 -1
- package/dist-esm/src/utils/spanUtils.js +0 -214
- package/dist-esm/src/utils/spanUtils.js.map +0 -1
- package/types/monitor-opentelemetry-exporter.d.ts +0 -29
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
import * as os from "node:os";
|
|
4
|
+
import { SDK_INFO } from "@opentelemetry/core";
|
|
5
|
+
import { ATTR_TELEMETRY_SDK_VERSION } from "@opentelemetry/semantic-conventions";
|
|
6
|
+
import { KnownContextTagKeys } from "../../../generated/index.js";
|
|
7
|
+
import * as ai from "../../../utils/constants/applicationinsights.js";
|
|
8
|
+
import { ENV_AZURE_MONITOR_PREFIX, ENV_APPLICATIONINSIGHTS_SHIM_VERSION, ENV_AZURE_MONITOR_DISTRO_VERSION, } from "../../../Declarations/Constants.js";
|
|
9
|
+
let instance = null;
|
|
10
|
+
/**
|
|
11
|
+
* Azure Telemetry context.
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
export class Context {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.tags = {};
|
|
17
|
+
this._loadDeviceContext();
|
|
18
|
+
this._loadInternalContext();
|
|
19
|
+
}
|
|
20
|
+
_loadDeviceContext() {
|
|
21
|
+
this.tags[KnownContextTagKeys.AiDeviceOsVersion] = os && `${os.type()} ${os.release()}`;
|
|
22
|
+
}
|
|
23
|
+
_loadInternalContext() {
|
|
24
|
+
const { node } = process.versions;
|
|
25
|
+
[Context.nodeVersion] = node.split(".");
|
|
26
|
+
Context.opentelemetryVersion = SDK_INFO[ATTR_TELEMETRY_SDK_VERSION];
|
|
27
|
+
Context.sdkVersion = ai.packageVersion;
|
|
28
|
+
const prefix = process.env[ENV_AZURE_MONITOR_PREFIX]
|
|
29
|
+
? process.env[ENV_AZURE_MONITOR_PREFIX]
|
|
30
|
+
: "";
|
|
31
|
+
const version = this._getVersion();
|
|
32
|
+
const internalSdkVersion = `${prefix}node${Context.nodeVersion}:otel${Context.opentelemetryVersion}:${version}`;
|
|
33
|
+
this.tags[KnownContextTagKeys.AiInternalSdkVersion] = internalSdkVersion;
|
|
34
|
+
}
|
|
35
|
+
_getVersion() {
|
|
36
|
+
if (process.env[ENV_APPLICATIONINSIGHTS_SHIM_VERSION]) {
|
|
37
|
+
return `sha${process.env[ENV_APPLICATIONINSIGHTS_SHIM_VERSION]}`;
|
|
38
|
+
}
|
|
39
|
+
else if (process.env[ENV_AZURE_MONITOR_DISTRO_VERSION]) {
|
|
40
|
+
return `dst${process.env[ENV_AZURE_MONITOR_DISTRO_VERSION]}`;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
return `ext${Context.sdkVersion}`;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
Context.sdkVersion = null;
|
|
48
|
+
Context.opentelemetryVersion = null;
|
|
49
|
+
Context.nodeVersion = "";
|
|
50
|
+
/**
|
|
51
|
+
* Singleton Context instance
|
|
52
|
+
* @internal
|
|
53
|
+
*/
|
|
54
|
+
export function getInstance() {
|
|
55
|
+
if (!instance) {
|
|
56
|
+
instance = new Context();
|
|
57
|
+
}
|
|
58
|
+
return instance;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../../../src/platform/nodejs/context/context.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,MAAM,iDAAiD,CAAC;AAEtE,OAAO,EACL,wBAAwB,EACxB,oCAAoC,EACpC,gCAAgC,GACjC,MAAM,oCAAoC,CAAC;AAE5C,IAAI,QAAQ,GAAmB,IAAI,CAAC;AAEpC;;;GAGG;AACH,MAAM,OAAO,OAAO;IASlB;QACE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QACf,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC9B,CAAC;IAEO,kBAAkB;QACxB,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,GAAG,EAAE,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;IAC1F,CAAC;IAEO,oBAAoB;QAC1B,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;QAClC,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,OAAO,CAAC,oBAAoB,GAAG,QAAQ,CAAC,0BAA0B,CAAC,CAAC;QACpE,OAAO,CAAC,UAAU,GAAG,EAAE,CAAC,cAAc,CAAC;QAEvC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;YAClD,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;YACvC,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,kBAAkB,GAAG,GAAG,MAAM,OAAO,OAAO,CAAC,WAAW,QAAQ,OAAO,CAAC,oBAAoB,IAAI,OAAO,EAAE,CAAC;QAChH,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,GAAG,kBAAkB,CAAC;IAC3E,CAAC;IAEO,WAAW;QACjB,IAAI,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,EAAE,CAAC;YACtD,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,EAAE,CAAC;QACnE,CAAC;aAAM,IAAI,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,EAAE,CAAC;YACzD,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,EAAE,CAAC;QAC/D,CAAC;aAAM,CAAC;YACN,OAAO,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;QACpC,CAAC;IACH,CAAC;;AAtCa,kBAAU,GAAkB,IAAI,CAAC;AAEjC,4BAAoB,GAAkB,IAAI,CAAC;AAE3C,mBAAW,GAAW,EAAE,CAAC;AAqCzC;;;GAGG;AACH,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,QAAQ,GAAG,IAAI,OAAO,EAAE,CAAC;IAC3B,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport * as os from \"node:os\";\nimport { SDK_INFO } from \"@opentelemetry/core\";\nimport { ATTR_TELEMETRY_SDK_VERSION } from \"@opentelemetry/semantic-conventions\";\nimport { KnownContextTagKeys } from \"../../../generated/index.js\";\nimport * as ai from \"../../../utils/constants/applicationinsights.js\";\nimport type { Tags } from \"../../../types.js\";\nimport {\n ENV_AZURE_MONITOR_PREFIX,\n ENV_APPLICATIONINSIGHTS_SHIM_VERSION,\n ENV_AZURE_MONITOR_DISTRO_VERSION,\n} from \"../../../Declarations/Constants.js\";\n\nlet instance: Context | null = null;\n\n/**\n * Azure Telemetry context.\n * @internal\n */\nexport class Context {\n public tags: Tags;\n\n public static sdkVersion: string | null = null;\n\n public static opentelemetryVersion: string | null = null;\n\n public static nodeVersion: string = \"\";\n\n constructor() {\n this.tags = {};\n this._loadDeviceContext();\n this._loadInternalContext();\n }\n\n private _loadDeviceContext(): void {\n this.tags[KnownContextTagKeys.AiDeviceOsVersion] = os && `${os.type()} ${os.release()}`;\n }\n\n private _loadInternalContext(): void {\n const { node } = process.versions;\n [Context.nodeVersion] = node.split(\".\");\n Context.opentelemetryVersion = SDK_INFO[ATTR_TELEMETRY_SDK_VERSION];\n Context.sdkVersion = ai.packageVersion;\n\n const prefix = process.env[ENV_AZURE_MONITOR_PREFIX]\n ? process.env[ENV_AZURE_MONITOR_PREFIX]\n : \"\";\n const version = this._getVersion();\n const internalSdkVersion = `${prefix}node${Context.nodeVersion}:otel${Context.opentelemetryVersion}:${version}`;\n this.tags[KnownContextTagKeys.AiInternalSdkVersion] = internalSdkVersion;\n }\n\n private _getVersion(): string {\n if (process.env[ENV_APPLICATIONINSIGHTS_SHIM_VERSION]) {\n return `sha${process.env[ENV_APPLICATIONINSIGHTS_SHIM_VERSION]}`;\n } else if (process.env[ENV_AZURE_MONITOR_DISTRO_VERSION]) {\n return `dst${process.env[ENV_AZURE_MONITOR_DISTRO_VERSION]}`;\n } else {\n return `ext${Context.sdkVersion}`;\n }\n }\n}\n\n/**\n * Singleton Context instance\n * @internal\n */\nexport function getInstance(): Context {\n if (!instance) {\n instance = new Context();\n }\n return instance;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/platform/nodejs/context/index.ts"],"names":[],"mappings":"AAGA,cAAc,cAAc,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/platform/nodejs/context/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/platform/nodejs/context/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,cAAc,cAAc,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport * from \"./context.js\";\n"]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { SenderResult } from "../../types.js";
|
|
2
|
+
import type { TelemetryItem as Envelope } from "../../generated/index.js";
|
|
3
|
+
import type { AzureMonitorExporterOptions } from "../../config.js";
|
|
4
|
+
import { BaseSender } from "./baseSender.js";
|
|
5
|
+
/**
|
|
6
|
+
* Exporter HTTP sender class
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
export declare class HttpSender extends BaseSender {
|
|
10
|
+
private readonly appInsightsClient;
|
|
11
|
+
private appInsightsClientOptions;
|
|
12
|
+
constructor(options: {
|
|
13
|
+
endpointUrl: string;
|
|
14
|
+
instrumentationKey: string;
|
|
15
|
+
trackStatsbeat: boolean;
|
|
16
|
+
exporterOptions: AzureMonitorExporterOptions;
|
|
17
|
+
aadAudience?: string;
|
|
18
|
+
isStatsbeatSender?: boolean;
|
|
19
|
+
});
|
|
20
|
+
/**
|
|
21
|
+
* Send Azure envelopes
|
|
22
|
+
* @internal
|
|
23
|
+
*/
|
|
24
|
+
send(envelopes: Envelope[]): Promise<SenderResult>;
|
|
25
|
+
/**
|
|
26
|
+
* Shutdown sender
|
|
27
|
+
* @internal
|
|
28
|
+
*/
|
|
29
|
+
shutdown(): Promise<void>;
|
|
30
|
+
handlePermanentRedirect(location: string | undefined): void;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=httpSender.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"httpSender.d.ts","sourceRoot":"","sources":["../../../../src/platform/nodejs/httpSender.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EACV,aAAa,IAAI,QAAQ,EAG1B,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAI7C;;;GAGG;AACH,qBAAa,UAAW,SAAQ,UAAU;IACxC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA4B;IAC9D,OAAO,CAAC,wBAAwB,CAA0C;gBAE9D,OAAO,EAAE;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,cAAc,EAAE,OAAO,CAAC;QACxB,eAAe,EAAE,2BAA2B,CAAC;QAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;KAC7B;IAuBD;;;OAGG;IACG,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC;IAiBxD;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/B,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;CAQ5D"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
import url from "node:url";
|
|
4
|
+
import { diag } from "@opentelemetry/api";
|
|
5
|
+
import { redirectPolicyName } from "@azure/core-rest-pipeline";
|
|
6
|
+
import { ApplicationInsightsClient } from "../../generated/index.js";
|
|
7
|
+
import { BaseSender } from "./baseSender.js";
|
|
8
|
+
const applicationInsightsResource = "https://monitor.azure.com//.default";
|
|
9
|
+
/**
|
|
10
|
+
* Exporter HTTP sender class
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
export class HttpSender extends BaseSender {
|
|
14
|
+
constructor(options) {
|
|
15
|
+
super(options);
|
|
16
|
+
// Build endpoint using provided configuration or default values
|
|
17
|
+
this.appInsightsClientOptions = Object.assign({ host: options.endpointUrl }, options.exporterOptions);
|
|
18
|
+
if (this.appInsightsClientOptions.credential) {
|
|
19
|
+
// Add credentialScopes
|
|
20
|
+
if (options.aadAudience) {
|
|
21
|
+
this.appInsightsClientOptions.credentialScopes = [options.aadAudience];
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
// Default
|
|
25
|
+
this.appInsightsClientOptions.credentialScopes = [applicationInsightsResource];
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
this.appInsightsClient = new ApplicationInsightsClient(this.appInsightsClientOptions);
|
|
29
|
+
// Handle redirects in HTTP Sender
|
|
30
|
+
this.appInsightsClient.pipeline.removePolicy({ name: redirectPolicyName });
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Send Azure envelopes
|
|
34
|
+
* @internal
|
|
35
|
+
*/
|
|
36
|
+
async send(envelopes) {
|
|
37
|
+
var _a;
|
|
38
|
+
const options = {};
|
|
39
|
+
let response;
|
|
40
|
+
function onResponse(rawResponse, flatResponse) {
|
|
41
|
+
response = rawResponse;
|
|
42
|
+
if (options.onResponse) {
|
|
43
|
+
options.onResponse(rawResponse, flatResponse);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
await this.appInsightsClient.track(envelopes, Object.assign(Object.assign({}, options), { onResponse }));
|
|
47
|
+
return { statusCode: response === null || response === void 0 ? void 0 : response.status, result: (_a = response === null || response === void 0 ? void 0 : response.bodyAsText) !== null && _a !== void 0 ? _a : "" };
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Shutdown sender
|
|
51
|
+
* @internal
|
|
52
|
+
*/
|
|
53
|
+
async shutdown() {
|
|
54
|
+
diag.info("HttpSender shutting down");
|
|
55
|
+
}
|
|
56
|
+
handlePermanentRedirect(location) {
|
|
57
|
+
if (location) {
|
|
58
|
+
const locUrl = new url.URL(location);
|
|
59
|
+
if (locUrl && locUrl.host) {
|
|
60
|
+
this.appInsightsClient.host = "https://" + locUrl.host;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=httpSender.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"httpSender.js","sourceRoot":"","sources":["../../../../src/platform/nodejs/httpSender.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAO/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAErE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,MAAM,2BAA2B,GAAG,qCAAqC,CAAC;AAE1E;;;GAGG;AACH,MAAM,OAAO,UAAW,SAAQ,UAAU;IAIxC,YAAY,OAOX;QACC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,gEAAgE;QAChE,IAAI,CAAC,wBAAwB,mBAC3B,IAAI,EAAE,OAAO,CAAC,WAAW,IACtB,OAAO,CAAC,eAAe,CAC3B,CAAC;QAEF,IAAI,IAAI,CAAC,wBAAwB,CAAC,UAAU,EAAE,CAAC;YAC7C,uBAAuB;YACvB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;gBACxB,IAAI,CAAC,wBAAwB,CAAC,gBAAgB,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACzE,CAAC;iBAAM,CAAC;gBACN,UAAU;gBACV,IAAI,CAAC,wBAAwB,CAAC,gBAAgB,GAAG,CAAC,2BAA2B,CAAC,CAAC;YACjF,CAAC;QACH,CAAC;QACD,IAAI,CAAC,iBAAiB,GAAG,IAAI,yBAAyB,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAEtF,kCAAkC;QAClC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI,CAAC,SAAqB;;QAC9B,MAAM,OAAO,GAAwB,EAAE,CAAC;QACxC,IAAI,QAA2C,CAAC;QAChD,SAAS,UAAU,CAAC,WAAkC,EAAE,YAAqB;YAC3E,QAAQ,GAAG,WAAW,CAAC;YACvB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACvB,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QACD,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,kCACvC,OAAO,KACV,UAAU,IACV,CAAC;QAEH,OAAO,EAAE,UAAU,EAAE,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,EAAE,MAAM,EAAE,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,UAAU,mCAAI,EAAE,EAAE,CAAC;IAC9E,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACxC,CAAC;IAED,uBAAuB,CAAC,QAA4B;QAClD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACrC,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC1B,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;YACzD,CAAC;QACH,CAAC;IACH,CAAC;CACF","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport url from \"node:url\";\nimport { diag } from \"@opentelemetry/api\";\nimport type { FullOperationResponse } from \"@azure/core-client\";\nimport { redirectPolicyName } from \"@azure/core-rest-pipeline\";\nimport type { SenderResult } from \"../../types.js\";\nimport type {\n TelemetryItem as Envelope,\n ApplicationInsightsClientOptionalParams,\n TrackOptionalParams,\n} from \"../../generated/index.js\";\nimport { ApplicationInsightsClient } from \"../../generated/index.js\";\nimport type { AzureMonitorExporterOptions } from \"../../config.js\";\nimport { BaseSender } from \"./baseSender.js\";\n\nconst applicationInsightsResource = \"https://monitor.azure.com//.default\";\n\n/**\n * Exporter HTTP sender class\n * @internal\n */\nexport class HttpSender extends BaseSender {\n private readonly appInsightsClient: ApplicationInsightsClient;\n private appInsightsClientOptions: ApplicationInsightsClientOptionalParams;\n\n constructor(options: {\n endpointUrl: string;\n instrumentationKey: string;\n trackStatsbeat: boolean;\n exporterOptions: AzureMonitorExporterOptions;\n aadAudience?: string;\n isStatsbeatSender?: boolean;\n }) {\n super(options);\n // Build endpoint using provided configuration or default values\n this.appInsightsClientOptions = {\n host: options.endpointUrl,\n ...options.exporterOptions,\n };\n\n if (this.appInsightsClientOptions.credential) {\n // Add credentialScopes\n if (options.aadAudience) {\n this.appInsightsClientOptions.credentialScopes = [options.aadAudience];\n } else {\n // Default\n this.appInsightsClientOptions.credentialScopes = [applicationInsightsResource];\n }\n }\n this.appInsightsClient = new ApplicationInsightsClient(this.appInsightsClientOptions);\n\n // Handle redirects in HTTP Sender\n this.appInsightsClient.pipeline.removePolicy({ name: redirectPolicyName });\n }\n\n /**\n * Send Azure envelopes\n * @internal\n */\n async send(envelopes: Envelope[]): Promise<SenderResult> {\n const options: TrackOptionalParams = {};\n let response: FullOperationResponse | undefined;\n function onResponse(rawResponse: FullOperationResponse, flatResponse: unknown): void {\n response = rawResponse;\n if (options.onResponse) {\n options.onResponse(rawResponse, flatResponse);\n }\n }\n await this.appInsightsClient.track(envelopes, {\n ...options,\n onResponse,\n });\n\n return { statusCode: response?.status, result: response?.bodyAsText ?? \"\" };\n }\n\n /**\n * Shutdown sender\n * @internal\n */\n async shutdown(): Promise<void> {\n diag.info(\"HttpSender shutting down\");\n }\n\n handlePermanentRedirect(location: string | undefined): void {\n if (location) {\n const locUrl = new url.URL(location);\n if (locUrl && locUrl.host) {\n this.appInsightsClient.host = \"https://\" + locUrl.host;\n }\n }\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/platform/nodejs/index.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
/**
|
|
4
|
+
* Node.js specific platform utils
|
|
5
|
+
*/
|
|
6
|
+
export * from "./constants.js";
|
|
7
|
+
export * from "./persist/index.js";
|
|
8
|
+
export * from "./httpSender.js";
|
|
9
|
+
export * from "./context/index.js";
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/platform/nodejs/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC;;GAEG;AACH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Node.js specific platform utils\n */\nexport * from \"./constants.js\";\nexport * from \"./persist/index.js\";\nexport * from \"./httpSender.js\";\nexport * from \"./context/index.js\";\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare class FileAccessControl {
|
|
2
|
+
private static ICACLS_PATH;
|
|
3
|
+
private static POWERSHELL_PATH;
|
|
4
|
+
private static ACLED_DIRECTORIES;
|
|
5
|
+
private static ACL_IDENTITY;
|
|
6
|
+
private static OS_FILE_PROTECTION_CHECKED;
|
|
7
|
+
static OS_PROVIDES_FILE_PROTECTION: boolean;
|
|
8
|
+
static USE_ICACLS: boolean;
|
|
9
|
+
static checkFileProtection(): void;
|
|
10
|
+
static applyACLRules(directory: string): Promise<void>;
|
|
11
|
+
static applyACLRulesSync(directory: string): void;
|
|
12
|
+
private static _runICACLS;
|
|
13
|
+
private static _runICACLSSync;
|
|
14
|
+
private static _getACLIdentity;
|
|
15
|
+
private static _getACLIdentitySync;
|
|
16
|
+
private static _getACLArguments;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=fileAccessControl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileAccessControl.d.ts","sourceRoot":"","sources":["../../../../../src/platform/nodejs/persist/fileAccessControl.ts"],"names":[],"mappings":"AASA,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAC,WAAW,CAA4D;IACtF,OAAO,CAAC,MAAM,CAAC,eAAe,CAAuF;IACrH,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAiC;IACjE,OAAO,CAAC,MAAM,CAAC,YAAY,CAAuB;IAClD,OAAO,CAAC,MAAM,CAAC,0BAA0B,CAAS;IAClD,OAAc,2BAA2B,UAAS;IAClD,OAAc,UAAU,UAA6B;WAGvC,mBAAmB,IAAI,IAAI;WA6BrB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;WAwBrD,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAcxD,OAAO,CAAC,MAAM,CAAC,UAAU;IAkBzB,OAAO,CAAC,MAAM,CAAC,cAAc;IAkB7B,OAAO,CAAC,MAAM,CAAC,eAAe;IA2B9B,OAAO,CAAC,MAAM,CAAC,mBAAmB;IA0BlC,OAAO,CAAC,MAAM,CAAC,gBAAgB;CAUhC"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
import { existsSync } from "node:fs";
|
|
4
|
+
import { type as osType } from "node:os";
|
|
5
|
+
import { spawn, spawnSync } from "node:child_process";
|
|
6
|
+
import { diag } from "@opentelemetry/api";
|
|
7
|
+
import process from "node:process";
|
|
8
|
+
export class FileAccessControl {
|
|
9
|
+
// Check if file access control could be enabled
|
|
10
|
+
static checkFileProtection() {
|
|
11
|
+
if (!FileAccessControl.OS_PROVIDES_FILE_PROTECTION &&
|
|
12
|
+
!FileAccessControl.OS_FILE_PROTECTION_CHECKED) {
|
|
13
|
+
FileAccessControl.OS_FILE_PROTECTION_CHECKED = true;
|
|
14
|
+
// Node's chmod levels do not appropriately restrict file access on Windows
|
|
15
|
+
// Use the built-in command line tool ICACLS on Windows to properly restrict
|
|
16
|
+
// access to the temporary directory used for disk retry mode.
|
|
17
|
+
if (FileAccessControl.USE_ICACLS) {
|
|
18
|
+
// This should be async - but it's currently safer to have this synchronous
|
|
19
|
+
// This guarantees we can immediately fail setDiskRetryMode if we need to
|
|
20
|
+
try {
|
|
21
|
+
FileAccessControl.OS_PROVIDES_FILE_PROTECTION = existsSync(FileAccessControl.ICACLS_PATH);
|
|
22
|
+
}
|
|
23
|
+
catch (e) {
|
|
24
|
+
// Ignore error
|
|
25
|
+
}
|
|
26
|
+
if (!FileAccessControl.OS_PROVIDES_FILE_PROTECTION) {
|
|
27
|
+
diag.warn("Could not find ICACLS in expected location! This is necessary to use disk retry mode on Windows.");
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
// chmod works everywhere else
|
|
32
|
+
FileAccessControl.OS_PROVIDES_FILE_PROTECTION = true;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
static async applyACLRules(directory) {
|
|
37
|
+
if (FileAccessControl.USE_ICACLS) {
|
|
38
|
+
if (FileAccessControl.ACLED_DIRECTORIES[directory] === undefined) {
|
|
39
|
+
// Avoid multiple calls race condition by setting ACLED_DIRECTORIES to false for this directory immediately
|
|
40
|
+
// If batches are being failed faster than the processes spawned below return, some data won't be stored to disk
|
|
41
|
+
// This is better than the alternative of potentially infinitely spawned processes
|
|
42
|
+
FileAccessControl.ACLED_DIRECTORIES[directory] = false;
|
|
43
|
+
try {
|
|
44
|
+
// Restrict this directory to only current user and administrator access
|
|
45
|
+
const identity = await this._getACLIdentity();
|
|
46
|
+
await this._runICACLS(this._getACLArguments(directory, identity));
|
|
47
|
+
FileAccessControl.ACLED_DIRECTORIES[directory] = true;
|
|
48
|
+
}
|
|
49
|
+
catch (ex) {
|
|
50
|
+
FileAccessControl.ACLED_DIRECTORIES[directory] = false; // false is used to cache failed (vs undefined which is "not yet tried")
|
|
51
|
+
throw ex;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
if (!FileAccessControl.ACLED_DIRECTORIES[directory]) {
|
|
56
|
+
throw new Error("Setting ACL restrictions did not succeed (cached result)");
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
static applyACLRulesSync(directory) {
|
|
62
|
+
if (FileAccessControl.USE_ICACLS) {
|
|
63
|
+
// For performance, only run ACL rules if we haven't already during this session
|
|
64
|
+
if (FileAccessControl.ACLED_DIRECTORIES[directory] === undefined) {
|
|
65
|
+
this._runICACLSSync(this._getACLArguments(directory, this._getACLIdentitySync()));
|
|
66
|
+
FileAccessControl.ACLED_DIRECTORIES[directory] = true; // If we get here, it succeeded. _runIACLSSync will throw on failures
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
else if (!FileAccessControl.ACLED_DIRECTORIES[directory]) {
|
|
70
|
+
// falsy but not undefined
|
|
71
|
+
throw new Error("Setting ACL restrictions did not succeed (cached result)");
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
static _runICACLS(args) {
|
|
76
|
+
return new Promise((resolve, reject) => {
|
|
77
|
+
const aclProc = spawn(FileAccessControl.ICACLS_PATH, args, {
|
|
78
|
+
windowsHide: true,
|
|
79
|
+
});
|
|
80
|
+
aclProc.on("error", (e) => reject(e));
|
|
81
|
+
aclProc.on("close", (code) => {
|
|
82
|
+
if (code === 0) {
|
|
83
|
+
resolve();
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
reject(new Error(`Setting ACL restrictions did not succeed (ICACLS returned code ${code})`));
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
static _runICACLSSync(args) {
|
|
92
|
+
// Some very old versions of Node (< 0.11) don't have this
|
|
93
|
+
if (spawnSync) {
|
|
94
|
+
const aclProc = spawnSync(FileAccessControl.ICACLS_PATH, args, {
|
|
95
|
+
windowsHide: true,
|
|
96
|
+
});
|
|
97
|
+
if (aclProc.error) {
|
|
98
|
+
throw aclProc.error;
|
|
99
|
+
}
|
|
100
|
+
else if (aclProc.status !== 0) {
|
|
101
|
+
throw new Error(`Setting ACL restrictions did not succeed (ICACLS returned code ${aclProc.status})`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
throw new Error("Could not synchronously call ICACLS under current version of Node.js");
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
static _getACLIdentity() {
|
|
109
|
+
return new Promise((resolve, reject) => {
|
|
110
|
+
if (FileAccessControl.ACL_IDENTITY) {
|
|
111
|
+
resolve(FileAccessControl.ACL_IDENTITY);
|
|
112
|
+
}
|
|
113
|
+
const psProc = spawn(FileAccessControl.POWERSHELL_PATH, ["-Command", "[System.Security.Principal.WindowsIdentity]::GetCurrent().Name"], {
|
|
114
|
+
windowsHide: true,
|
|
115
|
+
stdio: ["ignore", "pipe", "pipe"], // Needed to prevent hanging on Win 7
|
|
116
|
+
});
|
|
117
|
+
let data = "";
|
|
118
|
+
psProc.stdout.on("data", (d) => (data += d));
|
|
119
|
+
psProc.on("error", (e) => reject(e));
|
|
120
|
+
psProc.on("close", (code) => {
|
|
121
|
+
FileAccessControl.ACL_IDENTITY = data && data.trim();
|
|
122
|
+
if (code === 0) {
|
|
123
|
+
resolve(FileAccessControl.ACL_IDENTITY);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
reject(new Error(`Getting ACL identity did not succeed (PS returned code ${code})`));
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
static _getACLIdentitySync() {
|
|
132
|
+
if (FileAccessControl.ACL_IDENTITY) {
|
|
133
|
+
return FileAccessControl.ACL_IDENTITY;
|
|
134
|
+
}
|
|
135
|
+
// Some very old versions of Node (< 0.11) don't have this
|
|
136
|
+
if (spawnSync) {
|
|
137
|
+
const psProc = spawnSync(FileAccessControl.POWERSHELL_PATH, ["-Command", "[System.Security.Principal.WindowsIdentity]::GetCurrent().Name"], {
|
|
138
|
+
windowsHide: true,
|
|
139
|
+
stdio: ["ignore", "pipe", "pipe"], // Needed to prevent hanging on Win 7
|
|
140
|
+
});
|
|
141
|
+
if (psProc.error) {
|
|
142
|
+
throw psProc.error;
|
|
143
|
+
}
|
|
144
|
+
else if (psProc.status !== 0) {
|
|
145
|
+
throw new Error(`Getting ACL identity did not succeed (PS returned code ${psProc.status})`);
|
|
146
|
+
}
|
|
147
|
+
FileAccessControl.ACL_IDENTITY = psProc.stdout && psProc.stdout.toString().trim();
|
|
148
|
+
return FileAccessControl.ACL_IDENTITY;
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
throw new Error("Could not synchronously get ACL identity under current version of Node.js");
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
static _getACLArguments(directory, identity) {
|
|
155
|
+
return [
|
|
156
|
+
directory,
|
|
157
|
+
"/grant",
|
|
158
|
+
"*S-1-5-32-544:(OI)(CI)F", // Full permission for Administrators
|
|
159
|
+
"/grant",
|
|
160
|
+
`${identity}:(OI)(CI)F`, // Full permission for current user
|
|
161
|
+
"/inheritance:r",
|
|
162
|
+
]; // Remove all inherited permissions
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
FileAccessControl.ICACLS_PATH = `${process.env.SYSTEMDRIVE}/windows/system32/icacls.exe`;
|
|
166
|
+
FileAccessControl.POWERSHELL_PATH = `${process.env.SYSTEMDRIVE}/windows/system32/windowspowershell/v1.0/powershell.exe`;
|
|
167
|
+
FileAccessControl.ACLED_DIRECTORIES = {};
|
|
168
|
+
FileAccessControl.ACL_IDENTITY = null;
|
|
169
|
+
FileAccessControl.OS_FILE_PROTECTION_CHECKED = false;
|
|
170
|
+
FileAccessControl.OS_PROVIDES_FILE_PROTECTION = false;
|
|
171
|
+
FileAccessControl.USE_ICACLS = osType() === "Windows_NT";
|
|
172
|
+
//# sourceMappingURL=fileAccessControl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileAccessControl.js","sourceRoot":"","sources":["../../../../../src/platform/nodejs/persist/fileAccessControl.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { existsSync } from \"node:fs\";\nimport { type as osType } from \"node:os\";\nimport { spawn, spawnSync } from \"node:child_process\";\nimport { diag } from \"@opentelemetry/api\";\nimport process from \"node:process\";\n\nexport class FileAccessControl {\n private static ICACLS_PATH = `${process.env.SYSTEMDRIVE}/windows/system32/icacls.exe`;\n private static POWERSHELL_PATH = `${process.env.SYSTEMDRIVE}/windows/system32/windowspowershell/v1.0/powershell.exe`;\n private static ACLED_DIRECTORIES: { [id: string]: boolean } = {};\n private static ACL_IDENTITY: string | null = null;\n private static OS_FILE_PROTECTION_CHECKED = false;\n public static OS_PROVIDES_FILE_PROTECTION = false;\n public static USE_ICACLS = osType() === \"Windows_NT\";\n\n // Check if file access control could be enabled\n public static checkFileProtection(): void {\n if (\n !FileAccessControl.OS_PROVIDES_FILE_PROTECTION &&\n !FileAccessControl.OS_FILE_PROTECTION_CHECKED\n ) {\n FileAccessControl.OS_FILE_PROTECTION_CHECKED = true;\n // Node's chmod levels do not appropriately restrict file access on Windows\n // Use the built-in command line tool ICACLS on Windows to properly restrict\n // access to the temporary directory used for disk retry mode.\n if (FileAccessControl.USE_ICACLS) {\n // This should be async - but it's currently safer to have this synchronous\n // This guarantees we can immediately fail setDiskRetryMode if we need to\n try {\n FileAccessControl.OS_PROVIDES_FILE_PROTECTION = existsSync(FileAccessControl.ICACLS_PATH);\n } catch (e: any) {\n // Ignore error\n }\n if (!FileAccessControl.OS_PROVIDES_FILE_PROTECTION) {\n diag.warn(\n \"Could not find ICACLS in expected location! This is necessary to use disk retry mode on Windows.\",\n );\n }\n } else {\n // chmod works everywhere else\n FileAccessControl.OS_PROVIDES_FILE_PROTECTION = true;\n }\n }\n }\n\n public static async applyACLRules(directory: string): Promise<void> {\n if (FileAccessControl.USE_ICACLS) {\n if (FileAccessControl.ACLED_DIRECTORIES[directory] === undefined) {\n // Avoid multiple calls race condition by setting ACLED_DIRECTORIES to false for this directory immediately\n // If batches are being failed faster than the processes spawned below return, some data won't be stored to disk\n // This is better than the alternative of potentially infinitely spawned processes\n FileAccessControl.ACLED_DIRECTORIES[directory] = false;\n try {\n // Restrict this directory to only current user and administrator access\n const identity = await this._getACLIdentity();\n await this._runICACLS(this._getACLArguments(directory, identity));\n FileAccessControl.ACLED_DIRECTORIES[directory] = true;\n } catch (ex: any) {\n FileAccessControl.ACLED_DIRECTORIES[directory] = false; // false is used to cache failed (vs undefined which is \"not yet tried\")\n throw ex;\n }\n } else {\n if (!FileAccessControl.ACLED_DIRECTORIES[directory]) {\n throw new Error(\"Setting ACL restrictions did not succeed (cached result)\");\n }\n }\n }\n }\n\n public static applyACLRulesSync(directory: string): void {\n if (FileAccessControl.USE_ICACLS) {\n // For performance, only run ACL rules if we haven't already during this session\n if (FileAccessControl.ACLED_DIRECTORIES[directory] === undefined) {\n this._runICACLSSync(this._getACLArguments(directory, this._getACLIdentitySync()));\n FileAccessControl.ACLED_DIRECTORIES[directory] = true; // If we get here, it succeeded. _runIACLSSync will throw on failures\n return;\n } else if (!FileAccessControl.ACLED_DIRECTORIES[directory]) {\n // falsy but not undefined\n throw new Error(\"Setting ACL restrictions did not succeed (cached result)\");\n }\n }\n }\n\n private static _runICACLS(args: string[]): Promise<void> {\n return new Promise((resolve, reject) => {\n const aclProc = spawn(FileAccessControl.ICACLS_PATH, args, <any>{\n windowsHide: true,\n });\n aclProc.on(\"error\", (e: Error) => reject(e));\n aclProc.on(\"close\", (code: number) => {\n if (code === 0) {\n resolve();\n } else {\n reject(\n new Error(`Setting ACL restrictions did not succeed (ICACLS returned code ${code})`),\n );\n }\n });\n });\n }\n\n private static _runICACLSSync(args: string[]): void {\n // Some very old versions of Node (< 0.11) don't have this\n if (spawnSync) {\n const aclProc = spawnSync(FileAccessControl.ICACLS_PATH, args, <any>{\n windowsHide: true,\n });\n if (aclProc.error) {\n throw aclProc.error;\n } else if (aclProc.status !== 0) {\n throw new Error(\n `Setting ACL restrictions did not succeed (ICACLS returned code ${aclProc.status})`,\n );\n }\n } else {\n throw new Error(\"Could not synchronously call ICACLS under current version of Node.js\");\n }\n }\n\n private static _getACLIdentity(): Promise<string> {\n return new Promise((resolve, reject) => {\n if (FileAccessControl.ACL_IDENTITY) {\n resolve(FileAccessControl.ACL_IDENTITY);\n }\n const psProc = spawn(\n FileAccessControl.POWERSHELL_PATH,\n [\"-Command\", \"[System.Security.Principal.WindowsIdentity]::GetCurrent().Name\"],\n <any>{\n windowsHide: true,\n stdio: [\"ignore\", \"pipe\", \"pipe\"], // Needed to prevent hanging on Win 7\n },\n );\n let data = \"\";\n psProc.stdout.on(\"data\", (d: string) => (data += d));\n psProc.on(\"error\", (e: Error) => reject(e));\n psProc.on(\"close\", (code: number) => {\n FileAccessControl.ACL_IDENTITY = data && data.trim();\n if (code === 0) {\n resolve(FileAccessControl.ACL_IDENTITY);\n } else {\n reject(new Error(`Getting ACL identity did not succeed (PS returned code ${code})`));\n }\n });\n });\n }\n\n private static _getACLIdentitySync(): string {\n if (FileAccessControl.ACL_IDENTITY) {\n return FileAccessControl.ACL_IDENTITY;\n }\n // Some very old versions of Node (< 0.11) don't have this\n if (spawnSync) {\n const psProc = spawnSync(\n FileAccessControl.POWERSHELL_PATH,\n [\"-Command\", \"[System.Security.Principal.WindowsIdentity]::GetCurrent().Name\"],\n <any>{\n windowsHide: true,\n stdio: [\"ignore\", \"pipe\", \"pipe\"], // Needed to prevent hanging on Win 7\n },\n );\n if (psProc.error) {\n throw psProc.error;\n } else if (psProc.status !== 0) {\n throw new Error(`Getting ACL identity did not succeed (PS returned code ${psProc.status})`);\n }\n FileAccessControl.ACL_IDENTITY = psProc.stdout && psProc.stdout.toString().trim();\n return FileAccessControl.ACL_IDENTITY;\n } else {\n throw new Error(\"Could not synchronously get ACL identity under current version of Node.js\");\n }\n }\n\n private static _getACLArguments(directory: string, identity: string): string[] {\n return [\n directory,\n \"/grant\",\n \"*S-1-5-32-544:(OI)(CI)F\", // Full permission for Administrators\n \"/grant\",\n `${identity}:(OI)(CI)F`, // Full permission for current user\n \"/inheritance:r\",\n ]; // Remove all inherited permissions\n }\n}\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Computes the size (in bytes) of all files in a directory at the root level. Asynchronously.
|
|
3
|
+
* @internal
|
|
4
|
+
*/
|
|
5
|
+
export declare const getShallowDirectorySize: (directory: string) => Promise<number>;
|
|
6
|
+
/**
|
|
7
|
+
* Validate directory exists.
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
export declare const confirmDirExists: (directory: string) => Promise<void>;
|
|
11
|
+
//# sourceMappingURL=fileSystemHelpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileSystemHelpers.d.ts","sourceRoot":"","sources":["../../../../../src/platform/nodejs/persist/fileSystemHelpers.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAAU,WAAW,MAAM,KAAG,OAAO,CAAC,MAAM,CAmB/E,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAAU,WAAW,MAAM,KAAG,OAAO,CAAC,IAAI,CAmBtE,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
import { diag } from "@opentelemetry/api";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { lstat, mkdir, readdir, stat } from "node:fs/promises";
|
|
6
|
+
/**
|
|
7
|
+
* Computes the size (in bytes) of all files in a directory at the root level. Asynchronously.
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
export const getShallowDirectorySize = async (directory) => {
|
|
11
|
+
let totalSize = 0;
|
|
12
|
+
try {
|
|
13
|
+
// Get the directory listing
|
|
14
|
+
const files = await readdir(directory);
|
|
15
|
+
// Query all file sizes
|
|
16
|
+
for (const file of files) {
|
|
17
|
+
const fileStats = await stat(join(directory, file));
|
|
18
|
+
if (fileStats.isFile()) {
|
|
19
|
+
totalSize += fileStats.size;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return totalSize;
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
diag.error(`Error getting directory size: ${err}`);
|
|
26
|
+
return 0;
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Validate directory exists.
|
|
31
|
+
* @internal
|
|
32
|
+
*/
|
|
33
|
+
export const confirmDirExists = async (directory) => {
|
|
34
|
+
try {
|
|
35
|
+
const stats = await lstat(directory);
|
|
36
|
+
if (!stats.isDirectory()) {
|
|
37
|
+
throw new Error("Path existed but was not a directory");
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
if (err && err.code === "ENOENT") {
|
|
42
|
+
try {
|
|
43
|
+
const options = { recursive: true };
|
|
44
|
+
await mkdir(directory, options);
|
|
45
|
+
}
|
|
46
|
+
catch (mkdirErr) {
|
|
47
|
+
if (mkdirErr && mkdirErr.code !== "EEXIST") {
|
|
48
|
+
// Handle race condition by ignoring EEXIST
|
|
49
|
+
throw mkdirErr;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=fileSystemHelpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileSystemHelpers.js","sourceRoot":"","sources":["../../../../../src/platform/nodejs/persist/fileSystemHelpers.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE1C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE/D;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,EAAE,SAAiB,EAAmB,EAAE;IAClF,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,CAAC;QACH,4BAA4B;QAC5B,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;QAEvC,uBAAuB;QACvB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;YACpD,IAAI,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;gBACvB,SAAS,IAAI,SAAS,CAAC,IAAI,CAAC;YAC9B,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,KAAK,CAAC,iCAAiC,GAAG,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,SAAiB,EAAiB,EAAE;IACzE,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAyB,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;gBAC1D,MAAM,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAClC,CAAC;YAAC,OAAO,QAAa,EAAE,CAAC;gBACvB,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC3C,2CAA2C;oBAC3C,MAAM,QAAQ,CAAC;gBACjB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { diag } from \"@opentelemetry/api\";\nimport type { MakeDirectoryOptions } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { lstat, mkdir, readdir, stat } from \"node:fs/promises\";\n\n/**\n * Computes the size (in bytes) of all files in a directory at the root level. Asynchronously.\n * @internal\n */\nexport const getShallowDirectorySize = async (directory: string): Promise<number> => {\n let totalSize = 0;\n try {\n // Get the directory listing\n const files = await readdir(directory);\n\n // Query all file sizes\n for (const file of files) {\n const fileStats = await stat(join(directory, file));\n if (fileStats.isFile()) {\n totalSize += fileStats.size;\n }\n }\n\n return totalSize;\n } catch (err) {\n diag.error(`Error getting directory size: ${err}`);\n return 0;\n }\n};\n\n/**\n * Validate directory exists.\n * @internal\n */\nexport const confirmDirExists = async (directory: string): Promise<void> => {\n try {\n const stats = await lstat(directory);\n if (!stats.isDirectory()) {\n throw new Error(\"Path existed but was not a directory\");\n }\n } catch (err: any) {\n if (err && err.code === \"ENOENT\") {\n try {\n const options: MakeDirectoryOptions = { recursive: true };\n await mkdir(directory, options);\n } catch (mkdirErr: any) {\n if (mkdirErr && mkdirErr.code !== \"EEXIST\") {\n // Handle race condition by ignoring EEXIST\n throw mkdirErr;\n }\n }\n }\n }\n};\n"]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { PersistentStorage } from "../../../types.js";
|
|
2
|
+
import type { AzureMonitorExporterOptions } from "../../../config.js";
|
|
3
|
+
/**
|
|
4
|
+
* File system persist class.
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
export declare class FileSystemPersist implements PersistentStorage {
|
|
8
|
+
private _options?;
|
|
9
|
+
static TEMPDIR_PREFIX: string;
|
|
10
|
+
static FILENAME_SUFFIX: string;
|
|
11
|
+
fileRetemptionPeriod: number;
|
|
12
|
+
cleanupTimeOut: number;
|
|
13
|
+
maxBytesOnDisk: number;
|
|
14
|
+
private _enabled;
|
|
15
|
+
private _tempDirectory;
|
|
16
|
+
private _fileCleanupTimer;
|
|
17
|
+
private _instrumentationKey;
|
|
18
|
+
constructor(instrumentationKey: string, _options?: AzureMonitorExporterOptions | undefined);
|
|
19
|
+
push(value: unknown[]): Promise<boolean>;
|
|
20
|
+
shift(): Promise<unknown>;
|
|
21
|
+
/**
|
|
22
|
+
* Check for temp telemetry files
|
|
23
|
+
* reads the first file if exist, deletes it and tries to send its load
|
|
24
|
+
*/
|
|
25
|
+
private _getFirstFileOnDisk;
|
|
26
|
+
private _storeToDisk;
|
|
27
|
+
private _fileCleanupTask;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=fileSystemPersist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileSystemPersist.d.ts","sourceRoot":"","sources":["../../../../../src/platform/nodejs/persist/fileSystemPersist.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAG3D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAGtE;;;GAGG;AACH,qBAAa,iBAAkB,YAAW,iBAAiB;IAevD,OAAO,CAAC,QAAQ,CAAC;IAdnB,MAAM,CAAC,cAAc,SAAwB;IAC7C,MAAM,CAAC,eAAe,SAAc;IAEpC,oBAAoB,SAA2B;IAC/C,cAAc,SAAkB;IAChC,cAAc,EAAE,MAAM,CAAc;IAEpC,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,mBAAmB,CAAS;gBAGlC,kBAAkB,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,2BAA2B,YAAA;IAyChD,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBlC,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IAkB/B;;;OAGG;YACW,mBAAmB;YA8BnB,YAAY;YAmCZ,gBAAgB;CA+B/B"}
|