julioserpone/sla-manager

A PHP package for calculating & tracking the Service Level Agreement completion timings

v1.0.2 2022-10-20 20:46 UTC

README

Logo for SLA Timer

Latest Version on Packagist Total Downloads GitHub Actions

A PHP package to calculate and track Service Level Agreement completion times.

Inspired from the sla-timer pack.

Features

  • 🕚 Easy schedule building
  • ‼️ Defined breaches
  • 🏝 Holiday & Paused Durations
Hi, I'm Julio & I'm currently looking for a Laravel job. Please reach out to me via twitter, or click this link.

Installation

You can install the sla-manager via composer:

composer require julioserpone/sla-manager

Getting Started

The best place to get started with SLA timer is to head over to the ✨ SLA Timer Getting Started Documentation.

Example Usage

To create a new SLA Timer, we can start by defining our SLA Schedule:

require 'vendor/autoload.php';

use JulioSerpone\SlaManager\SLA;
use JulioSerpone\SlaManager\SLABreach;
use JulioSerpone\SlaManager\SLASchedule;

/**
 * Create a new SLA between 9am and 5:30pm weekdays
 */
$sla = SLA::fromSchedule(
    SLASchedule::create()->from('09:00:00')->to('17:30:00')
        ->onWeekdays()
);

We can define out breaches by calling the addBreaches method on our SLA

/**
 * Define two breaches, one at 24 hours, and the next at 100 hours
 */
$sla->addBreaches([
    new SLABreach('First Response', '24h'),
    new SLABreach('Resolution', '100h'),
]);

Now that our SLA Schedule and SLA Breaches are defined, all we have to do is give our subject "creation time" – or our SLA start time – to either the status method, or the duration method.

// Given the time now is 14:00:00 29-07-2022
$status = $sla->status('05:35:40 25-07-2022'); // SLAStatus
$status->breaches; // [SLABreach] [0: { First Response } ]

$duration = $sla->duration('05:35:40 25-07-2022'); // CarbonInterval
$duration->forHumans(); // 1 day 15 hours

Testing

composer test

Contributing

Please see CONTRIBUTING for details.

Credits

License

The MIT License (MIT). Please see License File for more information.