A new Python 3 library for managing NodePing checks, schedules, contacts, etc.
To use the NodePing API with Python3, you are required to use your
provided API token. You can find your API key on your NodePing account
under Account Settings → API
.
You can also optionally provide a Sub Account ID which can be found
under Account Settings → SubAccounts
and you will see the ID by its
name.
You can set these variables, for example, like so:
token = "my-api-token"
customerid = "your-subaccount-id"
An example use of specifically managing an account/subaccount via the ID might look like this:
>>> from nodepingpy import accounts
>>> token = "api-token-here"
>>> customerid = "your-subaccount-id"
>>> accounts.info(token, customerid)
For additional information visit the API documentation:
https://nodeping.com/docs-api-overview.html
To install this package, run:
pip install nodepingpy
This module returns account information, including getting and updating accounts/subaccounts, creating subaccounts, and deleting subaccounts.
Can be imported with
from nodepingpy import accounts
Returns True
if API token is valid or False
if not.
>>> from nodepingpy import accounts
>>> token = "api-token-here"
>>> accounts.is_valid(token)
True
Use accounts.info
to get details about the parent account
>>> accounts.info(token)
{
"201205050153W2Q4C": {
"parent": 5,
"name": "Peter Provider",
"status": "Active",
"count": 120
},
"201204251942S197J": {
"name": "Courageous Charlie",
"status": "Active",
"count": 31
}
}
Or when specifying an account/subaccount
>>> accounts.info(token, customerid)
{
"_id": "201205102227VZ6XU",
"type": "customer",
"customer_name": "My Company Name",
"creation_date": 1336626000000,
"status": "Active",
"timezone": "-7.0",
"nextBillingDate": "2012-05-15",
"defaultlocations": [ "nam" ]
}
This will only create subaccounts, not a new account. A dataclass is used for simple templating of arguments to pass to the API.
token = "my-token"
args = accounts.Account(name="My Company Name", contactname="Courageous Charlie", email="[email protected]", timezone="-5", location="nam", emailme=True, autodiagnotifications=True)
accounts.create_subaccount(token, args)
Uses the accounts.AccountUpdate
dataclass, which has all optional values,
including an additional status
key to allow activating or suspending subaccounts.
token = "my-token"
customerid = "201205102227VZ6XU"
args = accounts.AccountUpdate(name="ChangedTheName", status="Suspend")
accounts.update_account(token, args, customerid=customerid)
token = "my-token"
customerid = "201205102227VZ6XU"
accounts.delete_subaccount(token, customerid)
You can disable or enable notifications on your account or subaccount. Doing this on a parent account will not disable notifications on subaccounts.
token = "my-token"
accounts.disable_notifications(token, customerid)
This module manages checks on your account and subaccount.
from nodepingpy import checks
If you are going to create checks, also import the checktypes
module to
use the dataclasses for creating different check types.
from nodepingpy.nptypes import checktypes
token = "my-token"
checks.get_all(token)
You can also get all checks with their uptime
token = "my-token"
checks.get_all_uptime(token)
Use this method to get one check on your account or subaccount.
token = "my-token"
checkid = "201205050153W2Q4C-0J2HSIRF"
checks.get_by_id(token, checkid)
Or many
token = "my-token"
checkids = ["201205050153W2Q4C-0J2HSIRF", "201205050153W2Q4C-4RZT8MLN"]
checks.get_many(token, checkids)
You can also get current events ("down" or "disabled") by setting current
to True
token = "my-token"
checkids = ["201205050153W2Q4C-0J2HSIRF", "201205050153W2Q4C-4RZT8MLN"]
checks.get_many(token, checkids, current=True)
You can get uptime for checks. There is a combination of getting all one, many, or all checks, with all uptime, and with uptime stats back to a certain date.
Get all uptime
token = "my-token"
checks.get_uptime(token, "all")
Get uptime for a list of checks
token = "my-token"
checkids = ["201205050153W2Q4C-0J2HSIRF", "201205050153W2Q4C-4RZT8MLN"]
checks.get_uptime(token, checkids)
Uptime back to a certain date
token = "my-token"
checks.get_uptime(token, "all", "2024-01-01)
This gets the last result for a single check
token = "my-token"
checkid = "201205050153W2Q4C-0J2HSIRF"
checks.get_last_result(token, checkid)
Get passing checks
token = "my-token"
checks.get_passing(token)
Get failing checks
token = "my-token"
checks.get_failing(token)
Get active checks
token = "my-token"
checks.get_active(token)
Get inactive checks
token = "my-token"
checks.get_inactive(token)
To create a check, checktype dataclasses were created to have more convenient access to the different fields for each TYPE. For example, creating a PING check
from nodepingpy import checks
from nodepingpy.nptypes import checktypes
token = "my-token"
args = checktypes.PingCheck("example.com", ipv6=False, label="ping example.com", interval=1, autodiag=True, sens=5, runlocations="nam")
checks.create_check(token, args)
If you do not want to import all check types, you can import only the check types you want:
from nodepingpy.nptypes import PingCheck, HttpCheck, MtrCheck
Updating a check requires passing in a dictionary of keys to update in
the check being updated. For example, replacing the label
and fields
key in a PUSH check:
from nodepingpy import checks
token = "my-token"
checkid = "201205050153W2Q4C-0J2HSIRF"
newlabel = "PUSH checking stuff"
fields = {
"checknum": {
"name": "checknum",
"min": 0,
"max": 5
},
"check2": {
"name": "check2.item",
"min": 0,
"max": 0
}
}
args = {"label": newlabel, "fields": fields}
checks.update_check(token, checkid, "PUSH", args)
from nodepingpy import checks
token = "my-token"
checkid = "201205050153W2Q4C-0J2HSIRF"
checks.delete_check(token, checkid)
Mute for 10 minutes
from time import time
from nodepingpy import checks
token = "my-token"
checkid = "201205050153W2Q4C-0J2HSIRF"
ts_later = round((time() + 600) * 1000)
checks.mute_check(token, checkid, ts_later)
You can also set duration to True
or False
to indefinitely
mute or unmute the check.
from nodepingpy import checks
token = "my-token"
checkid = "201205050153W2Q4C-0J2HSIRF"
checks.mute_check(token, True, duration)
Disable all checks on the account. True will disable all checks, but not affect subaccounts. False to re-enable. This will not re-enable checks that were previously disabled using the "enabled" element in a check.
from nodepingpy import checks
token = "my-token"
checks.disable_all(token, True)
There are a few ways to disable checks:
- By type: (PING, HTTP, DNS, etc.)
- By label: the label provided for the check
- By target: the FQDN, IP, URL in the target field
These are matched with regex. Like with disable_all, re-enabling checks will only work with checks that weren't previously disabled by using the 'enabled' element.
In this example, checks with the label including "example.com" will be disabled.
from nodepingpy import checks
token = "my-token"
disabletype = "label"
string = "example.com"
checks.disable_by(token, disabletype, string, True)
To use this module, import it into your project
from nodepingpy import contacts
from nodepingpy import contacts
token = "my-token"
contacts.get_all(token)
NodePing contacts contain your account ID as well as a 5-character value after it, like "201205050153W2Q4C-BKPGH".
from nodepingpy import contacts
token = "my-token"
contactid = "201205050153W2Q4C-BKPGH"
contacts.get_one(token, contactid)
Get contacts by type, such as email, sms, webhook.
from nodepingpy import contacts
token = "my-token"
contacttype = "email"
contacts.get_by_type(token, contacttype)
from nodepingpy import contacts
token = "my-token"
customerid = "201205050153W2Q4C"
name = "Bob Alice"
custrole = "edit"
newaddresses = [{'address': '[email protected]', 'type': 'email'}, {'address': '5551238888', 'type': 'sms'}]
contacts.create(token, customerid, custrole, name, newaddresses)
Updating existing addresses requires getting the current addresses, modifying their
contents, and then PUT them back. To add addresses to the contact, you will use the
newaddresses
key with the additional info.
>>> from nodepingpy import contacts
>>> from pprint import pprint
>>> token = "my-token"
>>> contactid = "201205050153W2Q4C-BKPGH"
>>> result = contacts.get_one(token, contactid)
>>> addresses = result["addresses"]
>>> pprint(addresses)
{'JMMARFHQ': {'accountsupressall': False, 'address': '[email protected]'},
'NMYW1XC1': {'accountsupressall': False, 'address': '[email protected]'},
'P080YGYO': {'accountsuppressall': False, 'address': '321444777'}}
>>> addresses["JMMARFHQ"]["address"] = "[email protected]"
>>> newaddresses = [{'accountsupressall': True, 'address': '[email protected]'}]
>>> contacts.update(token, contactid, {"addresses": addresses, "newaddresses": newaddresses})
To remove a contact method, take the existing contact methods in a contact, remove it from the dictionary of addresses, and then submit the updated contact methods. For example
>>> from nodepingpy import contacts
>>> from pprint import pprint
>>> token = "my-token"
>>> contactid = "201205050153W2Q4C-BKPGH"
>>> result = contacts.get_one(token, contactid)
>>> addresses = result["addresses"]
>>> pprint(addresses)
{'JMMARFHQ': {'accountsupressall': False, 'address': '[email protected]'},
'NMYW1XC1': {'accountsupressall': False, 'address': '[email protected]'},
'P080YGYO': {'accountsuppressall': False, 'address': '321444777'}}
>>> del addresses["JMMARFHQ"]
>>> contacts.update(token, contactid, {"addresses": addresses})
Muting a contact method involves muting not a whole contact, but just one of the contact methods.
In the above example, it could involve muting only the SMS number 321444777 with key P080YGYO
only
in the contact.
from nodepingpy import contacts
token = "my-token"
contactid = "201205050153W2Q4C-BKPGH"
method_id = "P080YGYO"
contact = contacts.get_one(token, contactid)
duration = True # this will mute it forever, or until set back to False
contacts.mute_contact_method(token, contact, method_id, duration)
Compared to the last example, this mutes the entire contact. The contact ID 201205050153W2Q4C-BKPGH
from nodepingpy import contacts
token = "my-token"
contactid = "201205050153W2Q4C-BKPGH"
contact = contacts.get_one(token, contactid)
duration = True # this will mute it forever, or until set back to False
contacts.mute_contact(token, contact, duration)
from nodepingpy import contacts
token = "my-token"
contactid = "201205050153W2Q4C-BKPGH"
contacts.delete_contact(token, contactid)
Reset password for a contact. A new password will be emailed to the contact.
from nodepingpy import contacts
token = "my-token"
contactid = "201205050153W2Q4C-BKPGH"
contacts.reset_password(token, contactid)
To use this module, import it into your project
from nodepingpy import contactgroups
from nodepingpy import contactgroups
token = "my-token"
contactgroups.get_all(token)
from nodepingpy import contactgroups
token = "my-token"
id = "201205050153W2Q4C-G-3QJWG"
contactgroups.get(token, id)
To create a contact group, a list of contact methods are needed. For example above in updating a contact, you would use the address keys, like below, and create a contact group called "sysadmins", for example.
from nodepingpy import contactgroups
token = "my-token"
contactlist = ["JMMARFHQ", "NMYW1XC1", "P080YGYO"]
name = "sysadmins"
contactgroups.create(token, name, contactlist)
Updating an existing contactgroup takes a dictionary as an argument
with keys name
and/or members
as a key, like the arguments in
creating a contactgroup.
from nodepingpy import contactgroups
token = "my-token"
id = "201205050153W2Q4C-G-3QJWG"
args = {"name": "SysAdmin", "members: ["JMMARFHQ", "NMYW1XC1"]}
contactgroups.update(token, id, args)
from nodepingpy import contactgroups
token = "my-token"
id = "201205050153W2Q4C-G-3QJWG"
contactgroups.delete(token, id)
Request diagnotics information from a probe or an AGENT. Dataclasses are available to pass in as an argument.
For example, running an MTR diagnostic:
from nodepingpy import diagnostics
from nodepingpy.nptypes import diagtypes
token = "my-token"
checkid = "201205050153W2Q4C-0J2HSIRF"
args = diagtypes.Mtr(location="tx", target="example.com", count=20)
diagnostics.get(token, checkid, args)
This will run an MTR with a count of 20 from the probe in Texas with example.com as the target.
Get probe and location information
Get all probes
from nodepingpy import information
token = "my-token"
information.get_all_probes(token)
Or a single probe
from nodepingpy import information
token = "my-token"
probe = "tx" # get texas
information.get_probe(token, probe)
Get all locations/regions
from nodepingpy import information
token = "my-token"
information.get_all_locations(token)
Or a single location, like North America (nam)
from nodepingpy import information
token = "my-token"
location = "nam"
information.get_location(token, location)
This module allows you to create, update, get, and delete ad-hoc and scheduled maintenaneces.
Can be imported with
from nodepingpy import maintenance
Get all maintenance schedules
from nodepingpy import maintenance
token = "my-token"
maintenance.get_all(token)
Or one maintenance by ID
from nodepingpy import maintenance
token = "my-token"
maintenance_id = "NZT101"
maintenance.get(token, maintenance_id)
There are two types of maintenance:
- ad-hoc
- scheduled (cron)
maintenancetype dataclasses are available to pass in as args. The below example creates an ad-hoc 30 minute maintenance.
from nodepingpy import maintenance
from nodepingpy.nptypes.maintenancetypes import AdHocCreate
token = "my-token"
duration = 30
checkids = ["201205050153W2Q4C-0J2HSIRF", "201205050153W2Q4C-4RZT8MLN"]
enabled = True
name = "Rebooting the server"
args = AdHocCreate(duration, checkids, enabled, name)
maintenance.create(token, args)
To create a scheduled/cron maintenance
from nodepingpy import maintenance
from nodepingpy.nptypes.maintenancetypes import ScheduledCreate
token = "my-token"
duration = 30
checkids = ["201205050153W2Q4C-0J2HSIRF", "201205050153W2Q4C-4RZT8MLN"]
enabled = True
name = "Rebooting the server"
cron = "30 8 15 * *"
args = ScheduledCreate(duration, checkids, enabled, name, cron)
maintenance.create(token, args)
Updating a maintenance is similar to creating one, except you would supply the maintenance ID in addition to the Scheduled or AdHoc dataclass.
For example, updating a Scheduled maintenance, and say from the previous example you wanted to set the duration to 60 minutes from 30.
from nodepingpy import maintenance
from nodepingpy.nptypes.maintenancetypes import ScheduledUpdate
token = "my-token"
duration = 60
checkids = ["201205050153W2Q4C-0J2HSIRF", "201205050153W2Q4C-4RZT8MLN"]
enabled = True
name = "Rebooting the server"
cron = "30 8 15 * *"
maintenance_id = "NZT101"
args = ScheduledUpdate(duration, checkids, enabled, name, cron)
maintenance.update(token, maintenance_id, args)
Delete any maintenance. You don't have to specify if it is AdHoc or Scheduled.
from nodepingpy import maintenance
token = "my-token"
maintenance_id = "NZT101"
maintenance.delete(token, maintenance_id)
Can be imported with
from nodepingpy import notificationprofiles
Getting all profiles
from nodepingpy import notificationprofiles
token = "my-token"
notificationprofiles.get_all(token)
Getting a single profile
from nodepingpy import notificationprofiles
token = "my-token"
id = "201205050153W2Q4C-P-3QJWG"
notificationprofiles.get(token, id)
Notification profiles combine contact IDs, notification delays, and schedules so you can easily assign notifications to multiple checks if you want the same contacts to receive notifications on the same schedule across checks, and be able to update the profile without having to update any checks.
from nodepingpy import notificationprofiles
token = "my-token"
notifications = [{"A4597":{"delay":0, "schedule":"All"}}, {"Y59XV":{"delay":2, "schedule":"Days"}}]
name = "My Profile"
notificationprofiles.create(token, name, notifications)
Updating a notification profile is the same as creating a new one, only that you provide the existing profile's ID
from nodepingpy import notificationprofiles
token = "my-token"
notifications = [{"A4597":{"delay":0, "schedule":"All"}}, {"Y59XV":{"delay":2, "schedule":"Days"}}]
name = "My New Name"
id = "201205050153W2Q4C-P-3QJWG"
notificationprofiles.update(token, id, name, notifications)
Delete a profile
from nodepingpy import notificationprofiles
token = "my-token"
id = "201205050153W2Q4C-P-3QJWG"
notificationprofiles.delete(token, id)
Get notifications for a check or the account.
Can be imported with
from nodepingpy import notifications
Here are some examples:
Get the last 100 notifications
from nodepingpy import notifications
token = "my-token"
args = notifications.Notification(limit=100)
notifications.get(token, args)
Get the last 200 notifications, including subaccounts
from nodepingpy import notifications
token = "my-token"
args = notifications.Notification(limit=200, subaccounts=True)
notifications.get(token, args)
Get notifications in the last 24 hours for a specific check
from nodepingpy import notifications
token = "my-token"
args = notifications.Notification("201205050153W2Q4C-0J2HSIRF", 24)
notifications.get(token, args)
Can be imported with
from nodepingpy import results
This example gets up to the last 300 results, and starting at 2024-03-10
from nodepingpy import results
from nodepingpy.nptypes.resulttypes import Results
token = "my-token"
id = "201205050153W2Q4C-0J2HSIRF"
args = Results(limit=300, start="YYYY-MM-DD")
results.get(token, id, args)
This same function is used to also get resulttypes.Uptime
and resulttypes.Events
.
Get current events happening for checks
from nodepingpy import results
token = "my-token"
results.get_current(token)
Retrieves hourly summary information about the results for a specific check.
from nodepingpy import results
token = "my-token"
id = "201205050153W2Q4C-0J2HSIRF"
results.get_summary(token, id)
Can be imported with
from nodepingpy import schedules
Get all schedules
from nodepingpy import schedules
token = "my-token"
schedules.get_all(token)
Get one schedule. These are given names, and are not gotten by an ID
from nodepingpy import schedules
token = "my-token"
schedule_name = "Day"
schedules.get(token, schedule_name)
To create/update a schedule, a dictionary needs to be provided with start/stop information for each day of the week.
from nodepingpy import schedules
token = "my-token"
schedule_name = "WorkDay"
schedule = {'data': {'friday': {'disabled': True},
'monday': {'allday': True},
'saturday': {'exclude': False, 'time1': '6:00', 'time2': '18:00'},
'sunday': {'exclude': False, 'time1': '6:00', 'time2': '18:00'},
'thursday': {'exclude': False, 'time1': '6:00', 'time2': '18:00'},
'tuesday': {'exclude': False, 'time1': '6:00', 'time2': '18:00'},
'wednesday': {'exclude': False, 'time1': '6:00', 'time2': '18:00'}}}
schedules.create(token, schedule_name, schedule)
from nodepingpy import schedules
token = "my-token"
schedule_name = "Day"
schedules.delete(token, schedule_name)