Skip to content

jmeggitt/ripeatlas-rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RIPE Atlas API for Rust [WIP]

This library provides serde structures for RIPE Atlas measurements.

Features

  • chrono: When enabled, timestamps will instead be deserialized directly to DateTime<Utc> from the chrono crate instead of integer timestamps.
  • strict: This feature enables the serde attribute deny_unknown_fields on all measurement structs. This is intended to help combat documentation inconsistencies by producing an error on previously unknown fields being provided as part of the input. However, this is mostly intended for debugging consistency with the documentation and not it is not recommended for regular use as it may produce errors on otherwise valid inputs.

Documentation Inconsistencies on Measurement Results

One issue that has been challenging to address is that the official documentation does not fully address all the possible responses. The main issue is that the probe measurement code is all written in C and has no idea what JSON is. Instead, as data is collected it is written to an output stream. This does wonders for efficiency, but also makes it extremely difficult to enforce adherence to a specific schema and determine all possible outputs without analyzing the probe code.

I have collected a list of documentation inconsistencies here: https://gist.github.com/jmeggitt/08375285b40e3393da49a261b6b65b52

My approach for this library has been to start by implementing structures and deserialization using [serde] based on the latest firmware version in the official documentation. To test that this library correctly conforms with the measurement result formats, I test it against actual probe data. The data used in these tests is collected from hourly data dumps provides by RIPE Atlas.

Goals and API Support

  • Measurement Result Types
    • Ping
    • Traceroute
    • DNS Lookup
    • HTTP
    • NTP
    • TLS (SSL) GET Cert
    • Wifi

      Note: This measurement type was disconnected in firmware release 5000 and implementation is not planned unless I receive a request to support this type of measurement

  • API Support
    • anchor-measrements
      • GET /api/v2/anchor-measurements/{pk}/
      • GET /api/v2/anchor-measurements/ [Medium priority]
    • anchors
      • GET /api/v2/anchors/{pk}/
      • GET /api/v2/anchors/ [Medium priority]
    • credits
      • GET /api/v2/credits/ [Low priority]
      • GET /api/v2/credits/income-items/
      • GET /api/v2/credits/expense-items/
      • POST /api/v2/credits/transfers/
      • GET /api/v2/credits/voucher/{code}
      • POST /api/v2/credits/voucher/redeem/
      • GET /api/v2/credits/standing-order/
      • POST /api/v2/credits/standing-order/
      • GET /api/v2/credits/standing-order/{pk}/
      • PATCH /api/v2/credits/standing-order/{pk}/
      • DELETE /api/v2/credits/standing-order/{pk}/
      • GET /api/v2/credits/bill-me/
      • POST /api/v2/credits/bill-me/
      • GET /api/v2/credits/bill-me/{pk}/
      • PATCH /api/v2/credits/bill-me/{pk}/
      • DELETE /api/v2/credits/bill-me/{pk}/
      • GET /api/v2/credits/transactions/
      • GET /api/v2/credits/members/
      • POST /api/v2/credits/members/claim/
    • keys
      • GET /api/v2/keys/permissions/
      • GET /api/v2/keys/permissions/{permission}/targets/
      • GET /api/v2/keys/{uuid}/
      • PUT /api/v2/keys/{uuid}/
      • DELETE /api/v2/keys/{uuid}/
      • GET /api/v2/keys/
      • POST /api/v2/keys/
    • measrements
      • GET /api/v2/measurements/ [High priority]
      • POST /api/v2/measurements/ [Medium priority]
      • GET /api/v2/measurements/{pk}/ [Medium priority]
      • PATCH /api/v2/measurements/{pk}/
      • DELETE /api/v2/measurements/{pk}/
      • GET /api/v2/measurements/{pk}/results/ [High priority]
      • GET /api/v2/measurements/{pk}/latest/ [High priority]
      • GET /api/v2/measurements/my/ [Medium priority]
      • GET /api/v2/measurements/ping/
      • GET /api/v2/measurements/traceroute/
      • GET /api/v2/measurements/sslcert/
      • GET /api/v2/measurements/ntp/
      • GET /api/v2/measurements/wifi/
      • GET /api/v2/measurements/http/
      • GET /api/v2/measurements/dns/
      • GET /api/v2/measurements/groups/
      • GET /api/v2/measurements/groups/{pk}/
      • DELETE /api/v2/measurements/groups/{pk}/
      • GET /api/v2/measurements/tags/
      • GET /api/v2/measurements/tags/{tag}/results/
      • GET /api/v2/measurements/my-tags/
      • GET /api/v2/measurements/my-tags/{tag}/
      • POST /api/v2/measurements/my-tags/{tag}/stop/
      • GET /api/v2/measurements/{pk}/tags/
      • POST /api/v2/measurements/{pk}/tags/
      • GET /api/v2/measurements/{pk}/tags/{tag}/
      • DELETE /api/v2/measurements/{pk}/tags/{tag}/
      • GET /api/v2/measurements/{msm_id}/participation-requests/
      • POST /api/v2/measurements/{msm_id}/participation-requests/
      • GET /api/v2/measurements/{msm_id}/participation-requests/{source_id}/
      • GET /api/v2/measurements/{pk}/private/
    • participation-requests
      • GET /api/v2/participation-requests/{source_id}/ [Medium priority]
    • probes
      • GET /api/v2/probes/ [High priority]
      • GET /api/v2/probes/{pk}/ [Medium priority]
      • PUT /api/v2/probes/{pk}/ [Medium priority]
      • PATCH /api/v2/probes/{pk}/
      • GET /api/v2/probes/{prb_id}/measurements/ [Medium priority]
      • GET /api/v2/probes/archive/
      • GET /api/v2/probes/rankings/
      • GET /api/v2/probes/tags/
      • GET /api/v2/probes/tags/{slug}/

About

A library for interfacing with the RIPE Atlas API in Rust

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages