dowwntime 1.1.0 → 1.2.0

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
 
@@ -14877,6 +14878,43 @@ 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 dnsLookupAt;
14890
+ let tcpConnectionAt;
14891
+ let tlsHandshakeAt;
14892
+ let statusCode;
14893
+ http.request(url$2, options, (res) => {
14894
+ statusCode = res.statusCode || 0;
14895
+ res.once("readable", () => {
14896
+ resolve$1({
14897
+ statusCode,
14898
+ dnsLookupMs: dnsLookupAt - startAt,
14899
+ tcpConnectionMs: tcpConnectionAt - dnsLookupAt,
14900
+ tlsHandshakeMs: tlsHandshakeAt - tcpConnectionAt,
14901
+ timeToFirstByteMs: Date.now() - tlsHandshakeAt
14902
+ });
14903
+ });
14904
+ }).on("socket", (socket) => {
14905
+ socket.on("lookup", () => {
14906
+ dnsLookupAt = Date.now();
14907
+ });
14908
+ socket.on("connect", () => {
14909
+ tcpConnectionAt = Date.now();
14910
+ });
14911
+ socket.on("secureConnect", () => {
14912
+ tlsHandshakeAt = Date.now();
14913
+ });
14914
+ });
14915
+ });
14916
+ };
14917
+
14880
14918
  //#endregion
14881
14919
  //#region node_modules/devalue/src/utils.js
14882
14920
  /** @type {Record<string, string>} */
@@ -23773,7 +23811,7 @@ var require_form_data = /* @__PURE__ */ __commonJS({ "node_modules/form-data/lib
23773
23811
  var CombinedStream = require_combined_stream();
23774
23812
  var util$1 = __require("util");
23775
23813
  var path$2 = __require("path");
23776
- var http$2 = __require("http");
23814
+ var http$3 = __require("http");
23777
23815
  var https$2 = __require("https");
23778
23816
  var parseUrl$2 = __require("url").parse;
23779
23817
  var fs$2 = __require("fs");
@@ -23967,7 +24005,7 @@ var require_form_data = /* @__PURE__ */ __commonJS({ "node_modules/form-data/lib
23967
24005
  }
23968
24006
  options.headers = this.getHeaders(params.headers);
23969
24007
  if (options.protocol === "https:") request = https$2.request(options);
23970
- else request = http$2.request(options);
24008
+ else request = http$3.request(options);
23971
24009
  this.getLength(function(err, length) {
23972
24010
  if (err && err !== "Unknown stream") {
23973
24011
  this._error(err);
@@ -24093,7 +24131,7 @@ var require_debug = /* @__PURE__ */ __commonJS({ "node_modules/follow-redirects/
24093
24131
  var require_follow_redirects = /* @__PURE__ */ __commonJS({ "node_modules/follow-redirects/index.js": ((exports, module) => {
24094
24132
  var url$1 = __require("url");
24095
24133
  var URL$1 = url$1.URL;
24096
- var http$1 = __require("http");
24134
+ var http$2 = __require("http");
24097
24135
  var https$1 = __require("https");
24098
24136
  var Writable = __require("stream").Writable;
24099
24137
  var assert = __require("assert");
@@ -24515,7 +24553,7 @@ var require_follow_redirects = /* @__PURE__ */ __commonJS({ "node_modules/follow
24515
24553
  return URL$1 && value instanceof URL$1;
24516
24554
  }
24517
24555
  module.exports = wrap({
24518
- http: http$1,
24556
+ http: http$2,
24519
24557
  https: https$1
24520
24558
  });
24521
24559
  module.exports.wrap = wrap;
@@ -24529,7 +24567,7 @@ var require_axios = /* @__PURE__ */ __commonJS({ "node_modules/axios/dist/node/a
24529
24567
  const crypto = __require("crypto");
24530
24568
  const url = __require("url");
24531
24569
  const proxyFromEnv = require_proxy_from_env();
24532
- const http = __require("http");
24570
+ const http$1 = __require("http");
24533
24571
  const https = __require("https");
24534
24572
  const http2 = __require("http2");
24535
24573
  const util = __require("util");
@@ -24544,7 +24582,7 @@ var require_axios = /* @__PURE__ */ __commonJS({ "node_modules/axios/dist/node/a
24544
24582
  const crypto__default = /* @__PURE__ */ _interopDefaultLegacy(crypto);
24545
24583
  const url__default = /* @__PURE__ */ _interopDefaultLegacy(url);
24546
24584
  const proxyFromEnv__default = /* @__PURE__ */ _interopDefaultLegacy(proxyFromEnv);
24547
- const http__default = /* @__PURE__ */ _interopDefaultLegacy(http);
24585
+ const http__default = /* @__PURE__ */ _interopDefaultLegacy(http$1);
24548
24586
  const https__default = /* @__PURE__ */ _interopDefaultLegacy(https);
24549
24587
  const http2__default = /* @__PURE__ */ _interopDefaultLegacy(http2);
24550
24588
  const util__default = /* @__PURE__ */ _interopDefaultLegacy(util);
@@ -28315,18 +28353,17 @@ const run = async (options) => {
28315
28353
  const measure = async (path$4) => {
28316
28354
  const url$2 = fetchConfigurations.get(path$4);
28317
28355
  if (!url$2) return;
28318
- const start = Date.now();
28319
28356
  let status = "down";
28320
28357
  let durationMs;
28358
+ const start = Date.now();
28321
28359
  try {
28322
- const abortSignal = AbortSignal.timeout(options.timeoutMs ?? 5e3);
28323
- const response = await fetch(url$2, {
28360
+ const metrics = await measureRequest(url$2, {
28324
28361
  method: "GET",
28325
- signal: abortSignal
28362
+ timeout: options.timeoutMs ?? 5e3
28326
28363
  });
28327
- durationMs = Date.now() - start;
28328
- if (options.getStatus) status = options.getStatus(response.status, path$4, durationMs);
28329
- else status = response.ok ? "up" : "down";
28364
+ durationMs = metrics.timeToFirstByteMs;
28365
+ if (options.getStatus) status = options.getStatus(metrics.statusCode, path$4, metrics.timeToFirstByteMs);
28366
+ else status = metrics.statusCode >= 200 && metrics.statusCode < 300 ? "up" : "down";
28330
28367
  } catch (_error) {
28331
28368
  durationMs = Date.now() - start;
28332
28369
  status = "down";