Coder Social home page Coder Social logo

jsdelivr / globalping-probe Goto Github PK

View Code? Open in Web Editor NEW
76.0 11.0 21.0 3.88 MB

The globalping probe code that runs on your hardware and connects to the global community network of probes

Home Page: https://www.jsdelivr.com/globalping

Dockerfile 0.45% TypeScript 95.75% JavaScript 2.54% Shell 1.26%
globalping devops ripe-atlas benchmark network-analysis

globalping-probe's Introduction

jsDelivr - Open Source CDN

jsdelivr-logo
A global super-fast and production-focused CDN, tightly integrated with NPM and GitHub
with support for on-the-fly optimizations, ES modules, detailed download stats and more

www.jsdelivr.com

Website Repo · Public API · Blog · @jsDelivr · Discord


We are looking for contributors. Please check open issues in the above repos if you think you could help, or open a new one if you have an idea you'd like to discuss.

jsDelivr is a free CDN for open-source files. We are tightly integrated with Github and npm, allowing us to automatically provide a reliable CDN service to almost every open-source project out there.

We offer a stable CDN that can be used in production on popular websites with huge amounts of traffic. There are no bandwidth limits or premium features, and it's completely free to use.

Why jsDelivr?

Ready for production

Our public CDN is built to be used in production by even the largest websites. Everything is optimized and constantly improved to offer all users maximum speed and uptime. Performance is monitored at all times, and we are always looking into new technologies and providers that may further improve our CDN. Downtime, timeouts, or slow responses are simply unacceptable.

We do everything possible to ensure our CDN will NEVER break any websites, regardless of the use case. If a file is available via our CDN, we assume it's used in production and ensure it will continue to work no matter what.

This includes dynamic endpoints such as /npm/, /gh/ and /combine/. When a file is first accessed, it gets permanently stored in a reliable file system. This means that even if a npm package gets deleted or an existing file gets removed by a developer, jsDelivr will continue to serve the stored copy forever without breaking any websites or causing any issues.

On top of that, we also do version fallback. This means that if a file used in version 1.0.1 is no longer available in 1.0.2 and a user requests the non-existent file, we will fall back to the previous 1.0.1 version and serve it instead of failing with a 404 error.

Multi-CDN

Unlike the competition, jsDelivr uses multiple CDN providers, resulting in the best possible uptime and performance. We currently use CloudFlare, and Fastly.

If a CDN goes down, websites that use jsDelivr won't have any issues because all traffic will be instantly redirected to remaining operational providers.

Smart Load Balancing

jsDelivr uses real user performance data (also known as RUM) to make its routing decisions. These metrics are gathered from hundreds of websites and are used in our load-balancing algorithm to make accurate decisions for serving content.

All providers (CDNs and custom servers) are tested millions of times per day by real users from all over the world. Based on this information, jsDelivr knows what provider is the fastest for each user. Each user gets a unique response based on his or her location, ISP, and the providers' uptime in real-time.

This system also responds immediately to performance degradation and downtime of providers. If a CDN is under a DDoS attack, and its performance drops in some locations, in a matter of seconds, the algorithm will pick up the change and start serving a different provider to all affected users.

Failover

We have multiple layers of failover to protect our users from any downtime.

We use 2 DNS providers at the same time. For jsDelivr to go down, both of these companies would have to go down at the same time.

Both of our DNS providers monitor our load-balanced endpoint, and if they detect problems, they will automatically switch all traffic to a single CDN provider.

Our load balancer monitors the uptime of all CDN providers using both RUM and synthetic data. If any of those detect downtime or performance degradation, that CDN provider will be removed immediately without any impact on our users.

Our origin consists of multiple servers in different data centers. If a server goes down, the CDNs will automatically switch to using the remaining healthy servers.

In total, we have one of the most resilient systems out there, ready to be used in production by even the biggest companies.

China

jsDelivr has multiple locations close to Chinese urban centers to ensure low latency and high performance for all Chinese users.

Usage Documentation

jsDelivr provides mirrors for npm, GitHub, WordPress plugins, and custom endpoints for several other projects with special requirements. If our regular endpoints don't work for your use case, let us know and we'll figure something out!

If you are a package author, check our tips for package authors to make using your package as easy as possible.

Root endpoint is always https://cdn.jsdelivr.net

npm

jsDelivr can instantly serve any file from any npm package in the public registry. New versions pushed to npm are instantly available via our CDN as well. No maintenance is required.

If a package, version, or file gets removed from npm, then jsDelivr will continue to serve that file from our permanent storage without breaking any websites using it.

We use a permanent S3 storage to ensure all files remain available even if npm goes down or a package is deleted by its author. Files are fetched directly from npm only the first time or when S3 goes down.

Load any project hosted on npm:
/npm/package@version/file
Load exact version:
/npm/[email protected]/dist/jquery.min.js
Use a version range instead of an exact version:
/npm/jquery@3/dist/jquery.min.js
/npm/[email protected]/dist/jquery.min.js

NOTE

If you use this feature and a file you requested is not available in the newest version of the package, the link will keep working thanks to our version-fallback feature. We'll continue to serve the file from the older version of the package instead of failing with a 404 error.


Load by tag (Not recommended for production usage):
/npm/jquery@beta/dist/jquery.min.js
Omit the version completely or use "latest" to load the latest one (not recommended for production usage):
/npm/jquery@latest/dist/jquery.min.js
/npm/jquery/dist/jquery.min.js

NOTE Requesting the latest version (as opposed to "latest major" or "latest minor") is dangerous because major versions usually come with breaking changes. Only do this if you really know what you are doing.


Add ".min" to any JS/CSS/SVG file to get a minified version - if one doesn't exist, we'll generate it for you. All generated files come with source maps and can be easily used during development:
/npm/[email protected]/github-markdown.min.css

NOTE Minifying a large file can take several seconds. However, we store all generated files in our permanent storage, so this delay only applies to the first few requests.


Omit the file path to get the default file. This file is always minified:
/npm/[email protected]
/npm/jquery@3
/npm/jquery
Get a directory listing:

GitHub

We recommend using npm for projects that support it for better UX - npm packages are searchable on our website, and package pages show additional useful information, such as descriptions and links to homepages.

We use a permanent S3 storage to ensure all files remain available even if GitHub goes down or a repository or a release is deleted by its author. Files are fetched directly from GitHub only the first time or when S3 goes down.

Load any GitHub release, commit, or branch:
/gh/user/repo@version/file
Load exact version:
/gh/jquery/[email protected]/dist/jquery.min.js
/gh/jquery/jquery@32b00373b3f42e5cdcb709df53f3b08b7184a944/dist/jquery.min.js
Use a version range instead of an exact version (only works with valid semver versions):
/gh/jquery/jquery@3/dist/jquery.min.js
/gh/jquery/[email protected]/dist/jquery.min.js

NOTE If you use this feature and a file you requested is not available in the newest release, the link will keep working thanks to our version-fallback feature. We'll continue to serve the file from older release instead of failing with a 404 error.


Omit the version completely or use "latest" to load the latest one (only works with valid semver versions): (not recommended for production usage)

Falls back to the master branch if there are no tagged releases.

/gh/jquery/jquery@latest/dist/jquery.min.js
/gh/jquery/jquery/dist/jquery.min.js

NOTE Requesting the latest version (as opposed to "latest major" or "latest minor") is dangerous because major versions usually come with breaking changes. Only do this if you really know what you are doing.


Add ".min" to any JS/CSS/SVG file to get a minified version - if one doesn't exist, we'll generate it for you. All generated files come with source maps and can be easily used during development:
/gh/jquery/[email protected]/src/core.min.js

NOTE Minifying a large file can take several seconds. However, we store all generated files in our permanent storage, so this delay only applies to the first few requests.


Get a directory listing:
/gh/jquery/[email protected]/
/gh/jquery/[email protected]/dist/

Combine multiple files

Our combine endpoint allows you to load several files from npm and GitHub endpoints in one request:

/combine/url1,url2,url3

All features that work for individual files (version ranges, minification, main modules) work here as well. All combined files come with source maps and can be easily used during development.

Examples:

/combine/gh/jquery/[email protected]/dist/jquery.min.js,gh/twbs/[email protected]/dist/js/bootstrap.min.js
/combine/npm/[email protected]/dist/css/bootstrap.min.css,npm/[email protected]/dist/css/bootstrap-theme.min.css

NOTE Combining large/many files can take several seconds. However, we store all generated files in our permanent storage, so this delay only applies to the first few requests.


Publishing packages

All packages hosted on npm and tagged releases on GitHub are automatically available on jsDelivr. If you are a package author, here are a few tips to make using your package as easy as possible:

  • Use semver for versioning (this is enforced by npm but not by GitHub)
  • If a file listed as main in package.json isn't meant to be used in a browser, set a browser or jsdelivr field
  • If you distribute minified JS/CSS files, also include source maps for those files
  • If you don't want to provide minified files, it's fine - we'll handle that for you

Configuring a default file in package.json

For packages hosted on npm, we support serving "default" files with shorter URLs. The default file can be configured by setting one of the following fields in package.json, with jsdelivr having the highest priority:

  1. jsdelivr
  2. browser
  3. main

We will first attempt to locate a minified version of the file provided here (by removing the extension and looking for the same file .min.js). If we can't find one, we will minify ourselves.

Be advised that you must include the file extension in the values, for example:

"main": "./index" // this will NOT work
"main": "./index.js" // this is the correct way

For projects having both a JS and a CSS file, use one the above fields for JS and a style field for the CSS file (example).

Restrictions

  • Packages larger than 150 MB or single files larger than 20 MB (in the case of GitHub) are not supported by default. We recommend removing files that are not needed from your package when possible. If you need to set a higher limit for your package, open an issue in this repo.
  • HTML files are served with Content-Type: text/plain for security reasons.

WordPress

Our WordPress endpoint works for plugins and themes hosted in the WordPress.org plugin directory and Wordpress.org theme directory, and mirrors the WordPress.org plugins SVN repo.

Load any plugin from the WordPress.org plugins SVN repo:
/wp/project/tags/version/file
Load exact version:
/wp/wp-slimstat/tags/4.6.5/wp-slimstat.js
Load the latest version (not recommended for production usage):
/wp/wp-slimstat/trunk/wp-slimstat.js
Load any theme from the WordPress.org themes SVN repo:
https://cdn.jsdelivr.net/wp/themes/project/version/file
Load an exact version of a file:
https://cdn.jsdelivr.net/wp/themes/twenty-eightteen/1.7/assets/js/html5.js
Add ".min" to any JS/CSS file to get a minified version - if one doesn't exist, we'll generate it for you. All generated files come with source maps and can be easily used during development:
https://cdn.jsdelivr.net/wp/themes/twenty-eightteen/1.7/assets/js/html5.min.js

Caching

Our caching logic and headers are optimized for production use and apply to all non-custom endpoints.

  • Static Versions and commit hashes - Effectively forever. The caching headers are set for 1 year but we also permanently cache the files in our S3 storage. So all future requests that bypass the CDN will hit our S3 storage with no option or way to update the contents of that file.
  • Version aliasing - 7 days. This also includes latest versions. They are cached on our CDN for 7 days with the option to purge the cache using our API to speed up the release of your project to your users.
  • Branches - 12 hours.

In certain cases, purgeable files can get updated faster due to low-cache hit ratio or forced CDN purge from our side for maintenance reasons.

We use permanent S3 caching even with dynamic URLs, such as version aliasing, meaning once we download your tagged files, there is no way for you to update them. If there is a critical issue in your latest release the best course of action is to tag a new semver valid release with the fix and purge the CDN URLs using our purge API.

Purge cache

jsDelivr has an easy-to-use API to purge files from the cache and force the files to update. This is useful when you release a new version and want to force the update of all version-aliased users.

Please note:

  • It will not work for static files as explained above.
  • Valid semver releases must be used for purge to work
  • Rate-limiting applies to all users

To avoid abuse, access to purge is given after an email request (for now - [email protected]).

Custom CDN Hosting

We can work together and set up a custom configuration for your project. This way, you can have full control over your files and the ability to utilize the full power of jsDelivr.

This kind of custom hosting can be suitable for:

  • Binary hosting. Windows executable files and zips.
  • Frequently updated files.
  • Projects that can't follow jsDelivr file structure.
  • Some other use that will blow all of our minds.

Simply send an email to [email protected] with a request for more information.

Current OSS projects using custom configs:

Privacy Policy

cdn.jsdelivr.net

jsDelivr might use information about downloaded files to build download stats per project and per file.

jsDelivr does not store any user data and does not track any users in any way.

Here are the relevant policies of our CDN providers:

globalping-probe's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

globalping-probe's Issues

Disconnect non-expect probes

How about we add a check for the "unbuffer" command in node itself and if its not detected then the probe connects but stays as "NOT READY". This way it wont impact any tests and we will be able to track how many probes are not-updated.
And remove the useless entrypoint code I added

What do you think?

error handling on stdout - pipe buffer

Pipe buffer was delaying progress updates, and on some commands - prevented them from appearing at all. I ended up using script cmd to disable it, but it merges stdout and stderr outputs together. We have to either find a better solution or to somehow distinguish between the desired output and the error.

Docker container self-update

Assume the user will never pull a new Docker container. We must check if it is possible to do auto-updates within a docker container.

Alternatively, we may bundle the app into a single binary and find the solution to swap binaries with new ones. What is the issue here is that we may want to update ping, traceroute, or dig binaries

DNS command - Real time update

DNS command measures resolving performance and collects resolved output.
See jsdelivr/globalping#6 for command options

A possible command that can be used to resolve target:

dig -4 +time=1 +tries=2 +edns +stats @1.1.1.1 MX google.com

dig output is pretty complex and may change significantly depending on the params so we should avoid parsing it manually.

Need to check this package https://www.npmjs.com/package/node-dig-dns and see if it can parse the output with the params we need.

Improve tests

As described in #83 (comment), the current tests don't seem to cover the relationship between the input and output at all.

For HTTP, we should use nock, which only provides the response if the request is sent as expected - currently, the response will be received regardless of the request.

For other types, similar asserts should be made with sinon mocks, i.e. assert that the executable would be called with correct params.

Graceful shutdown

When the app needs to exit, e.g during upgrade cron, then first stop accepting new tests, then finish existing ones and only then gracefully exit the app.
While we're there also support Ctr+C combination to exit the app when running in interactive mode.

Detect outdated node.js version

  • Option 1 - during the auto-update and don't apply the update (can break API communication later)
  • Option 2 - during app startup (after the update) - only log an error and exit
  • ???

Probably option 2 but we can decide after #168.

Better QA endpoints

The issue keeps coming up. Even reliable servers keep failing the QA test because of weirdness from the selected root-servers

root@globalping-probe:~# curl ipinfo.io
{
  "ip": "143.110.217.4",
  "city": "Toronto",
  "region": "Ontario",
  "country": "CA",
  "loc": "43.5272,-79.6617",
  "org": "AS14061 DigitalOcean, LLC",
  "postal": "L5K",
  "timezone": "America/Toronto",
  "readme": "https://ipinfo.io/missingauth"
root@globalping-probe:~# ping k.root-servers.net
PING k.root-servers.net (193.0.14.129) 56(84) bytes of data.
64 bytes from k.root-servers.net (193.0.14.129): icmp_seq=1 ttl=46 time=325 ms
64 bytes from k.root-servers.net (193.0.14.129): icmp_seq=3 ttl=46 time=324 ms
64 bytes from k.root-servers.net (193.0.14.129): icmp_seq=4 ttl=46 time=324 ms
^C
--- k.root-servers.net ping statistics ---
4 packets transmitted, 3 received, 25% packet loss, time 3030ms
rtt min/avg/max/mdev = 323.883/324.415/325.111/0.514 ms

We should either select a different group of root servers or try to find better endpoints.

https://root-servers.org/

Empty rawOutputs

Not sure if this is intended behaviour, but the following result returns an empty rawOutput string: https://api.globalping.io/v1/measurements/EvvUIAcLuAGv1e03

{
  "id": "EvvUIAcLuAGv1e03",
  "type": "dns",
  "status": "finished",
  "createdAt": "2022-08-12T12:03:36.705Z",
  "updatedAt": "2022-08-12T12:03:37.295Z",
  "probesCount": 2,
  "results": [
    {
      "probe": {
        "continent": "EU",
        "region": "Eastern Europe",
        "country": "RU",
        "state": null,
        "city": "Moscow",
        "asn": 196682,
        "longitude": 37.6156,
        "latitude": 55.7522,
        "network": "FLP Kochenov Aleksej Vladislavovich",
        "resolvers": [
          "8.8.8.8",
          "8.8.4.4"
        ]
      },
      "result": {
        "rawOutput": ""
      }
    },
    {
      "probe": {
        "continent": "SA",
        "region": "Southern America",
        "country": "CL",
        "state": null,
        "city": "Santiago",
        "asn": 396982,
        "longitude": -70.6483,
        "latitude": -33.4569,
        "network": "Google LLC",
        "resolvers": [
          "private"
        ]
      },
      "result": {
        "rawOutput": "Private IP ranges are not allowed"
      }
    }
  ]
}

It does seem like an unhandled error here and I think it can be confusing to get no explanation why there is no output at all.

I can't reproduce it consistently, but I used port 80, TCP and trace for the example above. I'm aware this shouldn't work at all, but at least the DIG command returns a timeout/connection refused error for this.

Restrict imports without .js extension

Currently it is easy to accidentally import without extension, e.g.:

import { isIpPrivate } from '../../../lib/private-ip';

Code will compile and tests will pass, but at runtime module will not be found.
While we have #178 to check for this an additional eslint rule is required to restrict and autofix imports without .js extension

HTTP timings set to null if 0

0 is a valid value if the connection is established really fast and should not be filtered out. Check other measurement types too.

QA criteria

I am confused, based on the output it seems like only 1 test of 3 had packet loss. Meaning the QA test should have been a pass.
But the errors say otherwise?

Checking for the latest version
Current version 0.20.0
Latest version 0.20.0
[2023-05-05 09:20:13] [INFO] [687] [general] Start probe version 0.20.0 in a production mode
[2023-05-05 09:20:14] [DEBUG] [687] [general] connection to API established
[2023-05-05 09:20:14] [INFO] [687] [api:connect] connected from (Palermo, IT, EU) (lat: 38.1321 long: 13.3356)
[2023-05-05 09:20:15] [WARN] [687] [status-manager] ping test result don't match criterias:
{
  status: 'finished',
  resolvedAddress: '192.58.128.30',
  resolvedHostname: 'j.root-servers.net',
  timings: [
    { ttl: 247, rtt: 216 },
    { ttl: 247, rtt: 217 },
    { ttl: 247, rtt: 217 },
    { ttl: 247, rtt: 217 },
    { ttl: 247, rtt: 217 },
    { ttl: 247, rtt: 217 }
  ],
  stats: {
    min: 216.448,
    avg: 216.576,
    max: 216.63,
    total: 7,
    loss: 14.2857,
    rcv: 6,
    drop: 1
  },
  rawOutput: 'PING  (192.58.128.30) 56(84) bytes of data.\n' +
    '64 bytes from j.root-servers.net (192.58.128.30): icmp_seq=1 ttl=247 time=216 ms\n' +
    '64 bytes from j.root-servers.net (192.58.128.30): icmp_seq=2 ttl=247 time=217 ms\n' +
    '64 bytes from j.root-servers.net (192.58.128.30): icmp_seq=3 ttl=247 time=217 ms\n' +
    '64 bytes from j.root-servers.net (192.58.128.30): icmp_seq=4 ttl=247 time=217 ms\n' +
    '64 bytes from j.root-servers.net (192.58.128.30): icmp_seq=5 ttl=247 time=217 ms\n' +
    '64 bytes from j.root-servers.net (192.58.128.30): icmp_seq=6 ttl=247 time=217 ms\n' +
    '\n' +
    '---  ping statistics ---\n' +
    '7 packets transmitted, 6 received, 14.2857% packet loss, time 1207ms\n' +
    'rtt min/avg/max/mdev = 216.448/216.576/216.630/0.059 ms, pipe 2'
}

ping test result don't match criterias is this a mistake or just unclear messaging?

User friendly logs

More people are complaining that their probes are broken due to the logs they see. We need to change the format to something user friendly to make it clear what is the current state of the probe and improve the logs.

I'll provide an example. Current:

Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
Current version 0.10.1
Latest version 0.10.1
[2022-09-28 17:02:49] [INFO] [687] [general] Start probe version 0.10.1 in a production mode
[2022-09-28 17:02:50] [DEBUG] [687] [general] connection to API established
[2022-09-28 17:02:50] [INFO] [687] [api:connect] connected from (Singapore, SG, AS) (lat: 1.3371 long: 103.8946)
2023-05-26 04:46:02] [DEBUG] [687] [general] ping request 44gF8CWXjNHrk2No received
[2023-05-26 07:01:01] [DEBUG] [687] [general] ping request uR7RjzJ08w0k4VbH received
[2023-05-26 07:02:28] [WARN] [687] [status-manager] ping test result don't match criterias:
{
  status: 'finished',
  resolvedAddress: '193.0.14.129',
  resolvedHostname: 'k.root-servers.net',
  timings: [
    { ttl: 53, rtt: 220 },
    { ttl: 53, rtt: 220 },
    { ttl: 53, rtt: 221 },
    { ttl: 53, rtt: 221 },
    { ttl: 53, rtt: 221 },
    { ttl: 53, rtt: 220 }
  ],
  stats: {
    min: 220.177,
    avg: 220.575,
    max: 221.249,
    total: 7,
    loss: 14.2857,
    rcv: 6,
    drop: 1
  },
  rawOutput: 'PING k.root-servers.net (193.0.14.129) 56(84) bytes of data.\n' +
    '64 bytes from k.root-servers.net (193.0.14.129): icmp_seq=1 ttl=53 time=220 ms\n' +
    '64 bytes from k.root-servers.net (193.0.14.129): icmp_seq=2 ttl=53 time=220 ms\n' +
    '64 bytes from k.root-servers.net (193.0.14.129): icmp_seq=3 ttl=53 time=221 ms\n' +
    '64 bytes from k.root-servers.net (193.0.14.129): icmp_seq=4 ttl=53 time=221 ms\n' +
    '64 bytes from k.root-servers.net (193.0.14.129): icmp_seq=5 ttl=53 time=221 ms\n' +
    '64 bytes from k.root-servers.net (193.0.14.129): icmp_seq=6 ttl=53 time=220 ms\n' +
    '\n' +
    '--- k.root-servers.net ping statistics ---\n' +
    '7 packets transmitted, 6 received, 14.2857% packet loss, time 1205ms\n' +
    'rtt min/avg/max/mdev = 220.177/220.575/221.249/0.397 ms, pipe 2'
}
[2023-05-26 07:02:28] [WARN] [687] [status-manager] ping test result don't match criterias:
{
  status: 'finished',
  resolvedAddress: '193.0.14.129',
  resolvedHostname: 'k.root-servers.net',
  timings: [
    { ttl: 53, rtt: 220 },
    { ttl: 53, rtt: 221 },
    { ttl: 53, rtt: 221 },
    { ttl: 53, rtt: 221 },
    { ttl: 53, rtt: 221 },
    { ttl: 53, rtt: 221 }
  ],
  stats: {
    min: 220.187,
    avg: 220.92,
    max: 221.325,
    total: 7,
    loss: 14.2857,
    rcv: 6,
    drop: 1
  },
  rawOutput: 'PING k.root-servers.net (193.0.14.129) 56(84) bytes of data.\n' +
    '64 bytes from k.root-servers.net (193.0.14.129): icmp_seq=1 ttl=53 time=220 ms\n' +
    '64 bytes from k.root-servers.net (193.0.14.129): icmp_seq=2 ttl=53 time=221 ms\n' +
    '64 bytes from k.root-servers.net (193.0.14.129): icmp_seq=3 ttl=53 time=221 ms\n' +
    '64 bytes from k.root-servers.net (193.0.14.129): icmp_seq=4 ttl=53 time=221 ms\n' +
    '64 bytes from k.root-servers.net (193.0.14.129): icmp_seq=5 ttl=53 time=221 ms\n' +
    '64 bytes from k.root-servers.net (193.0.14.129): icmp_seq=6 ttl=53 time=221 ms\n' +
    '\n' +
    '--- k.root-servers.net ping statistics ---\n' +
    '7 packets transmitted, 6 received, 14.2857% packet loss, time 1206ms\n' +
    'rtt min/avg/max/mdev = 220.187/220.920/221.325/0.381 ms, pipe 2'
}
[2023-05-26 07:07:12] [DEBUG] [687] [general] ping request Hi0CCZnQ1iZJKyu5 received
[2023-05-26 07:11:46] [DEBUG] [687] [general] dns request i2hPFTNtJ8yyIb1q received

Example of a better log:

Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
Current version 0.10.1
Latest version 0.10.1
[2022-09-28 17:02:49] [INFO] [general] Start probe version 0.10.1 in a production mode
[2022-09-28 17:02:50] [DEBUG] [general] connection to API established
[2022-09-28 17:02:50] [INFO] [api:connect] connected from (Singapore, SG, AS) (lat: 1.3371 long: 103.8946)(ISP Name, ASN)
[2023-05-26 04:46:02] [DEBUG] [general] ping request 44gF8CWXjNHrk2No received
[2023-05-26 07:01:01] [DEBUG] [general] ping request uR7RjzJ08w0k4VbH received
[2023-05-26 07:02:28] [WARN] [status-manager] quality control ping test (k.root-servers.net) unsuccessful "14.2857% packet loss, time 1205ms". Test pass.
[2023-05-26 07:02:28] [WARN] [status-manager] quality control ping test (k.root-servers.net) unsuccessful "14.2857% packet loss, time 1206m". Test pass.
[2023-05-26 07:07:12] [DEBUG][general] ping request Hi0CCZnQ1iZJKyu5 received
[2023-05-26 07:11:46] [DEBUG][general] dns request i2hPFTNtJ8yyIb1q received

OR if tests failed

[2023-05-26 07:02:28] [WARN] [status-manager] all quality control ping tests failed due to bad internet connection. Re-try in 10minutes. Probe disconnected.

Just an example but you get the idea. Shorter, clearer and dont scare the user

Force ping to use IPv4

It currently uses IPV6 if the probe has it enabled, we should force IPv4. It should be like this ping -4 google.com

Failed ping tests

Checking for the latest version
Current version 0.20.0
Latest version 0.20.0
[2023-05-05 09:20:09] [INFO] [687] [general] Start probe version 0.20.0 in a production mode
[2023-05-05 09:20:09] [DEBUG] [687] [general] connection to API established
[2023-05-05 09:20:09] [INFO] [687] [api:connect] connected from (Tel Aviv, IL, AS) (lat: 32.0809 long: 34.7806)
[2023-05-05 09:20:24] [WARN] [687] [status-manager] ping test promise rejected: Command failed with exit code 1: unbuffer ping -4 -c 6 -i 0.2 -w 15 j.root-servers.net
PING  (192.58.128.30) 56(84) bytes of data.

---  ping statistics ---
74 packets transmitted, 0 received, 100% packet loss, time 14889ms

{
  shortMessage: 'Command failed with exit code 1: unbuffer ping -4 -c 6 -i 0.2 -w 15 j.root-servers.net',
  command: 'unbuffer ping -4 -c 6 -i 0.2 -w 15 j.root-servers.net',
  escapedCommand: 'unbuffer ping -4 -c 6 -i 0.2 -w 15 j.root-servers.net',
  exitCode: 1,
  signal: undefined,
  signalDescription: undefined,
  stdout: 'PING  (192.58.128.30) 56(84) bytes of data.\n' +
    '\n' +
    '---  ping statistics ---\n' +
    '74 packets transmitted, 0 received, 100% packet loss, time 14889ms\n',
  stderr: '',
  failed: true,
  timedOut: false,
  isCanceled: false,
  killed: false
}
Error: Command failed with exit code 1: unbuffer ping -4 -c 6 -i 0.2 -w 15 j.root-servers.net
PING  (192.58.128.30) 56(84) bytes of data.

---  ping statistics ---
74 packets transmitted, 0 received, 100% packet loss, time 14889ms

    at makeError (file:///app/node_modules/execa/lib/error.js:59:11)
    at handlePromise (file:///app/node_modules/execa/index.js:119:26)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async Promise.allSettled (index 2)
    at async StatusManager.pingTest (file:///app/dist/lib/status-manager.js:49:25)
    at async StatusManager.runTest (file:///app/dist/lib/status-manager.js:36:24)
    at async StatusManager.start (file:///app/dist/lib/status-manager.js:19:9)
    at async Socket.<anonymous> (file:///app/dist/helper/api-connect-handler.js:8:5)

This seems to be a QA test with 100% packet loss. But it seems to be treated like a fatal error?
Normally when QA doesnt pass we say [status-manager] ping test result don't match criterias: but not in this case

Setup even better release flow

The idea is to create a Workflow that can be triggered manually from the GitHub UI. This workflow will use semantic-release to:

  1. bump package version and update the package.json file
  2. generate release notes
  3. publish GH release

TODO:

  • #9
  • add manual GH Workflow that will publish new releases
  • set up semantic-release
  • set up commit-lint and add git hook

Automated tests

In the early days we broke everything at least 2 or 3 times because we forgot or missed stuff. We need to write lots of detailed tests both unit and functional and simulate many conditions to ensure new releases won't break anything. Especially the auto-update logic.
It would be a lot more catastrophic now. I actually think we still have like 100 probes stuck forever waiting for the container to get rebooted by someone.
Let's ensure this never happens again

Node 18

Since we dont expect people to pull our containers often we will run into a problem when we are forced to start using node18 specific functionality that will get installed on our old node16 containers.
It will be impossible to fix it without waiting for people to pull new containers.

So I suggest with upgrade to node18 now which has END-OF-LIFE 2025-04-30

DNS PTR broken

{"type":"dns","target":"1.1.1.1","measurementOptions":{"query":{"type":"PTR"}},"locations":[],"inProgressUpdates":true,"limit":1}

image

Traceroute command

traceroute command should be implemented.

The command that we used before and worked as expected:

traceroute -4 -m 20 -w 2 -q 2 -N 20 -I google.com

It should work exactly as ping does - emit progress, parse final results and emit result event.
If there is an npm package that could do that - use it.

unable to start with raspberry pi

○ → docker logs -f 510b31c9c4f9
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
Current version 0.21.0
Latest version 0.21.0


#
# Fatal error in , line 0
# unreachable code
#
#
#
#FailureMessage Object: 0x762fe7a8
/entrypoint.sh: line 5:   687 Trace/breakpoint trap   (core dumped) node /app/dist/index.js
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
Current version 0.21.0
Latest version 0.21.0


#
# Fatal error in , line 0
# unreachable code
#
#
#
#FailureMessage Object: 0x74afb7a8
/entrypoint.sh: line 5:   688 Trace/breakpoint trap   (core dumped) node /app/dist/index.js
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
Current version 0.21.0
Latest version 0.21.0


#
# Fatal error in , line 0
# unreachable code
#
#
#
#FailureMessage Object: 0x762fe7a8
/entrypoint.sh: line 5:   687 Trace/breakpoint trap   (core dumped) node /app/dist/index.js
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
Current version 0.21.0
Latest version 0.21.0

Filter client IP from command result?

It looks like node's IP address can be obtain by use follow method:

  1. HTTP GET api.ipify.org
  2. DNS TXT o-o.myaddr.l.google.com

This may increase security risk if someone running probe software in personal server or homelab.

HTTP with invalid port results into probe timeout

With a valid port like 23232, which just isn't open, the request correctly ends with ETIMEDOUT after 10 seconds. With an invalid port like 232322, it ends only after 30 seconds with The measurement timed out. While after jsdelivr/globalping#353 it won't be possible to trigger the second case, the timeout is suspicious and may be caused by wrong error handling somewhere (or wrong timeout config for the actual HTTP request).

Keep-Alive with repeated HTTP/S requests

#77 made me think about a possible related issue with resuing connections, which could, at the very least, mess up the timings. I think it doesn't happen at this time but it seems that'll change in a future version of node, so we need to keep track of that: nodejs/node#43522

Improve HTTP test scaling

Based on benchmarks the HTTP test performs really well in general, but doesn't scale much beyond one/two cores because it's implemented entirely in node, which runs as a single process. We should likely use a pool of workers on each probe.

Support ARM

To run the probe on mini computers we need to support ARM. I tried running our container on AWS ARM instances and it fails with

standard_init_linux.go:228: exec user process caused: exec format error

We should build a multi-arch container

Minimize amount of logs

Docker doesnt rotate them by default. So to avoid stability issues we need to make sure we generate as little as possible.

Current example output attached

logs.txt

Failing to ping loopsofzen.uk

Your network seems to have some trouble reaching several sites.
Loopsofzen.uk being one of several sites I tested (but not all)

Increase reconnect timeouts

I suggest using a base of 2000ms with a randomizationFactor: 0.75, effectively making the initial reconnect time 500 - 3500ms. reconnectionDelayMax for repeated attempts can be 8000ms.

Broken probe

Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
Self-update finished
[2022-11-13 06:09:27] [INFO] [691] [general] Start probe version 0.10.1 in a production mode
[2022-11-13 06:09:28] [DEBUG] [691] [general] connection to API established
[2022-11-13 06:09:28] [INFO] [691] [api:connect] connected from (Lagos, NG, AF) (lat: 6.4474 long: 3.3903)
[2022-11-13 19:03:23] [DEBUG] [691] [general] disconnected from API: (transport close)
[2022-11-13 19:03:32] [DEBUG] [691] [general] connection to API established
[2022-11-13 19:03:32] [INFO] [691] [api:connect] connected from (Lagos, NG, AF) (lat: 6.4474 long: 3.3903)
[2022-11-14 13:03:38] [DEBUG] [691] [general] disconnected from API: (ping timeout)
[2022-11-14 13:03:58] [ERROR] [691] [general] connection to API failed: websocket error
[2022-11-14 13:04:13] [DEBUG] [691] [general] connection to API established
[2022-11-14 13:04:13] [INFO] [691] [api:connect] connected from (Lagos, NG, AF) (lat: 6.4474 long: 3.3903)
node:internal/process/promises:288
            triggerUncaughtException(err, true /* fromPromise */);
            ^

RequestError: Timeout awaiting 'request' for 15000ms
    at ClientRequest.<anonymous> (file:///app/node_modules/got/dist/source/core/index.js:760:61)
    at Object.onceWrapper (node:events:652:26)
    at ClientRequest.emit (node:events:549:35)
    at TLSSocket.socketErrorListener (node:_http_client:465:9)
    at TLSSocket.emit (node:events:537:28)
    at emitErrorNT (node:internal/streams/destroy:151:8)
    at emitErrorCloseNT (node:internal/streams/destroy:116:3)
    at process.processTicksAndRejections (node:internal/process/task_queues:82:21)
    at Timeout.timeoutHandler [as _onTimeout] (file:///app/node_modules/got/dist/source/core/timed-out.js:42:25)
    at listOnTimeout (node:internal/timers:566:11)
    at process.processTimers (node:internal/timers:507:7) {
  input: undefined,
  code: 'ETIMEDOUT',
  timings: {
    start: 1668431247808,
    socket: 1668431247808,
    lookup: 1668431247909,
    connect: 1668431248015,
    secureConnect: undefined,
    upload: undefined,
    response: undefined,
    end: undefined,
    error: 1668431262811,
    abort: undefined,
    phases: {
      wait: 0,
      dns: 101,
      tcp: 106,
      tls: undefined,
      request: undefined,
      firstByte: undefined,
      download: undefined,
      total: 15003
    }
  },
  name: 'TimeoutError',
  options: Options {
    _unixOptions: undefined,
    _internals: {
      request: undefined,
      agent: { http: undefined, https: undefined, http2: undefined },
      h2session: undefined,
      decompress: true,
      timeout: {
        connect: undefined,
        lookup: undefined,
        read: undefined,
        request: 15000,
        response: undefined,
        secureConnect: undefined,
        send: undefined,
        socket: undefined
      },
      prefixUrl: '',
      body: undefined,
      form: undefined,
      json: undefined,
      cookieJar: undefined,
      ignoreInvalidCookies: false,
      searchParams: undefined,
      dnsLookup: undefined,
      dnsCache: undefined,
      context: {},
      hooks: {
        init: [],
        beforeRequest: [],
        beforeError: [],
        beforeRedirect: [],
        beforeRetry: [],
        afterResponse: []
      },
      followRedirect: true,
      maxRedirects: 10,
      cache: undefined,
      throwHttpErrors: true,
      username: '',
      password: '',
      http2: false,
      allowGetBody: false,
      headers: {
        'user-agent': 'got (https://github.com/sindresorhus/got)',
        accept: 'application/json',
        'accept-encoding': 'gzip, deflate, br'
      },
      methodRewriting: false,
      dnsLookupIpVersion: undefined,
      parseJson: [Function: parse],
      stringifyJson: [Function: stringify],
      retry: {
        limit: 2,
        methods: [ 'GET', 'PUT', 'HEAD', 'DELETE', 'OPTIONS', 'TRACE' ],
        statusCodes: [
          408, 413, 429, 500,
          502, 503, 504, 521,
          522, 524
        ],
        errorCodes: [
          'ETIMEDOUT',
          'ECONNRESET',
          'EADDRINUSE',
          'ECONNREFUSED',
          'EPIPE',
          'ENOTFOUND',
          'ENETUNREACH',
          'EAI_AGAIN'
        ],
        maxRetryAfter: undefined,
        calculateDelay: [Function: calculateDelay],
        backoffLimit: Infinity,
        noise: 100
      },
      localAddress: undefined,
      method: 'GET',
      createConnection: undefined,
      cacheOptions: {
        shared: undefined,
        cacheHeuristic: undefined,
        immutableMinTimeToLive: undefined,
        ignoreCargoCult: undefined
      },
      https: {
        alpnProtocols: undefined,
        rejectUnauthorized: undefined,
        checkServerIdentity: undefined,
        certificateAuthority: undefined,
        key: undefined,
        certificate: undefined,
        passphrase: undefined,
        pfx: undefined,
        ciphers: undefined,
        honorCipherOrder: undefined,
        minVersion: undefined,
        maxVersion: undefined,
        signatureAlgorithms: undefined,
        tlsSessionLifetime: undefined,
        dhparam: undefined,
        ecdhCurve: undefined,
        certificateRevocationLists: undefined
      },
      encoding: undefined,
      resolveBodyOnly: false,
      isStream: false,
      responseType: 'text',
      url: <ref *1> URL {
        [Symbol(context)]: URLContext {
          flags: 400,
          scheme: 'https:',
          username: '',
          password: '',
          host: 'api.github.com',
          port: null,
          path: [
            'repos',
            'jsdelivr',
            'globalping-probe',
            'releases',
            'latest'
          ],
          query: null,
          fragment: null
        },
        [Symbol(query)]: URLSearchParams {
          [Symbol(query)]: [],
          [Symbol(context)]: [Circular *1]
        }
      },
      pagination: {
        transform: [Function: transform],
        paginate: [Function: paginate],
        filter: [Function: filter],
        shouldContinue: [Function: shouldContinue],
        countLimit: Infinity,
        backoff: 0,
        requestLimit: 10000,
        stackAllItems: false
      },
      setHost: true,
      maxHeaderSize: undefined
    },
    _merging: false,
    _init: [ { timeout: { request: 15000 } } ]
  },
  event: 'request'
}

Node.js v18.4.0
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
Current version 0.10.1
Latest version
Start self-update process
tar (child): /tmp/globalping-probe-.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version
node:internal/modules/cjs/loader:949
  throw err;
  ^

Error: Cannot find module '/app/dist/index.js'
    at Module._resolveFilename (node:internal/modules/cjs/loader:946:15)
    at Module._load (node:internal/modules/cjs/loader:787:27)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
    at node:internal/main/run_main_module:17:47 {
  code: 'MODULE_NOT_FOUND',
  requireStack: []
}

Node.js v18.4.0
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version
node:internal/modules/cjs/loader:949
  throw err;
  ^

Error: Cannot find module '/app/dist/index.js'
    at Module._resolveFilename (node:internal/modules/cjs/loader:946:15)
    at Module._load (node:internal/modules/cjs/loader:787:27)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
    at node:internal/main/run_main_module:17:47 {
  code: 'MODULE_NOT_FOUND',
  requireStack: []
}

Node.js v18.4.0
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version
node:internal/modules/cjs/loader:949
  throw err;
  ^

Error: Cannot find module '/app/dist/index.js'
    at Module._resolveFilename (node:internal/modules/cjs/loader:946:15)
    at Module._load (node:internal/modules/cjs/loader:787:27)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
    at node:internal/main/run_main_module:17:47 {
  code: 'MODULE_NOT_FOUND',
  requireStack: []
}

Node.js v18.4.0
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version
node:internal/modules/cjs/loader:949
  throw err;
  ^

Error: Cannot find module '/app/dist/index.js'
    at Module._resolveFilename (node:internal/modules/cjs/loader:946:15)
    at Module._load (node:internal/modules/cjs/loader:787:27)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
    at node:internal/main/run_main_module:17:47 {
  code: 'MODULE_NOT_FOUND',
  requireStack: []
}

Node.js v18.4.0
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version
node:internal/modules/cjs/loader:949
  throw err;
  ^

Error: Cannot find module '/app/dist/index.js'
    at Module._resolveFilename (node:internal/modules/cjs/loader:946:15)
    at Module._load (node:internal/modules/cjs/loader:787:27)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
    at node:internal/main/run_main_module:17:47 {
  code: 'MODULE_NOT_FOUND',
  requireStack: []
}

Node.js v18.4.0
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version
node:internal/modules/cjs/loader:949
  throw err;
  ^

Error: Cannot find module '/app/dist/index.js'
    at Module._resolveFilename (node:internal/modules/cjs/loader:946:15)
    at Module._load (node:internal/modules/cjs/loader:787:27)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
    at node:internal/main/run_main_module:17:47 {
  code: 'MODULE_NOT_FOUND',
  requireStack: []
}

Node.js v18.4.0
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version
node:internal/modules/cjs/loader:949
  throw err;
  ^

Error: Cannot find module '/app/dist/index.js'
    at Module._resolveFilename (node:internal/modules/cjs/loader:946:15)
    at Module._load (node:internal/modules/cjs/loader:787:27)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
    at node:internal/main/run_main_module:17:47 {
  code: 'MODULE_NOT_FOUND',
  requireStack: []
}

Node.js v18.4.0
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version
node:internal/modules/cjs/loader:949
  throw err;
  ^

Error: Cannot find module '/app/dist/index.js'
    at Module._resolveFilename (node:internal/modules/cjs/loader:946:15)
    at Module._load (node:internal/modules/cjs/loader:787:27)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
    at node:internal/main/run_main_module:17:47 {
  code: 'MODULE_NOT_FOUND',
  requireStack: []
}

Node.js v18.4.0
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version
node:internal/modules/cjs/loader:949
  throw err;
  ^

Error: Cannot find module '/app/dist/index.js'
    at Module._resolveFilename (node:internal/modules/cjs/loader:946:15)
    at Module._load (node:internal/modules/cjs/loader:787:27)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
    at node:internal/main/run_main_module:17:47 {
  code: 'MODULE_NOT_FOUND',
  requireStack: []
}

Node.js v18.4.0
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version
node:internal/modules/cjs/loader:949
  throw err;
  ^

Error: Cannot find module '/app/dist/index.js'
    at Module._resolveFilename (node:internal/modules/cjs/loader:946:15)
    at Module._load (node:internal/modules/cjs/loader:787:27)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
    at node:internal/main/run_main_module:17:47 {
  code: 'MODULE_NOT_FOUND',
  requireStack: []
}

Node.js v18.4.0
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version
node:internal/modules/cjs/loader:949
  throw err;
  ^

Error: Cannot find module '/app/dist/index.js'
    at Module._resolveFilename (node:internal/modules/cjs/loader:946:15)
    at Module._load (node:internal/modules/cjs/loader:787:27)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
    at node:internal/main/run_main_module:17:47 {
  code: 'MODULE_NOT_FOUND',
  requireStack: []
}

Node.js v18.4.0
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process
tar (child): /tmp/globalping-probe-0.10.1.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
mv: cannot stat '/tmp/globalping-probe-0.10.1': No such file or directory
/entrypoint.sh: line 53: cd: /app: No such file or directory
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Checking for the latest version
jq: error: Could not open file /app/package.json: No such file or directory
Current version
Latest version 0.10.1
Start self-update process

Probes dont reconnect

We had an outage where the API crashed hard with 500 errors and it took a few hours to come back online.
Once it started working no probes re-connected. That's pretty bad, we need to understand why they didn't and correct that for the future

Add test for Dockerfile

Need to add a test in CI that will build the image from Dockerfile without publishing it to the registry.
Not sure if we need to run it on every push or only on push/merge to master.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.