-
Notifications
You must be signed in to change notification settings - Fork 15
Service Uptime and History
Every service on the status board carries a history: a day-by-day strip, an uptime percentage, and the outages behind it. This page explains how to read it, and β more importantly β how to record an incident so that the history comes out right.
π‘ The one thing to take away. The history is not a separate log you maintain. It is worked out from your incidents. So the accuracy of every figure depends on updating an incident as things change, and that is what most of this page is about.
Open History and uptime on any service card:
- An uptime percentage for the last 7, 30, 90 or 365 days
- A day-by-day strip β one cell per day, so a bad week is visible at a glance
- Every period the service spent at a given impact level, with how long it lasted
Because it is derived from incidents rather than logged separately, it already covers outages that happened before this feature existed. A service you have been tracking for a year has a year of history the moment you upgrade.
| Colour | Means |
|---|---|
| Green | No incident touched the service that day |
| Red | An incident that counts against uptime. The colour is the impact level β hover to see which |
| Grey | An incident touched it, but at a level that does not count β planned maintenance, typically. Hover to see the actual level |
β οΈ A service showing far worse uptime than you expect is usually an incident nobody resolved. An open incident counts until it is closed. Check the incident list before assuming the figure is wrong.
Each impact level decides for itself, on Settings β Impact levels:
| Level | Counts by default |
|---|---|
| Major Outage | β Yes |
| Partial Outage | β Yes |
| Degraded | β Yes |
| Maintenance | β No |
| Operational | β No |
| No Disruption | β No |
Planned maintenance is excluded deliberately: counting it makes a well-run service look worse than a neglected one. Any level you add yourself counts until you say otherwise, which is the safe way round.
The measurement period and whether customers see the figures live on Settings β Uptime. Portal visibility is off to begin with β a percentage is a stronger statement than a status dot, and once customers can see it, it reads as a published figure.
Each time you save an incident, FreeITSM records a snapshot of which services were at which level, timestamped. A service counts as down from the moment a snapshot puts it at a counting level, until the next snapshot says otherwise.
So there are three moments that matter:
- Raise the incident with every affected service and its impact level. That is the start.
- Save it again each time something changes β a service degrades, improves, or comes back. Change that service's level, or take it off the incident once it is fully restored.
- Resolve the incident when everything is back. That is the end for anything still listed.
That is the whole technique. The rest of this page is one worked example of it.
This is a real scenario run through FreeITSM, with the figures it actually produced.
The situation. Power is lost to a rack row on Sunday morning. Email, VPN, File Services and Printing all go down. They come back at different times over the next three days.
Sunday 09:00 β raise the incident
Create an incident, status Investigating, and add all four services at Major Outage:
"Power lost to rack row B. All four services affected."
Sunday 18:00 β printing comes back
Open the incident, set status Identified, and remove Printing from the affected services. Leave the other three where they are.
"Generator online. Printing restored."
Monday 12:00 β the VPN is usable but slow
Change VPN from Major Outage to Degraded. Leave Email and File Services on Major Outage.
"VPN back on reduced capacity. File services still rebuilding."
Monday 20:00 β the VPN is fully back
Remove VPN from the incident.
"VPN at full capacity."
Tuesday 10:00 β file services restored
Remove File Services. Only Email is still listed.
"File services restored from replica."
Tuesday 15:00 β everything is back
Set the status to Resolved.
"Mail queues drained. All services restored."
Six saves, one incident β and each service gets its own accurate history:
| Service | Down from | Until | Recorded as |
|---|---|---|---|
| Printing | Sun 09:00 | Sun 18:00 | Major Outage β 9h |
| VPN | Sun 09:00 | Mon 12:00 | Major Outage β 1d 3h |
| Mon 12:00 | Mon 20:00 | Degraded β 8h | |
| File Services | Sun 09:00 | Tue 10:00 | Major Outage β 2d 1h |
| Sun 09:00 | Tue 15:00 | Major Outage β 2d 6h |
Over a 7-day window that gives:
| Service | Downtime | Uptime |
|---|---|---|
| Printing | 9h | 94.64% |
| VPN | 35h | 79.17% |
| File Services | 49h | 70.83% |
| 54h | 67.86% |
Note what the VPN row shows: two periods, not one. A day and three hours completely down, then eight hours degraded. Both count against uptime, but the history records what actually happened rather than flattening it to a single level.
The tempting shortcut is to raise one incident, leave it alone for three days, and resolve it at the end. That produces:
All four services: down for 3 days. Uptime 57% each.
Which is wrong for three of the four. Printing was fine after nine hours. Updating the incident as things changed is what turns one blunt figure into four accurate ones β and it costs five saves.
You do not have to remove services one at a time. But if you do, each one stops counting at that moment rather than when the incident is finally resolved. That is the difference between "the file server was down for two days" and "everything was down for three".
Every one of those saves also becomes an entry on the incident, under Updates in the incident list β the time, the status, who made the change, the comment, and which services were at which level at that point.
That is the running commentary a status page normally has, and it is the same data the per-service history is built from. Writing a sentence in the comment box each time you save is what turns a set of timestamps into something a manager can read afterwards.
- Incidents raised before this feature have no update thread. They still appear in the history, measured from when they were raised to when they were resolved β just without the detail in between.
- Overlapping incidents are not double-counted. Two incidents taking the same service down at once is one outage.
- An outage that started before the period you are viewing still counts for the part that falls inside it.
- Removing a service from an incident does not delete anything. The period it was down is already recorded.
- Service Status β the module as a whole
- Service uptime and history β Developer Guide β how it works underneath
- Mobile-friendly Service Status
FreeITSM β an open-source IT Service Management platform Β· github.com/edmozley/freeitsm Β· MIT licence
- Installation
- β° Scheduled tasks (cron jobs)
- Architecture
- AI Providers
- Internationalisation (i18n)
- Timezones & Time Handling
- Theming & Dark Mode
- β¨οΈ Command palette (βK)
- π Searching inside tickets
- π Attached documents
- MobileβFriendly
-
Security
- Layer 1 β which modules you can enter
- β³ π§© Module Access Control
- β³ π οΈ Module Access β Developer Guide
- Layer 2 β what you can administer
- β³ π Roles & Permissions
- β³ π οΈ Roles β Developer Guide
- β³ π€ Why capabilities are constants
- Layer 3 β the System module
- β³ π Admin Access Control
- Hardening
- β³ π Security review response 2026-08
- β³ π‘οΈ Security hardening 2026-08
- β³ π οΈ Security hardening 2026-08 β Developer Guide
- β³ π‘οΈ Round three β plain English
- β³ π οΈ Round three β Developer Guide
- Single Sign-On (SSO)
- ποΈ LDAP & Active Directory
- Browser Extension
- API Reference
-
π REST API β how it works
- β³ π« REST API: Tickets
- β³ π» REST API: Assets
- β³ π΄ REST API: Problems
- β³ π REST API: Changes
- β³ π REST API: Knowledge
- β³ β REST API: Tasks
- β³ ποΈ REST API: CMDB
- β³ π REST API: Contracts
- β³ ποΈ REST API: Calendar
- β³ πΏ REST API: Software
- β³ π¦ REST API: Service Status
- β³ βοΈ REST API: Morning Checks
- β³ π REST API: Forms
- β³ βοΈ REST API: Workflow
- β³ πΊοΈ REST API: Network Mapper
- β³ π§ Using the API docs page
- β³ π OpenAPI specification
- β³ β OpenAPI: kept correct
- β³ π οΈ Maintaining the catalogue
- Watchtower
-
Tickets
- β³ Mailbox Authentication
- β³ π€ Email send log
- β³ Basic IMAP mailboxes
- β³ Email rendering & images
- β³ SLA Management
- β³ WhatsApp channel
- β³ π¬ Web chat channel
- β³ π£ Slack channel
- β³ π Linking tickets
- β³ ποΈ Canned responses
- β³ βοΈ Limiting replies to particular senders
- β³ βοΈ Email signatures
- β³ π The public web address
- β³ π Raising a ticket for someone else
- β³ π Merging tickets
- β³ β Splitting tickets
- β³ β Selecting several tickets
- β³ π οΈ Snoozing tickets β Developer Guide
- β³ π₯ Collision detection
- β³ β±οΈ Time tracking
- Problem Management
- Tasks
- Assets
- Knowledge
- Change Management
- Calendar
- Morning Checks
- Reporting
- Software
- Forms
- Contracts
- Service Status
- π Notifications
- π¨ War Room
- Self-Service Portal
- LMS
- Process Mapper
- CMDB
- Network Mapper
- Workflows
- Issue trackers (Jira, Azure DevOps)
- System
-
Overview
- β³ π Progress tracker
- β³ Concepts & vocabulary
- β³ Email routing & mailboxes
- β³ Settings: global vs per-company
- β³ Users & self-service
- β³ Staff cross-company access
- β³ Worked examples
- β³ Pitfalls & gotchas
- β³ Scope: what it's for
- β³ π οΈ Developer Guide (make a module multi-company)
- β³ ποΈ Case study: CMDB (a linked graph)
- β³ π§ͺ Test harness (prove it's isolated)