github OneUptime/oneuptime 14.0.106

latest release: build-number-9495
one hour ago

233 changes since 14.0.105: 80 new or improved features, 52 bug fixes, 1 performance improvement, 7 documentation updates and 93 maintenance changes. The busiest areas: Audit Logs, Incidents and Translations.

✨ New and improved

  • Audit Logs
    • Every change people make is recorded, workflow saves and Queues included (#6245)
    • Every resource has an Audit Logs page, network devices, forms, cloud, exceptions and data included (#6275)
    • The audit log export can send what changed in a workflow's steps and in JSON, as record version 2 (#6292)
    • Exceptions, runbook runs, templates and custom domains are named in the project-wide audit log, never with a secret (#6311)
    • Send the audit log export to syslog over UDP (#6392) (#6405)
  • Rum
    • User Flows filtered to one user shows the map and its numbers first, then their journeys (#6267)
    • An application nobody is using shows No recent traffic in grey, not a red Disconnected (#6268)
    • Empty Exceptions and Logs say why, with a setup check per signal (#6372)
    • Define frustration signals per RUM application (#6443) (#6505)
    • Product analytics - Users, Sessions and person pages (#6539)
  • Slo
    • Add a Slow leak burn rate rule (10% of the budget over 3 days) to every new SLO, and Add recommended rules for existing SLOs (#6309)
    • Error budget policies - tiers of budget left, what the team does in each, and alerts or incidents when an SLO enters one (#6332)
    • Add the recommended burn rate rules to many SLOs at once from the SLO list (#6357)
    • A deploy gate - error budget policy tiers can freeze deployments, and CI/CD checks the SLO's deploymentsAllowed before it releases (#6376)
  • Telemetry
    • Resize the filters sidebar on Logs, Metrics, Traces and Exceptions by dragging its edge (#6204)
    • See how much telemetry each project and service sends on every install, with billing on or off (#6354)
    • Daily ingestion budgets and per-second rate limits per project and per ingestion key (#6385)
    • Scrub rules mask the text inside list and nested values on spans and logs (#6397) (#6507)
  • Ask AI
    • A workflow change written from an older read names what it would undo, before you approve it (#6312)
    • A code commit or pull request written from an older read of a file names that file before you approve it (#6329)
    • A code commit or pull request of a file Ask AI read only part of says so before you approve it (#6363)
  • Incidents
    • Investigate metrics right on an incident or alert: ranges around its start, metrics you can change, its moments on the charts (#6248)
    • An incident owner rule's own page is read-only for members outside the teams that own it (#6299)
    • Logs, traces and exceptions cards pick a time range around the incident, and the Root Cause page investigates its metrics (#6303)
  • Monitors
    • A metric monitor's overview charts the metrics it checks and the values it alerts at, and so do its incidents' and alerts' charts (#6263)
    • A Metrics monitor limited to some services charts those services only (#6279)
    • Monitoring off resolves what auto-resolve would have, leaves Not Operational, and turns for a whole group (#6400, #6401) (#6416)
  • Network
    • A Security Events page on every network device, with the events read from its own syslog (#6217)
    • A Discovered Devices list to add many devices to monitoring and hide or show them on the map at once (#6380)
    • Remove discovered devices nothing has seen for 30 days, with a project setting (#6506)
  • On-Call
    • Each person's pages in their own language, and a design for the rest of the larger i18n block (#6235)
    • Page people as observers, and run incident rules again when severity or labels change (#6242)
    • Rules can belong to teams, so only those teams and project admins change them (#6259)
  • Queues
    • A Topology map of how messages flow between your services and queues (#6260)
    • Show a queue's broker metrics without spans, and say which arrive and why (#6362)
    • Service Bus and Event Hubs metrics per queue through the Azure cloud connection (#6415)
  • Workspace
    • A public note sent from Slack, Teams or Mattermost that waits for approval says so, and who it waits for (#6288)
    • Approvers can approve or reject a waiting public note from Slack, Microsoft Teams and Mattermost (#6318)
    • Once a public note is decided, every approver's Slack, Microsoft Teams and Mattermost message says what happened (#6352)
  • AI
    • Two people approve a riskier fix where the project asks for it (#6226)
    • The Remediation step says why a round found no fix, and Try again for a round that stopped (#6436, #6487) (#6504)
  • Cloud Streaming
    • A stream's App Runner, Elastic Beanstalk and ECS logs land on their App Platforms environment, and a resource's Logs page is reviewed with real streamed rows (#6163)
    • Azure metrics and logs through Event Hubs, Google Cloud logs through Pub/Sub (#6175)
  • Episodes
    • Grouping rules can wait for several incidents before opening an episode (#6196)
    • An episode's Root Cause page shows the metrics behind it, as an incident's and an alert's do (#6336)
  • Status Pages
    • Public notes can wait for approval before they are published (#6252)
    • Add several monitor groups to a status page at once (#6566)
  • Workflows
    • Undo, Redo and a Version history in the workflow builder (#6256)
    • Each change Ask AI makes is a version of its own in the version history, saying it was made for you (#6278)
  • AI / LLM: A setup check that says why Conversations and Calls are empty, counters counted right, Azure OpenAI and OpenAI calls recognized (#6340)
  • Alerts: An alert's Root Cause page shows the metrics behind it, as an incident's does (#6319)
  • Cloud: ACM certificate expiry and RDS connections recommended monitors, and the Cloud page's recommended monitors (#6224)
  • Cloud AI agents: A pull request to the code that declares a resource, every account of an AWS Organization, App Platforms in the catalog (#6186)
  • Cloud costs: AWS costs per resource, commitment coverage and use, costs by environment, app and tag, and unusual days on the chart (#6197)
  • Cloud, Security: #6149 follow-ups - a case's Story and Impact in every language, health descriptions in the reader's words, right-to-left labels and headings, the Cloud Account chip in the docs (#6220)
  • Code: OneUptime AI reads the code of Git repositories on Azure DevOps (#6213)
  • Code tasks: Live status on an insight's Fix task, automatic retries, and a better Tasks list (#6439, #6442) (#6468)
  • Data Observability: An Overview that says what is wrong now, who owns it, and what to do next (#6537)
  • Email: Send email through Amazon SES, SendGrid, Mailgun, Postmark or Resend (#6176)
  • LLM: Connect Cursor with a team Admin API key - usage, cost and active members by person (#6391)
  • Mobile App: Observer pages get I've seen it under the push and FYI (observer) in the app (#6255)
  • Network Traffic: Open on Meraki when it reports, list every network, link a router to its Meraki appliance (#5762) (#6335)
  • Onboarding: Every product explains what it does, on its first page and behind How it works (#6527)
  • Public Notes: When the approval steps or a team's members change, waiting public notes ask their new approvers, once each (#6366)
  • RUM setup check: Say when telemetry was refused, from refusal counts per ingestion key (#6378) (#6423)
  • Runners: The code agent reads, edits and searches any file of a real repository (#6441) (#6512)
  • Streamed Azure metrics: The reads keep what a diagnostic setting cannot send, and a namespace counts each message once (#6409) (#6469)
  • Translations: The translation backlog, more (#6028): first-met areas in every language, help lines read as written, phones and hints (#6215)
  • Cloud follow-ups (#5300), part 2: recommended monitors for cloud resources, accounts and apps; maintenance that holds cloud resources (#6150)
  • Tables, more: rows fitted from the first frame, German and Russian lists that fit, default columns per project, plainer lock notes (#6025) (#6168)
  • Status page subscribers in their own language, next: the uptime report, custom template values in the page's language, and a Language field on the Dashboard (#6173)
  • Cloud agent follow-ups (#5715): fix buttons only for people who may act, Impact on the folded investigation, chips that keep their punctuation, AI Insights in every language with an offline suite (#6181)
  • Cloud AI agent on Azure: an identity that reads and a write identity for changes, and what running the agent elsewhere needs on each cloud (#6190)
  • Merge release 14.0.105's version bump into main (#6205)
  • Evaluation details on incidents and alerts: what the check found, redacted, with a switch to keep no response content (#6339)
  • AI conversations and call details read prompts and answers sent as GenAI log events (#6393)
  • Monitor logs and root causes use the same redaction as evaluation details (#6341) (#6404)
  • AI runs have no artificial limits by default; limits per run are opt-in (#6440) (#6463)
  • AI runs that fail say why and offer Try again; retries wait and back off; the activity list gets times, attempts and folded repeats (#6437, #6438) (#6464)
  • Arabic, part 1: right-to-left Arabic across the product, fully translated outside the Dashboard (#6465)

🐛 Bug fixes

  • Dashboards
    • A public dashboard's chart saved with a service filter charts only those services (#6296)
    • Widgets stored as JSON text show their data on a public dashboard (#6314)
    • List and SLO widgets show their data on a public dashboard whose variables or settings are stored in another shape (#6326)
    • A public dashboard never sends a Data Source widget's query to visitors, however deep the widget is stored (#6337)
    • A dashboard whose widget ids are stored as ObjectIDs shows its SLO widget and filters its incident and alert lists, signed in and public (#6347)
    • A public dashboard sends visitors only what each widget and variable draws: never a log or trace widget's filters, or a query variable's query (#6359)
  • Translations
    • The Admin's Chinese Promo Code is worded as the Dashboard's, without the space (#6230)
    • The "how do I connect this?" card on resource Overviews reads in all 16 languages (#6367)
    • The queue topology's and a device's Security Events links carry no English of their own (9924fa6)
    • A Cloud Resource's chart rows say "total of series" and "average of series" in Arabic (1988af2)
    • A cloud account's and a cloud resource's Audit Logs pages read in every language (fbc5e35)
    • Cloud's pages read in Arabic (c3fcb2e)
  • Audit Logs
    • Merging exceptions, webhook and badge link resets, stream keys and capture stops are recorded in the audit log (#6282)
    • Approving, skipping and cancelling runbook steps, labels a rule adds, SSO team joins and calendar link resets are recorded, by the person who did them (#6298)
    • Owner and privacy rules' Run now, a call policy's phone numbers and AI agent resets are recorded as the person's, not System's (#6322)
    • Run now on an auto import, status page or SLO monitor rule is recorded as the person who ran it, not System (#6351)
    • A phone number, an email address or a URL reads as the value in an entry, the changes dialog and the export, not as JSON (#6360)
  • Status Pages
    • A public note edited as it is approved is never published unapproved, and approval reads in every language (#6281)
    • Edit resource opens on the monitor group a resource shows (#6556)
    • Public note approval steps are put in order within their own event type's list (98470a7)
    • Public note approval steps are kept in order by where you drag them, with no Step number column (009369f)
  • Code
    • AI tasks work in Azure DevOps Server repositories connected as Git (#6183)
    • A branch name over 100 characters no longer leaves an AI pull request unrecorded or stops a repository connecting (#6209)
    • A repository in a deeply nested GitLab group connects (#6244)
  • Email
    • Main's timing and type reds after the email providers and the Runner's sign-in changes (#6195)
    • The OAuth scope description fits ShortDescriptionsGuard's 150 characters (ab56e3d)
    • SendGrid's key help names SendGrid's own Settings, and its key error the real Project Settings page (9910108)
  • Monitors
    • An infrastructure monitor's edit form, incidents and alerts chart its metrics for the resource it watches, not every one (#6277)
    • A namespace's Metrics monitors read its totals, and new ones start from them (#6460) (#6485)
    • An Incoming Request monitor's latest request is shown as its logs keep it (#6402) (#6536)
  • AI
    • Chat records the pull requests it opens, however long their title or description (#6225)
    • Count AI usage per service, each model call once, counter resets included (#6349) (#6451)
  • Ask AI
    • A push between approving a code commit and the commit itself is never written over (#6375)
    • A code commit or pull request that would write a placeholder over a hidden value (an IP address, an email, a key) says so before you approve it (#6387)
  • Incidents
    • Synthetic monitor screenshots show as images in the dashboard (#6010) (#6407)
    • The metric charts mark a move into a state after Resolved as resolved, and one after Acknowledged as acknowledged, as every other page does (2d7ace9)
  • Rtl
    • Right to left, next - the calendar, canvas panels, chart axes, separators, lists, Teams cards and set-apart values (#6216)
    • An AI run's activity and an SLO's policy tier set facts apart with the reader's separator, a bullet in Persian (66a2081)
  • Workflows
    • A builder save no longer silently overwrites a teammate's changes - it says so and asks whose version to keep (#6273)
    • Approving Ask AI's change keeps what someone saved after it was proposed (#6290)
  • API: The API reference no longer lists User Session, whose route never existed, and CI fails when a model's API route is not mounted (#6262)
  • Cloud: A Service Bus or Event Hubs namespace's Metrics tab reads its queues' total, not the average queue (#6410) (#6456)
  • Exceptions: An exception both copies of a merged host had keeps both copies' counts, seen times and triage (#6234)
  • Logs: A record without a time of its own is stored at its observed time, and the AI windows narrow to a minute (#6395) (#6467)
  • Network: Hiding and showing devices on the map in bulk is recorded in the audit log, by whoever did it (f1255cf)
  • Queues: The topology's queue table lets you size its columns, and its page buttons look locked at either end (753b3d6)
  • Security: The log scan no longer reads its own query back as an attack (#6419) (#6454)
  • Serverless, Services: An idle function or service says No recent invocations or No recent data, in grey, instead of Disconnected (#6307)
  • Slo: The feed filter names the deploy gate's two events in every language (668f6b9)
  • Telemetry: The ingestion budget tables let you size their columns, and show their wide-screen columns under a foreign .hidden rule (97fbc3e)
  • Terraform: Read JSON array columns back as the array, not null (#6169)
  • UI: Fourteen settings descriptions are two lines again, in every language (81ffe74)

⚡ Performance

  • Public Dashboards: A public dashboard downloads 242 KiB less before it draws, and a status page 8 KiB less - the investigation drawer and the people picker load only where they are opened (c69e9df)

📚 Documentation

  • Incidents
    • The Incident Settings page says, in every language, that a grouping rule's reopen is the one way an episode moves back (#6295)
    • How episodes keep to the state order, and when a maintenance event's moments happen, in every language (#6305)
  • Code: How OneUptime signs in to a Git server, and what AI reads in one (#6199)
  • Episodes: Wait for more alerts/incidents on alerts/episodes and incidents/settings in every translation (#6214)
  • Public Notes: How public note approval works, who approves, and what a waiting note does, in every docs language (#6293)
  • Upgrading: The Russian, Chinese and Hindi guides name Approval as their Dashboard draws it now (3ff8e53)
  • Workspace: Change State on the translated Slack and Microsoft Teams pages links the order rule as Incident Settings does (#6306)
🧰 Maintenance (93)
  • AI
    • The real-stack AI Features suite expects Limits per run under More settings (#6440) (77512e6)
    • A new project starts with no limits per run, on a server with billing and without (bf8dd4d)
    • The database and cluster suites know when an AI agent was last reset (a38fc12)
    • The AI rules' retired words no longer include "Approval", which public notes use now (bccbb0d)
    • The run summary's times are read on the test's own clock, today and on a later day (a1266ff)
    • The release suite's daily AI limits test opens the Daily limits card's Edit, beside Limits per run's (2e2e9b5)
  • Ebpf E2E
    • Load each image into KinD as this machine's platform alone, so Docker 29's containerd image store loads (#6182)
    • A workload that is not Ready leaves what Kubernetes, the runtime and the kernel saw (#6185)
    • not_ready keeps the kernel lines from a container's start, and each thread's state and signals (#6221)
    • Postgres starts as its own user, so no Go helper drops privileges under ubuntu-26.04's AppArmor (#6240)
    • The e2e's own workloads run unconfined, as ubuntu-26.04's AppArmor denies every signal inside a k3s container (#6418)
  • Security
    • The Hunts list is the project's Security Events toolbar's, not a device's (f30b6bf)
    • The Security fixtures answer the ingestion budget read the Security Events layout makes (1e164c3)
    • The side menu's counts are expected in the reader's digits (aa4ec04)
    • Every language the Dashboard speaks has its levels measured, Arabic too (bb06f5e)
    • The fixture answers who owns each rule on the Slack page (d78fad1)
  • Status Pages
    • The published images suite reads each note with its own approval switch (3094520)
    • The note fixtures answer who approves a public note - nobody, as in a project that has not turned approval on (1201996)
    • The note approval tests type-check: jest-mock's spy and mock types, the guard's rows as tuples (04ae305)
    • The file owner backfill knows the markdown columns added after it (e2c4e3b)
    • The bar color rules suite clones User, which removing a rule now reads for the audit log (f75543e)
  • Telemetry
    • The filters sidebar's tests type their mocks as jest-mock's (591be24)
    • The Redis counter guard lists the ingestion budget counter (76446e5)
    • The usage overview's reader is a jest-mock Mock of its own signature (3aa6f19)
    • The Admin Dashboard's ingestion budget forms are listed as one question per signal (d752da2)
    • The ChartTimeZoom fixture answers the explorers' ingestion budget read, as a server with no budget does (71df951)
  • Audit Logs
    • Audit log export email tests pass in every time zone, and CI checks the "losing entries" email where clocks change (#6381)
    • The export form's Record version is checked where ee/ is checked out (dae052c)
    • The DatabaseService suites expect what the audit log reads of every audited model (9a0a3d4)
    • Read the models' columns through a Common helper, so ee type-checks without typeorm (65ea646)
  • Release
    • RELEASING.md - the release loop, from a release branch to main again (f7d6647)
    • PrioritizeReleaseRuns keeps the release pull request's CodeQL runs (4620519)
    • The release branch goes back into main as soon as its pull request merges (18a52a8)
    • Merge the release branch into main after every push, and cut the next release only when main has something new (b8244cf)
  • Monitors
    • A monitor's Disable asks the monitor's question as it reads since monitoring off resolves what auto-resolve would (5eedb77)
    • Turning monitoring off is checked on a server without billing (00d0f0e)
    • The state timeline purge suite clones the records and users a delete now reads for the audit log (96f7847)
  • Rum
    • The Session Replay menu lists Frustration Signals, between Replay Policy and Replay Access Log (8a1622d)
    • The Product Analytics docs facts read the People card's title from its constant (7883427)
    • A RUM application's Product Analytics section is one of the side menu's everyday sections (a51580f)
  • Ask AI
    • The cluster key guard lists the key a code file version's fingerprint is made with (8a96a98)
    • Read the one record a workflow tool keeps, now that a result can keep a list (84173eb)
  • CI
    • App compiles again (three tests typed with Jest 28's types), and nine files Prettier-formatted for js-lint (#6452)
    • Js-lint fits its heap again, with the root Tests folder's TypeScript in a program of its own (bc2753c)
  • Docker
    • The deleted Docker host suite clones Project and User, which a delete now reads for the audit log (153604f)
    • The discovered resources suite clones what a delete now reads for the audit log (2f83779)
  • Incidents
    • An owner rule's view wiring is found after the team-ownership props (d61cc67)
    • Render an episode's snapshot panel with its subject, as TelemetrySnapshotPanel now names it (b6b06a8)
  • Permissions
    • The owned-records delete suite gives probes and AI agents the version OneUptime writes, which a delete now reads for the audit log (ed9643a)
    • The permission block suite clones Project and User, which a delete now reads for the audit log (63b482e)
  • Slo
    • Typeorm's metadata types come from their modules, and the tier groups keep their readonly variables (09adb77)
    • An SLO's Error Budget Policy is a rules page in its menu's Rules section (31f2668)
  • Workflows
    • A Page step about an incident folds Page As under More fields, and a new alert's Severity is gone (c62c84b)
    • The Builder's Undo, Redo, version history and save conflict dialog are held to the view (dde98d6)
  • Workspace
    • Stub a direct message as landing nowhere known (null), as the chats now answer (cf723b9)
    • A rule's channel invites the on-call responders paged to respond, not observers (5c539d6)
  • App Platforms: A rollback's marks on an app's charts are found as marks, not buttons (f2ca408)
  • Billing: The billing roles' read list names the limits on each AI run (0a3aec8)
  • Chat: The huge text suite reads a Teams card's note where Teams draws it, last (9ad80b6)
  • Cluster Key: The cluster key suite sends every request on a connection of its own, so none lands on one the server is closing (d763273)
  • Dashboards: A Value widget's Persian dates are checked as Persian writes a day - no leading zero, and its own comma before the time (c6306e5)
  • Databases: The Postgres suite clones Project and User, which a delete now reads for the audit log (1674c24)
  • Docs: RulesSmtpFormsDocsFacts reads the OAuth scope description's new labels (7e82048)
  • E2E: An account's Changes reads its times as rows or as cards (cf91d98)
  • Email: Custom SMTP Configs says what a config sends through, an SMTP server or a provider (5f68642)
  • Enterprise: Enterprise Edition tests get their 60-second timeout, not Jest's default 5 seconds (#6571)
  • Forms: The on-call schedule, owner and security case assign forms are tested with their people picker loaded, as after the first form that has one (1c9fc2c)
  • Huntress: The Postgres suite clones WorkflowVersion, which every workflow create now writes (521abdb)
  • Kubernetes: Reset the AI agent as an admin's route does, with their props (d048a3b)
  • LLM Providers: More fields names the Response Timeout too, its four names wrapped whole under its title in two rows at most (d5818c8)
  • Network: The bulk action concurrency ledger writes down Hide from map and Add recommended rules (d1c69b8)
  • Notifications: The SMS words guard finds the SMS branch by the setting it checks (46d0226)
  • Offline UI: The OpenStack pages run in thirds, on their measured minutes, so no Dashboard Offline UI group runs past its 35 minutes (316b926)
  • On-Call: The model and permission guards know the rules teams own (eaf1518)
  • Onboarding: The release suite's empty monitors tile test presses the explanation's Create Monitor, which the empty table no longer repeats (5b5d31b)
  • Openstack: The control plane rig starts RabbitMQ nodes one at a time, each once the one before it runs (#6174)
  • Ops: The Helm upgrade translations test counts Arabic among the dashboard's languages (#6500)
  • Owners On Create: The fixture answers who owns each incident owner rule (9992567)
  • Postgres: The four opt-in Postgres suites no workflow ran run in Postgres Schema Drift (33b51f3)
  • Profiles: An empty Profiler's setup guide opens from Send your first profiles, its one setup button (25f6062)
  • Public Dashboards: The theme suite reads text contrast once the page's colours have stopped fading in (2bf266c)
  • Queues: The topology tests type-check: the pages' props, a queue with no destination, the refused starts (8241327)
  • Reminders: The reminder rule suite clones Project and User, which a delete now reads for the audit log (d9bc6e3)
  • Rum, Serverless: An app or function without data leaves its fields out, and the AI tool's columns are read as typed (92bccde)
  • Syslog: The speed checks time a whole message as the fastest of three runs, as they time each rule's pattern (c1cc872)
  • Terraform: The import test's monitor answers Keep Response Content, as OneUptime does (2bce9d7)
  • Topology: The service map's Some errors and High error rate are read as Dashboard labels (0de8354)
  • Translations: The Dashboard's language switch is pinned where every switch now goes through it (8197e41)
  • UI: The investigation time limit and the SLO's recommended tiers dialog are checked in their two-line wording (2a5c617)
  • Website: The Home fixture's monitors have monitoring on, as every monitor's column says (f72800d)
  • npm audit fix (#6243)
  • SLO specs read page fit and boxes through the helpers; Home reads a queue tile's line from the tile (#6453)
  • npm audit fix (#6538)

⬆️ Upgrade

Back up first, then follow the upgrade guide. On Docker Compose, run npm run update on the release branch. On Kubernetes, helm upgrade to version 14.0.106 of the chart.

Full changelog: 14.0.105...14.0.106

Contributors: @nawazdhandala, @simlarsen

Don't miss a new oneuptime release

NewReleases is sending notifications on new releases.