dowwntime 1.1.0 → 1.2.1

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/dist/cli.mjs CHANGED
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from "module";
3
3
  import { debug } from "util";
4
+ import http from "http";
4
5
  import fs from "fs";
5
6
  import path from "path";
6
7
 
@@ -14671,7 +14672,7 @@ var require_dayjs_min = /* @__PURE__ */ __commonJS({ "node_modules/dayjs/dayjs.m
14671
14672
 
14672
14673
  //#endregion
14673
14674
  //#region node_modules/p-throttle/index.js
14674
- var import_dayjs_min = /* @__PURE__ */ __toESM(require_dayjs_min(), 1);
14675
+ var import_dayjs_min = /* @__PURE__ */ __toESM(require_dayjs_min());
14675
14676
  const states = /* @__PURE__ */ new WeakMap();
14676
14677
  const signalThrottleds = /* @__PURE__ */ new WeakMap();
14677
14678
  const finalizationRegistry = new FinalizationRegistry(({ signalWeakRef, weakReference }) => {
@@ -14877,6 +14878,51 @@ function pThrottle({ limit, interval, strict, signal, onDelay, weight }) {
14877
14878
  //#region src/debug.ts
14878
14879
  const debug$1 = debug("dowwntime");
14879
14880
 
14881
+ //#endregion
14882
+ //#region src/request.ts
14883
+ /**
14884
+ * Measure detailed timing of an HTTP request
14885
+ */
14886
+ const measureRequest = async (url$2, options) => {
14887
+ const startAt = Date.now();
14888
+ return await new Promise((resolve$1) => {
14889
+ let firstByteAt;
14890
+ let endAt;
14891
+ let dnsLookupAt;
14892
+ let tcpConnectionAt;
14893
+ let tlsHandshakeAt;
14894
+ let statusCode;
14895
+ http.request(url$2, options, (res) => {
14896
+ statusCode = res.statusCode || 0;
14897
+ res.once("readable", () => {
14898
+ firstByteAt = Date.now();
14899
+ });
14900
+ res.on("end", () => {
14901
+ endAt = Date.now();
14902
+ resolve$1({
14903
+ statusCode,
14904
+ dnsLookupMs: dnsLookupAt - startAt,
14905
+ tcpConnectionMs: tcpConnectionAt - dnsLookupAt,
14906
+ tlsHandshakeMs: tlsHandshakeAt - tcpConnectionAt,
14907
+ timeToFirstByteMs: firstByteAt - tlsHandshakeAt,
14908
+ contentTransferMs: endAt - firstByteAt,
14909
+ totalTimeMs: endAt - startAt
14910
+ });
14911
+ });
14912
+ }).on("socket", (socket) => {
14913
+ socket.on("lookup", () => {
14914
+ dnsLookupAt = Date.now();
14915
+ });
14916
+ socket.on("connect", () => {
14917
+ tcpConnectionAt = Date.now();
14918
+ });
14919
+ socket.on("secureConnect", () => {
14920
+ tlsHandshakeAt = Date.now();
14921
+ });
14922
+ });
14923
+ });
14924
+ };
14925
+
14880
14926
  //#endregion
14881
14927
  //#region node_modules/devalue/src/utils.js
14882
14928
  /** @type {Record<string, string>} */
@@ -23773,7 +23819,7 @@ var require_form_data = /* @__PURE__ */ __commonJS({ "node_modules/form-data/lib
23773
23819
  var CombinedStream = require_combined_stream();
23774
23820
  var util$1 = __require("util");
23775
23821
  var path$2 = __require("path");
23776
- var http$2 = __require("http");
23822
+ var http$3 = __require("http");
23777
23823
  var https$2 = __require("https");
23778
23824
  var parseUrl$2 = __require("url").parse;
23779
23825
  var fs$2 = __require("fs");
@@ -23967,7 +24013,7 @@ var require_form_data = /* @__PURE__ */ __commonJS({ "node_modules/form-data/lib
23967
24013
  }
23968
24014
  options.headers = this.getHeaders(params.headers);
23969
24015
  if (options.protocol === "https:") request = https$2.request(options);
23970
- else request = http$2.request(options);
24016
+ else request = http$3.request(options);
23971
24017
  this.getLength(function(err, length) {
23972
24018
  if (err && err !== "Unknown stream") {
23973
24019
  this._error(err);
@@ -24093,7 +24139,7 @@ var require_debug = /* @__PURE__ */ __commonJS({ "node_modules/follow-redirects/
24093
24139
  var require_follow_redirects = /* @__PURE__ */ __commonJS({ "node_modules/follow-redirects/index.js": ((exports, module) => {
24094
24140
  var url$1 = __require("url");
24095
24141
  var URL$1 = url$1.URL;
24096
- var http$1 = __require("http");
24142
+ var http$2 = __require("http");
24097
24143
  var https$1 = __require("https");
24098
24144
  var Writable = __require("stream").Writable;
24099
24145
  var assert = __require("assert");
@@ -24515,7 +24561,7 @@ var require_follow_redirects = /* @__PURE__ */ __commonJS({ "node_modules/follow
24515
24561
  return URL$1 && value instanceof URL$1;
24516
24562
  }
24517
24563
  module.exports = wrap({
24518
- http: http$1,
24564
+ http: http$2,
24519
24565
  https: https$1
24520
24566
  });
24521
24567
  module.exports.wrap = wrap;
@@ -24529,7 +24575,7 @@ var require_axios = /* @__PURE__ */ __commonJS({ "node_modules/axios/dist/node/a
24529
24575
  const crypto = __require("crypto");
24530
24576
  const url = __require("url");
24531
24577
  const proxyFromEnv = require_proxy_from_env();
24532
- const http = __require("http");
24578
+ const http$1 = __require("http");
24533
24579
  const https = __require("https");
24534
24580
  const http2 = __require("http2");
24535
24581
  const util = __require("util");
@@ -24544,7 +24590,7 @@ var require_axios = /* @__PURE__ */ __commonJS({ "node_modules/axios/dist/node/a
24544
24590
  const crypto__default = /* @__PURE__ */ _interopDefaultLegacy(crypto);
24545
24591
  const url__default = /* @__PURE__ */ _interopDefaultLegacy(url);
24546
24592
  const proxyFromEnv__default = /* @__PURE__ */ _interopDefaultLegacy(proxyFromEnv);
24547
- const http__default = /* @__PURE__ */ _interopDefaultLegacy(http);
24593
+ const http__default = /* @__PURE__ */ _interopDefaultLegacy(http$1);
24548
24594
  const https__default = /* @__PURE__ */ _interopDefaultLegacy(https);
24549
24595
  const http2__default = /* @__PURE__ */ _interopDefaultLegacy(http2);
24550
24596
  const util__default = /* @__PURE__ */ _interopDefaultLegacy(util);
@@ -28315,18 +28361,17 @@ const run = async (options) => {
28315
28361
  const measure = async (path$4) => {
28316
28362
  const url$2 = fetchConfigurations.get(path$4);
28317
28363
  if (!url$2) return;
28318
- const start = Date.now();
28319
28364
  let status = "down";
28320
28365
  let durationMs;
28366
+ const start = Date.now();
28321
28367
  try {
28322
- const abortSignal = AbortSignal.timeout(options.timeoutMs ?? 5e3);
28323
- const response = await fetch(url$2, {
28368
+ const metrics = await measureRequest(url$2, {
28324
28369
  method: "GET",
28325
- signal: abortSignal
28370
+ timeout: options.timeoutMs ?? 5e3
28326
28371
  });
28327
- durationMs = Date.now() - start;
28328
- if (options.getStatus) status = options.getStatus(response.status, path$4, durationMs);
28329
- else status = response.ok ? "up" : "down";
28372
+ durationMs = metrics.timeToFirstByteMs;
28373
+ if (options.getStatus) status = options.getStatus(metrics.statusCode, path$4, metrics.contentTransferMs);
28374
+ else status = metrics.statusCode >= 200 && metrics.statusCode < 300 ? "up" : "down";
28330
28375
  } catch (_error) {
28331
28376
  durationMs = Date.now() - start;
28332
28377
  status = "down";