Dynatrace
Autonomous Enablement Ops Platform WWSE · Multi-Arch CI/CD
Worldwide Solution Engineering

Learn Dynatrace Master Complexity

“Real environments. Zero friction. Empowering everyone”powered by Orbital

The delivery backbone behind every WWSE enablement — provisioning live Kubernetes environments, running the CI fleet, and driving instructor-led workshops at scale.

Sign in with GitHub

Dashboard access is limited to members of the Dynatrace WWSE GitHub organisation. Registering a tenant needs no account.

Repository Arch ARM64 AMD64 Branch Actions
Loading repos…
Repository Branch Arch Action Worker Started Elapsed Actions
Loading running jobs…

Deferred · queued behind a held lock

Triple (repo : branch : arch) Depth
—

Queued · waiting for a worker

Repository Branch Arch Type By Queued Actions
—

Recent runs

Started Command Duration Status Triggered by Log
Loading sync history…

Claude analyzes failed integration tests, determines whether the root cause is in the repo or the shared framework, then creates a fix branch and opens a PR.

agent ready

Running Agents

Repository Branch Type Started Elapsed Log
—

Reported agents

Kind Name Owner / tenant State Stage Started Loop Heartbeat Cost / budget PR
—
Started Repository Branch Type Status Duration Log
Loading…

Reported agents

Last report Kind Name Owner / tenant Final state Stage Started Cost · PR
Loading…

Loading workers…

Queue Depths

Tests

Unit, framework, integration and end-to-end — the four layers a change passes, cheapest first.

Unit — GitHub Actions

runs on GitHub runners on every push and PR — not on the fleet gates the PR
Workflow Repo Branch Status History Duration Finished
Loading GitHub Actions runs…

Pipeline

Where each product's code has actually reached — and, per tenant, which bundle is installed.

Environments & tenants

installed app version per tenant — only for the pair this host holds a credential for

Orbital deploys its own two tenants and no others. The other environment's tenants are listed because they exist, with their version marked not readable here — carrying a number across the boundary would be inventing it. A tenant that could not be reached and a tenant that answered without the app installed are different facts and render differently.

Release lanes

GET /api/deploy/drift — is anything on main that the channel has not taken?

Who deployed what is under Register Tenant → Deploy activity, and every registered install is under Register Tenant → Tenant registry.

Environment health

GET /api/health on this host and, cross-origin, on its peer

The peer is read by your browser, not by Orbital — git is still the only channel between the environments. Only /api/health is obtainable across the boundary, so the peer card carries a status and its queue depths and says plainly what it cannot show. Unreachable here and unhealthy are different facts: the first means this host could not ask, the second means the far side answered and reported itself ill. A card that could not be read shows no counts at all, because a zero nobody measured reads exactly like a zero somebody did.

Services

What systemd is running on this host — the units that deploy, schedule and reap.

A unit that is not installed here is an answer, not a fault: the two environments run different sets. Timers report their next firing and the outcome of the run they last fired; services report a pid and an uptime — neither shape borrows the other's empty columns. Journal tails are masked server-side.

Unit State Since / next Detail Restarts Last line
Reading systemd…

A profile is a named set of training repos. Map profiles to domains and tenants in the Tenants tab.

Loading profiles…

New / edit profile

Every workshop across every tenant. Click a row to edit or administer it. Creating workshops stays in the enablement app, where a trainer picks a training from their own tenant's catalogue.

—

Loading workshops…

All workshops

WhenTitleTrainerTenant StateSeatsRegistrants

Account OAuth client bootstrap install only

Paste it once. Nothing is stored here. Orbital uses the OAuth client to deploy the app, writes it into your tenant's own settings, and then discards it — it is never written to Orbital's disk, database or logs. From that moment the app is self-sufficient: it mints its own per-learner tokens and updates itself, on any tenant in any account, with no credential of yours living on this server.

How to create the OAuth client

In your tenant's account: myaccount.dynatrace.com → Identity & access management → OAuth clients → New. Add every scope below — the install is refused if any is missing, because a partly-scoped client produces an app that installs and then fails at runtime.

All 15 required scopes — 13 environment, 2 account
ScopeWhy it is needed
Environment
app-engine:apps:installinstall and upgrade the app
app-engine:apps:runactivate the installed version
app-engine:apps:deleteuninstall — needed for the Undeploy button below
app-settings:objects:readcheck whether this tenant already has its Orbital token, so the install can tell you whether the manual step below is still outstanding. Optional — without it that check reports “could not verify” instead of a definite answer.
settings:objects:readread the outbound allowlist before changing it
settings:objects:writeenable training-telemetry forwarding, add the hosts below to the outbound allowlist if your tenant enforces one, and — the important one — store this client in your own tenant so the app can mint and self-update without Orbital keeping anything
environment-api:api-tokens:readlist and clean up the per-learner tokens the app minted
environment-api:api-tokens:writemint each learner's environment token directly (classic dt0c01) — the primary path, immune to per-user IAM differences
environment-api:activegate-tokens:writemint the ActiveGate token a Kubernetes lab environment needs
document:documents:readread training content stored on the tenant
document:documents:writeimport labs and images under one service identity — any admin can then manage them without creating duplicate copies
document:documents:deleteremove labs the tenant's profile no longer lists
document:documents:adminmanage content documents regardless of which admin imported them
Account
platform-token:tokens:writemint per-user platform tokens where classic token creation has been retired (rolled out per environment)
platform-token:tokens:managerevoke them when a session ends

Orbital checks the client against your tenant before installing anything and names any scope that is missing, so a wrong client costs you a message rather than a broken install. Want to verify first without installing anything? Run the tenant readiness check — same probes, nothing deployed. Note: scopes cannot be added to an existing client — if one is missing, create a new client.

After install, and the outbound allowlist

After install: nothing, if the client is complete

The install writes the client into your tenant's own Settings → Training Token Minting and the app takes it from there — per-learner tokens, and its own updates. The deploy result says stored when that worked; if it says anything else it also says which permission is missing, and you can paste the same client on that Settings page by hand.

Why the app must mint at all: creating classic API tokens is being retired per environment, so a tenant that mints them happily today can stop tomorrow while a sibling tenant in the same account carries on. A client with the two platform-token account permissions is what makes that transition a non-event.

Outbound allowlist (if your tenant enforces it)

These hosts are added to your app-function allowlist during install:

autonomous-enablements.whydevslovedynatrace.com
raw.githubusercontent.com, api.github.com
wwse.apps.dynatrace.com
Working… building & deploying the app. This can take a minute or two — please don't refresh or close this page.

Settings

Loading…

Loading settings…