Get started

Incidents and your service desk (Preview)

A new name. The same foundation. KratosForge is the upcoming name for Fabric Desktop by KratosBI. These guides preserve the app’s current labels and paths.

Fabric Desktop by KratosBI finds problems by itself: a failed run, a late table, a run waiting on a decision, a missed reliability objective, an agent that stopped reporting, an environment it couldn't read. Each problem becomes one incident that everyone who can read the environment sees. This page covers what an incident holds, how priorities and SLAs work, how people report problems the app can't see, and where this is going. Day-to-day use of the list is in the user guide; agents and their Teams routes are in the agent guide.

What an incident holds#

Field What it is
Number INC-PROD-0042: counted per environment and never changes. Incidents opened before numbers existed get one, oldest first, the next time the list is written.
Priority P1 to P4 (below).
Source Detected (the app or an agent found it) or Reported (a person reported it).
State Open, Acknowledged or Resolved, with how it was resolved: Recovered (the problem cleared), Cleared (the environment could be read again) or Resolved (by a person, with a note).
Timeline Every change with who made it and when: opened, seen again, priority changed, acknowledged, assigned, notes, escalated, recovered, resolved. The first entry and the newest 99 are kept.
Owner, team, criticality From the workload's assignment when it opened; the owner can be changed.
Evidence The run, table or agent it's about, and a likely cause for failed runs.

Each environment keeps its incidents in one file, incidents/incidents.json, in its LH_Meta (open ones plus the last 200 resolved). Every change is a conditional write, so two agents or PCs that see the same failure at the same moment open one incident, and two people can't both take the same number. Agents and the app keep working on this file as they always have.

History in the central lakehouse. Every incident and every timeline entry is also copied to the central Fabric Desktop lakehouse (FabricDesktop_Central), where it's kept for good, including the incidents and entries the live list drops. Two tables hold it: fdinc_incident_event, one row per timeline entry, and fdinc_incident_snapshot, one row per state of an incident (state, priority, owner, and when it opened, was acknowledged and was resolved). Rows are only ever added, and the same change copied from two PCs is stored once. Passwords, keys and tokens in titles and notes are removed before copying. A copy needs the PC to be connected to the central lakehouse with write access (Settings > Optimize lakehouses), and IT can turn the central lakehouse off with allow_optimize_lakehouse. Nothing starts a copy yet: the incident screens (stage 2) will copy changes when they open and show history. Until a copy runs, they wait in the live list until the next copy, and only the latest state of an incident at that moment becomes a snapshot.

Priorities#

Priority Means Detected incidents that get it
P1 Many people blocked, no workaround A critical workload's run failing 3 times or more
P2 A team blocked, or due soon Any other problem with a critical workload, or any problem with a high one
P3 Wrong or slow, with a workaround Standard workloads, and anything without a criticality (an agent going offline, say)
P4 Minor, or a question Low workloads, anything in Dev, and "can't evaluate"

A detected incident follows these rules as it changes (a critical failure becomes P1 on its third failed run). Once a person sets the priority, with a reason, the rules stop changing it. A reported incident keeps the priority the reporter chose until someone changes it.

SLAs#

Each priority has a target time to acknowledge and a target time to resolve, counted from when the incident opened, all day.

Priority Acknowledge within Resolve within
P1 15 minutes 4 hours
P2 30 minutes 4 hours
P3 4 hours 2 days
P4 No target No target

Each clock is due, at risk (less than a quarter of the time left), breached (still open and late), met, or missed (done, but late). The targets are applied when incidents are read and aren't stored on them, so changing them changes every open incident's due times at once.

Your own targets. IT sets them with the incident_sla key in policy.json (push settings to everyone), in minutes, with 0 for no target. Priorities you leave out keep the defaults above:

{
  "incident_sla": {
    "P1": {"acknowledge_minutes": 10, "resolve_minutes": 120},
    "P4": {"acknowledge_minutes": 0, "resolve_minutes": 0}
  }
}

A value that isn't a whole number of minutes is ignored and named in Settings > Help and about, and the default applies for that value.

Reporting a problem the app can't see#

Wrong numbers in a report, a dashboard nobody can open, a source a team says is missing: a person reports it with what's wrong, details, what it affects and how bad it is. When it names a workload, the workload's team, technical owner and criticality come with it. A reported incident never closes by itself: only a person resolves it, with a note.

Report a problem in the account menu is different: it reports a problem with the Fabric Desktop app itself.

Where incidents are kept#

There will be two choices, set by IT:

  • Fabric Desktop (default): incidents are kept in the central Fabric Desktop lakehouse with numbers, priorities, SLAs and full history, for teams without a service desk.
  • Your service desk: Fabric Desktop is pointed at ServiceNow, Jira Service Management or another tool. A problem it finds opens a ticket there, with its number and link kept here so the same problem never opens two tickets, and recovery adds a note to the ticket. Monitor > Operations > Incidents shows your service desk's own page inside the app, signed in through its single sign-on, the way Fabric's own pages are shown today.

Fabric Desktop doesn't try to be a full service desk: change management, problem records, approvals and the service catalog stay in your service desk.

What's coming#

Stage What it adds State
1 Numbers, priorities, SLA targets, the timeline and reported incidents, in the engine Released (no screens yet)
1b Every incident change copied to the central Fabric Desktop lakehouse, kept for good This release
2 Screens: the list with number, priority and SLA, the incident page with its timeline and what to do, Report an incident Planned
3 Incidents and requests that need you in the bell; Teams or email delivery Planned
4 Full history and reports: time to acknowledge, time to resolve, SLAs met Planned
5 Your service desk: ServiceNow, Jira Service Management or another tool Planned

Each stage is tested without Fabric or a service desk. Nothing here has run against a live tenant or a real service desk yet, which is why it's Preview.

For developers#

The engine is sidecar/fabric_desktop/workloads/incidents.py (the document and its conditional writes), workloads/sla.py (targets and clocks) and workloads/incident_history.py (the fdinc_ tables in the central lakehouse). The app's calls are in incident_service.py and incident_desk.py:

Call What it does
incidents_board(env, include_resolved) The list with each incident's priority and SLA state, and counts: open, mine, unassigned, at risk, breached
incident_report(env, title, text, priority, workload, name) Reports a problem
incident_set_priority(env, id, priority, note) Sets the priority; the note is required
incident_sla_policy() The targets in effect, where they come from, and what in the policy was ignored
incidents_history_sync(approve) Copies every environment's incidents and timelines to the central lakehouse, only what this PC hasn't copied before. When the incident tables need setting up it returns needs_confirm with what it would do, and sets them up only when called again with approve after the person confirms
incidents_history(env, limit) Each incident's latest state as the central lakehouse has it, newest first, including ones the live list no longer keeps

Need a hand?

Find a fix in troubleshooting, or share a reproducible issue with the community.

Get support ↗Improve this guide on GitHub ↗

Search documentation

Start typing to search all 105 guides.

Search runs in your browser esc to close