Docs Ping PingArk from Go

Ping PingArk from Go

Go can ping PingArk with net/http from the standard library, so there is nothing to add to your go.mod. Run your work, then issue a get to the ping URL.

Before you start

You need a check and its ping URL. Create one in the dashboard, then copy the ping URL from the check page. New to PingArk? Start with the getting started guide.

Ping on success

Call the ping URL after your job finishes its work. A plain ping means success and re-arms the check for its next run.

package main

import "net/http"

func main() {
    http.Get("https://ping.pingark.com/ping/3f9c2a1b-7d4e-4c8a-9f1b-2e6d8a0c4b5e")
}
Copy

Report failures, starts and duration

Add a suffix to the ping URL to say more than a plain success. Call these the same way you called the success URL above. The ping API has the full reference.

https://ping.pingark.com/ping/3f9c2a1b-7d4e-4c8a-9f1b-2e6d8a0c4b5e        # success: the job finished, re-arms the timer
https://ping.pingark.com/ping/3f9c2a1b-7d4e-4c8a-9f1b-2e6d8a0c4b5e/start  # the run started, lets PingArk measure duration
https://ping.pingark.com/ping/3f9c2a1b-7d4e-4c8a-9f1b-2e6d8a0c4b5e/fail   # an explicit failure, alerts right away
https://ping.pingark.com/ping/3f9c2a1b-7d4e-4c8a-9f1b-2e6d8a0c4b5e/log    # a timeline note, never alerts
https://ping.pingark.com/ping/3f9c2a1b-7d4e-4c8a-9f1b-2e6d8a0c4b5e/$?     # a shell exit code: 0 is success, anything else fails
Copy

Use an http.Client with a timeout in production so a stalled request cannot block your program. The bare http.Get shown here has no timeout.

To report a failure, get the /fail URL when your job returns an error. To measure duration, get /start first and the success URL when the work is done.

Troubleshooting

  • Close the response body, or run the ping in a small helper that does, to avoid leaking connections in a long running service.
  • Log the ping error if you like, but never let it stop your job. Monitoring should never be the reason a task fails.