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) { ?>
That instance is gone - it may have been deleted. Managed Instances
['tone' => 'secondary', 'icon' => 'fa-unlink'], $state === 'pending' => ['tone' => 'secondary', 'icon' => 'fa-plug'], $state === 'waiting' => ['tone' => 'warning', 'icon' => 'fa-hourglass-half'], $state === 'offline' => ['tone' => 'danger', 'icon' => 'fa-server'], $worst === 'danger' => ['tone' => 'danger', 'icon' => 'fa-server'], $worst === 'warning' => ['tone' => 'warning', 'icon' => 'fa-server'], default => ['tone' => 'success', 'icon' => 'fa-server'], }; // What it has been asked, newest first $commands = []; $sql = mysqli_query($mysqli, "SELECT * FROM managed_instance_commands WHERE managed_command_instance_id = $instance_id ORDER BY managed_command_created_at DESC, managed_command_id DESC LIMIT 15"); while ($command = mysqli_fetch_assoc($sql)) { $commands[] = $command; } $waiting = (bool) array_filter($commands, function ($command) { return in_array($command['managed_command_status'], ['queued', 'sent', 'running'], true); }); $updating = (bool) array_filter($commands, function ($command) { return $command['managed_command'] === 'update_now' && in_array($command['managed_command_status'], ['queued', 'sent', 'running'], true); }); $can_act = !$removed && $connected && $url !== ''; $status_pill = function (string $status) { $tone = ['queued' => 'secondary', 'sent' => 'info', 'running' => 'primary', 'done' => 'success', 'failed' => 'danger', 'cancelled' => 'secondary'][$status] ?? 'secondary'; $words = ['queued' => 'Waiting for its check-in', 'sent' => 'Sent', 'running' => 'Running', 'done' => 'Done', 'failed' => 'Failed', 'cancelled' => 'Cancelled'][$status] ?? $status; return '' . escapeHtml($words) . ''; }; $fact = function (string $label, string $value_html) { return '
  • ' . $label . '' . $value_html . '
  • '; }; $when = function ($datetime, string $never = 'Never') { return $datetime ? '' . escapeHtml(timeAgo($datetime)) . '' : '' . $never . ''; }; $size = function ($mb) { $mb = floatval($mb); return $mb >= 1024 ? round($mb / 1024, 1) . ' GB' : round($mb) . ' MB'; }; ?>
    >

    Removed

    Removed . It lets go at its next check-in - what this manager set comes off it, and its support user is archived. Connected - waiting for its cron job. It checks in from cron every minute, so add the cron job in its hosting control panel: every minute (* * * * *) . 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 .

    Updating - it picks the request up at its next check-in and updates in the background. This page refreshes itself.

    It updates itself .

    Sign in as support Update

    Connect it

    1. On that ITFlow, sign in as an admin and open Admin > Managed By. It needs to be on this version or newer.
    2. Paste the code there and choose Connect. It works once, until .

    Copy it now - it isn't shown again. If it's lost, make a new one.

    Setting up a new install for it?

    Run this in the new install's folder, as the user that owns its files - it sets ITFlow up, connects it with this code and keeps it connected. It asks for the database and anything else it needs.

    When it's done, it shows the password made for the first admin and the cron job to add in the hosting panel. This page says it's waiting for that cron job until it runs. Leave off --manager-required if its admins should be able to disconnect it.

    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 code

    There's no code that works - .

    Make a connection code

    It checks in with this ITFlow at , so that has to be reachable from where it is. Nothing here ever connects to it - it can be behind a firewall.

    Health

    Reported
    All good - cron is running, it's up to date, backups are recent and nothing has gone wrong today.

    Requests

    Nothing asked of it yet. Updates you start here, and automatic ones, show here with how they went.
    Request Status Asked Result
    Automatic' : escapeHtml((string) $command['managed_command_requested_by']) ?>

    Set from here

      ' . escapeHtml($row['managed_instance_mode_message']) . '
    ' : '')) ?> 0 ? '' . $seat_limit . ' agent' . ($seat_limit === 1 ? '' : 's') . '' : 'None - its own config decides') ?> Not set from here' : ($key_info ? 'On
    until ' . escapeHtml(date('M j, Y', strtotime((string) $key_info['expires']))) . '
    ' : 'The key has run out')) ?> Automatic
    ' . (intval($row['managed_instance_update_delay_days']) > 0 ? intval($row['managed_instance_update_delay_days']) . ' day' . (intval($row['managed_instance_update_delay_days']) === 1 ? '' : 's') . ' after one comes out' : 'As soon as one comes out') . ' - security fixes straight away
    ' : 'By hand
    From here - its admins can\'t
    ') ?>

    The instance

    Its details show once it has checked in.
    ') ?> ' . escapeHtml((string) $row['managed_instance_last_ip']) . '') ?>

    Notes