8 unstable releases (3 breaking)

0.4.0 Nov 4, 2022
0.3.2 Oct 30, 2022
0.2.1 Oct 1, 2022
0.2.0 Sep 25, 2022
0.1.0-rc1 Aug 22, 2022

#1369 in Web programming

30 downloads per month

Apache-2.0

1MB
19K SLoC

crates.io license docs GitHub workflow

Praiya: an async PagerDuty API for Rust

Praiya leverages the official PagerDuty OpenAPI swagger specification to generate models and mock server stubs, in order to closely match the real-world PagerDuty API behaviour. Praiya's async paradigm runs on Hyper and Tokio, tests are run against a Prism server that matches the OpenAPI specification responses.

Install

Add the following to your Cargo.toml file.

[dependencies]
praiya = "*"

API

Documentation

API docs

Praiya has currently implemented the following API endpoints:

  • abilities
  • add_ons
  • analytics
  • audit
  • business_services
  • escalation_policies
  • extension_schemas
  • extensions
  • incidents
  • log_entries
  • maintenance_windows
  • notifications
  • on_calls
  • priorities
  • response_plays
  • rulesets
  • schedules
  • service_dependencies
  • services
  • slack_connections
  • tags
  • teams
  • users
  • vendors

Usage

Connecting to the PagerDuty API server

A new Praiya client takes the PagerDuty API token and will build an SSL context:

praiya::Praiya::new("PAGERDUTY_TOKEN");

Examples

Listing incidents

To list triggered and acknowledged incidents in your organisation:

use praiya::ParamsBuilder;

use futures_util::TryStreamExt;

let pagerduty = praiya::Praiya::new("PAGERDUTY_TOKEN");

let mut opts_builder = praiya::endpoints::incidents::ListIncidentsParamsBuilder::new();
opts_builder.statuses(vec!["triggered", "acknowledged"]);
let opts = opts_builder.build();

async move {
    let incidents: Vec<praiya::models::Incident> = pagerduty
        .incidents("from@example.com")
        .list_incidents(opts)
        .try_collect()
        .await
        .expect("Unable to list PagerDuty incidents");
};

Development

Contributions are welcome, please observe the following advice.

Building the stubs

Serialization stubs are generated through the Swagger library. To generate these files, use the following:

mvn -D org.slf4j.simpleLogger.defaultLogLevel=debug compiler:compile generate-resources

Mock test server

The mock servers run with the Prism project against a forked branch of the official PagerDuty API schema, in order to maintain stability of the Praiya CI pipelines.

Mock servers are started with Docker Compose:

docker-compose up -d

or alternatively use the npm library.

npm install -g @stoplight/prism-cli
# for example
prism mock https://raw.githubusercontent.com/fussybeaver/pagerduty-api-schema/praiya-master/reference/REST/openapiv3.json

Tests

In order to run tests, point the client to the appropriate mock server:

For the slack API:

env PAGERDUTY_API_ENDPOINT=http://127.0.0.1:8080 RUST_LOG=praiya=debug cargo test slack

For the default API's:

env PAGERDUTY_API_ENDPOINT=http://127.0.0.1:8081 RUST_LOG=praiya=debug cargo test incidents
env PAGERDUTY_API_ENDPOINT=http://127.0.0.1:8081 RUST_LOG=praiya=debug cargo test services
...

Documentation

This README is generated with cargo-readme

cargo readme --no-title > README.md

License

This software is licensed under the liberal Apache License 2.0

License: Apache-2.0

Dependencies

~17–29MB
~508K SLoC