Managed Instances > one instance. At the top, how it is - waiting to connect, * checking in or gone quiet - with what can be done to it: sign in as support, update it, * check for updates, make it read-only or suspend it. Under that, what needs a look from its * last report, the connection code while it's waiting for one, and what it has been asked and * how that went; alongside, what this manager sets for it and what it reported about itself. * * A connection code shows once, on the page its making redirects to - only its hash is kept * (managedInstanceNewCode()). The handlers are admin/post/managed_instances.php. */ require_once "includes/inc_all_admin.php"; // Off unless config.php turns it on - the list says how if (!managerEnabled() || !settingsColumnExists($mysqli, 'config_manager_keys')) { redirect('managed_instances.php'); } $instance_id = intval($_GET['id'] ?? 0); $row = managedInstanceRow($instance_id); if (!$row) { ?>
Removed = escapeHtml(timeAgo($row['managed_instance_archived_at'])) ?>. It lets go at its next check-in - what this manager set comes off it, and its support user is archived. = $row['managed_instance_enrolled_at'] ? 'It disconnected itself. To manage it again, it needs a new connection code.' : 'Waiting to connect - give its admin the connection code below.' ?> = $row['managed_instance_last_checkin_at'] ? 'Not checked in since ' . escapeHtml(timeAgo($row['managed_instance_last_checkin_at'])) : 'Connected, but it hasn\'t checked in' ?>. It checks in every minute from its own cron - either cron has stopped there, the server is down, or it can't reach this ITFlow. Checked in = escapeHtml(timeAgo($row['managed_instance_last_checkin_at'])) ?>= !empty($app['version']) ? ', on ' . escapeHtml($app['version']) : '' ?>. = $health['issues'] ? count($health['issues']) . ' thing' . (count($health['issues']) === 1 ? '' : 's') . ' to look at below.' : 'Everything looks right.' ?>
Updating - it picks the request up at its next check-in and updates in the background. This page refreshes itself.
It updates itself = !empty($update['security']) || $auto_at <= time() ? 'at its next check-in' : 'on ' . escapeHtml(date('M j', $auto_at)) . ', ' . intval($row['managed_instance_update_delay_days']) . ' days after it was first seen - or update it now' ?>.
= escapeHtml($new_code) ?>
Copy it now - it isn't shown again. If it's lost, make a new one.
time()) { ?>The code was shown when it was made - only a fingerprint of it is kept here. If it's lost, make a new one; the old one stops working.
New connection codeThere's no code that works - = $row['managed_instance_enroll_expires_at'] ? 'the last one ran out' : 'make one to connect it' ?>.
Make a connection codeIt checks in with this ITFlow at = escapeHtml(managedRequestBaseUrl()) ?>, so that has to be reachable from where it is. Nothing here ever connects to it - it can be behind a firewall.
| Request | Status | Asked | Result |
|---|---|---|---|
|
= escapeHtml(managedCommandLabel($command['managed_command'])) ?>
= $command['managed_command_source'] === 'auto' ? 'Automatic' : escapeHtml((string) $command['managed_command_requested_by']) ?>
= escapeHtml((string) $command['managed_command_result']) ?>
|
= $status_pill($command['managed_command_status']) ?> | = $when($command['managed_command_created_at']) ?> | = escapeHtml((string) $command['managed_command_result']) ?> |
' . escapeHtml($app['commit']) . '' : '') . '' . escapeHtml((string) $row['managed_instance_last_ip']) . '') ?>
= $fact('Connected', $when($row['managed_instance_enrolled_at'])) ?>