From aad736a1461f5a27398ca2f8295ee0b3951aee5b Mon Sep 17 00:00:00 2001 From: CChislett Date: Tue, 10 Mar 2026 14:53:10 +0000 Subject: [PATCH 1/3] Update nav structure and admin pages for new OpsPilot UI - Restructure FEATURES nav: reorder top items to match UI, pull Metrics/Logs/Traces Drilldown out of Explore - Add Database page with full content - Update Servers nav entry to use Explore-servers.md - Add FR Agent Metrics under Alerting > Examples - Restructure ADMIN & DATA nav to match new UI Administration order - Add Usage & Details, Invoices, API Keys, Organization Settings pages - Redistribute users.md content to Organisation Users, Organisation Settings, API Keys - Update User Profile and User Security pages to match new UI - Improve Knowledge page, remove Hub references - Replace all em dashes with regular dashes across 37 docs files Co-Authored-By: Claude Sonnet 4.6 --- docs/Admin-and-data/Account/Cloud/profile.md | 37 ++-- docs/Admin-and-data/Account/Cloud/security.md | 50 ++--- docs/Admin-and-data/Account/Cloud/users.md | 104 ++------- docs/Admin-and-data/EULA.md | 2 +- docs/Admin-and-data/Images/invoices.png | Bin 0 -> 17728 bytes docs/Admin-and-data/api-keys.md | 33 +++ docs/Admin-and-data/invoices.md | 21 ++ docs/Admin-and-data/organization-settings.md | 25 +++ docs/Admin-and-data/usage-and-details.md | 37 ++++ docs/Contribute/how-to-contribute.md | 2 +- .../Features/Alerting/Active-alerts.md | 2 +- .../Alerting/Alert-Rules/Configure-rules.md | 20 +- .../Features/Alerting/Alerts-overview.md | 4 +- .../Features/Alerting/Contact-points.md | 2 +- docs/Data-insights/Features/Alerting/FAQ.md | 8 +- .../Features/Alerting/Notifications.md | 10 +- .../Features/Alerting/Templates.md | 2 +- .../Features/Alerting/Troubleshooting.md | 26 +-- .../Features/Deep/Create-Tracepoint.md | 2 +- .../Data-insights/Features/Explore-servers.md | 4 +- .../Features/FR-Agent-Metrics.md | 2 +- .../Features/JDBC/JDBC-Monitoring.md | 2 +- .../Features/Logs/Log-Archives.md | 2 +- docs/Data-insights/Features/Logs/Logs.md | 2 +- .../Data-insights/Features/Memory/Settings.md | 2 +- .../Metrics/AWS-CloudWatch-Metrics.md | 2 +- .../Features/Metrics/JMX-MBeans.md | 2 +- .../Features/OpsPilot/AIoverview.md | 4 +- .../OpsPilot/OpsPilot-Hub/Knowledge.md | 100 ++++----- .../Features/OpsPilot/OpsPilot-user-guide.md | 2 +- .../OpsPilot/images/new-knowledge.png | Bin 0 -> 124529 bytes .../Features/alerting-examples.md | 40 ++-- docs/Data-insights/Features/database.md | 60 ++++++ docs/Data-insights/Features/explore-logs.md | 2 +- .../Data-insights/Features/explore-metrics.md | 4 +- docs/Data-insights/Features/explore-traces.md | 2 +- .../Tutorials/crash-troubleshoot-cloud.md | 6 +- docs/Getting-started/install-fr.md | 2 +- docs/Getting-started/set-up-integrations.md | 4 +- docs/Latest-updates/Releases.md | 2 +- docs/Latest-updates/WhatsNew.md | 12 +- docs/Monitor-your-data/Katie/overview.md | 2 +- .../OpenTelemetry/Instrumentation/PHP.md | 2 +- .../OpenTelemetry/Instrumentation/node.md | 4 +- .../Visualize/Distributed-tracing.md | 2 +- .../OpenTelemetry/getting-started.md | 2 +- mkdocs.yml | 201 ++++++++---------- 47 files changed, 472 insertions(+), 386 deletions(-) create mode 100644 docs/Admin-and-data/Images/invoices.png create mode 100644 docs/Admin-and-data/api-keys.md create mode 100644 docs/Admin-and-data/invoices.md create mode 100644 docs/Admin-and-data/organization-settings.md create mode 100644 docs/Admin-and-data/usage-and-details.md create mode 100644 docs/Data-insights/Features/OpsPilot/images/new-knowledge.png create mode 100644 docs/Data-insights/Features/database.md diff --git a/docs/Admin-and-data/Account/Cloud/profile.md b/docs/Admin-and-data/Account/Cloud/profile.md index 841e1e3..93fe04b 100644 --- a/docs/Admin-and-data/Account/Cloud/profile.md +++ b/docs/Admin-and-data/Account/Cloud/profile.md @@ -1,36 +1,37 @@ -# Profile +# User Profile -This section lets you manage your personal profile settings, including your profile details, email addresses, and connected accounts. - - -## Accessing profile settings - -![!Screenshot](../../Account/Cloud/access-profile.png) - -!!! tip - You can also quickly access your profile by clicking your name and avatar at the bottom left corner of the screen on the Account page. +The **User Profile** page lets you manage your personal account settings and preferences, including your display name, email addresses, and connected accounts. ## Profile details -In **Profile details**, you’ll see your profile photo (or initials if no image is uploaded) along with your display name. You’ll also find a list of the email addresses linked to your account. +The **Profile details** section shows your current profile photo (or initials if no image has been uploaded) and your display name. +### Updating your profile -### Updating your Profile Settings +Click **Update profile** to open the edit panel where you can: -You can update your profile settings by clicking **Update profile** in the Profile section. This brings up a panel where you can change your profile photo, first name, and last name. To update your image, click the **Upload** button—make sure your file is a square (1:1 aspect ratio) and no larger than 10MB. - -Below the image, you’ll find fields for your first and last name. Make any changes as needed, then click **Save** to apply them. If you change your mind, you can click **Cancel** to exit without saving. +- Upload a new profile photo (must be square, 1:1 aspect ratio, max 10 MB) +- Update your first and last name +Click **Save** to apply changes, or **Cancel** to exit without saving. ![!Screenshot](../../Account/Cloud/update.png) -### Updating your email address +## Email addresses + +This section lists all email addresses linked to your account, with your primary address clearly labelled. -To add another email address to your account, click the **+ Add email address** button. A field will appear where you can type in the new email you'd like to associate with your profile. +### Adding an email address -After entering the address, click **Add**. You’ll be asked to verify the new email before it’s officially added to your account. This ensures that the email belongs to you and can be used for login, notifications, or as a backup. If you change your mind, just click **Cancel** to exit without adding it. +Click **+ Add email address**, enter the new address, then click **Add**. You will receive a verification email before the address is officially added to your account. ![!Screenshot](../../Account/Cloud/add-email.png) +## Connected accounts + +The **Connected accounts** section shows any third-party accounts linked to your profile (e.g. Google). These can be used for single sign-on (SSO) when logging in to OpsPilot. +--- +!!! question "Need more help?" + Contact support in the chat bubble and let us know how we can assist. diff --git a/docs/Admin-and-data/Account/Cloud/security.md b/docs/Admin-and-data/Account/Cloud/security.md index dbb6c4f..7dd50d5 100644 --- a/docs/Admin-and-data/Account/Cloud/security.md +++ b/docs/Admin-and-data/Account/Cloud/security.md @@ -1,45 +1,47 @@ -# Security +# User Security -This dedicated Security page serves as your central hub for managing and enhancing the protection of your account. Here, you can actively control various aspects of your digital safety, including setting and updating your password, configuring secure passkeys for streamlined and robust authentication, and enabling two-step verification for an added layer of defense against unauthorized access. Additionally, you'll find a clear overview of your active devices, allowing you to monitor where your account is currently logged in. This comprehensive section empowers you to maintain strong control over your account's integrity and privacy. +The **User Security** page lets you manage the security settings for your account, including your password, passkeys, and two-step verification. ![!Screenshot](../../Account/Cloud/Security.png) ## Password -This section allows you to change your account password. +To set a new password: -### Changing your Password +1. Enter your new password in the **New password** field. +2. Re-enter it in the **Confirm password** field. +3. Check **Sign out of all other devices** to revoke access from any other active sessions. +4. Click **Save** to apply, or **Cancel** to discard. -To set a new password, you will find two fields: **New password** and **Confirm password**. Enter your desired new password into the "New password" field, and then re-enter the exact same password into the "Confirm password" field to ensure accuracy. +## Passkeys -Below these fields, you'll see an option to **Sign out of all other devices**. It is highly recommended to check this box. Doing so will automatically sign out any other devices that may still be logged in with your old password, enhancing your account's security. +Passkeys provide a more convenient and secure way to sign in without a password. -Once you have entered and confirmed your new password and made your selection for signing out of other devices, click **Save** to apply the changes. If you decide not to change your password or wish to discard your entries, simply click **Cancel** to return to the previous page without saving. +### Adding a passkey -## Passkeys +Click **+ Add a passkey**. You will be prompted to choose where to save it: -Passkeys provide a more convenient and secure way to sign in. - - -### Adding a Passkey - -When you click **+ Add a passkey** from the Security page, a "Windows Security" pop-up window will appear, prompting you to "Choose where to save this passkey." This step allows you to select the method you prefer for storing your new passkey. +| Option | Description | +|---|---| +| **iPhone, iPad, or Android device** | Saves the passkey to your mobile device using Face ID, Touch ID, or screen lock | +| **Security key** | Saves the passkey to a physical FIDO-compliant hardware key (e.g. YubiKey) | ![!Screenshot](../../Account/Cloud/passkey.png) -You have the following options: -* **iPhone, iPad, or Android device:** Select this option if you wish to save your passkey to a mobile device. This typically involves using your phone's built-in security features (like Face ID, Touch ID, or screen lock) to authenticate and store the passkey securely. You might be prompted to scan a QR code or approve a notification on your mobile device. -* **Security key:** Choose this option if you have a physical security key (like a YubiKey or similar FIDO-compliant device) and want to use it to store your passkey. This method offers strong, hardware-based security. +Click **Next** to complete setup, or **Cancel** to abort. -Once you have selected your preferred method: +## Two-step verification -* Click **Next** to proceed with the passkey creation process based on your chosen storage option. You will then follow further instructions to complete the setup. -* Click **Cancel** to close the window and abort the passkey addition process without saving any new passkey. +Two-step verification adds a second layer of security to your login by requiring a time-sensitive code from an authenticator app (e.g. Google Authenticator, Microsoft Authenticator, or Authy). -## Two-step verification +### Setting up two-step verification -When you opt to add two-step verification, you'll be presented with the **+ two-step verification** prompt. This method enhances your account's security by requiring a second form of verification in addition to your password. To set this up, you'll need an authenticator app on your smartphone (such as Google Authenticator, Microsoft Authenticator, or Authy). +1. Click **+ Two-step verification**. +2. Scan the QR code displayed on screen using your authenticator app. +3. If you cannot scan the QR code, click **Can't scan QR code?** to enter the key manually. +4. Click **Continue** to complete setup, or **Cancel** to abort. -The page displays a unique QR code that you must scan using your chosen authenticator application. Scanning this QR code will securely link the app to your account, generating time-sensitive codes that you'll use for future logins. If you are unable to scan the QR code, click the **Can't scan QR code?** link for alternative setup instructions, typically involving a manual key entry. +--- -Once the QR code is scanned and the app is linked, click **Continue** to finalize the setup, or **Cancel** to abort the process. \ No newline at end of file +!!! question "Need more help?" + Contact support in the chat bubble and let us know how we can assist. diff --git a/docs/Admin-and-data/Account/Cloud/users.md b/docs/Admin-and-data/Account/Cloud/users.md index 7ff96d9..c1cc9aa 100644 --- a/docs/Admin-and-data/Account/Cloud/users.md +++ b/docs/Admin-and-data/Account/Cloud/users.md @@ -1,107 +1,41 @@ -# Account & member management +# Organization Users -## Organizational settings +The **Organization Users** page lets you view and manage all members of your organization, assign roles, and invite new users. -### General - -This section covers the basic organization-level settings accessible under the **General** tab in FusionReactor Cloud. - -![!Screenshot](../../Account/Cloud/general.png) - - -#### Organization Profile - -The Organization Profile section lets you view and update your organization's name and logo, which are shown to all members across the interface. - -#### Leave organization - -The **Leave organization** option lets any member (except the last admin) remove themselves from the org, which immediately revokes access to all org data and requires a new admin invitation to rejoin. - -!!! note - If you're the last admin in the organization, you **cannot leave** — you must either promote another member to admin or delete the organization instead. - - - -#### Delete organization - -Only admins can delete the organization, which permanently removes all members, data, and settings — this action cannot be undone. - - -### Members - -The **Members** tab in FusionReactor Cloud allows you to manage all users associated with your organization. You can view member details, assign roles, invite new members, and control access. +## Viewing members ![!Screenshot](../../Account/Cloud/members.png) -#### Viewing members - -Each row in the Members list includes: - -* **Name & Email** – Display name and primary email address. -* **Joined** – Date the user was added to the organization. -* **Role** – The current permission level assigned to the member. -* **Actions** – (⋯) menu to remove a member. - -You can also: +Each row in the members list includes: -* Use the search bar to filter members by name or email. -* Navigate through multiple pages if your org has many users. +| Field | Description | +|---|---| +| **Name & Email** | Display name and primary email address | +| **Joined** | Date the user was added to the organization | +| **Role** | The current permission level assigned to the member | +| **Actions (...)** | Remove the member from the organization | +Use the search bar to filter members by name or email. -#### Inviting members +## Inviting members -Click the **Invite** button in the top-right to add new users: +Click **Invite** in the top right to add a new user: 1. Enter the email address of the invitee. 2. Assign a default role. +3. Click **Invite** to send the invitation. !!! info Users are notified by email when invited to an organization. +## Role management -#### Role management -Use the dropdown under Role to instantly change a member’s permission level. +Use the **Role** dropdown to instantly change a member's permission level. !!! info "Learn more" [Roles](/Admin-and-data/Account/Cloud/roles/) - -### API Keys - -The **API Keys** page allows you to manage access credentials used by services or agents to communicate with FusionReactor Cloud. - -#### Viewing & managing keys - -Each listed API key displays: - -- **Name** – A user-defined label. -- **Description** – A short explanation of the key’s purpose. -- **Status toggle** – Temporarily enable or disable a key. -- **Copy icon** – Instantly copies the key to your clipboard (if visible). -- **Actions menu (⋯)** – Click to: - - **Edit** – Change the key’s name or description. - - **Remove** – Permanently delete the key. - -!!! note - Deleting a key immediately revokes access for anything using it. - - - -#### Creating a new key - -Click **+ Generate** to create a key. You’ll enter: - -- **Name** (required) -- **Description** (optional) - -### Billing - -The Billing section provides access to your organization's subscription details, invoices, and payment methods. - -!!! info "Learn more" - [Billing](/Admin-and-data/Billing/Cloud/overview/) - - - - +--- +!!! question "Need more help?" + Contact support in the chat bubble and let us know how we can assist. diff --git a/docs/Admin-and-data/EULA.md b/docs/Admin-and-data/EULA.md index 5aca25c..3627476 100644 --- a/docs/Admin-and-data/EULA.md +++ b/docs/Admin-and-data/EULA.md @@ -48,7 +48,7 @@ You shall not:
**Provided, however**, notwithstanding the foregoing, you are **strictly prohibited** from installing or using the Trial Version of the Software for any **commercial training purpose**. -You shall not use the Developer Version for any application deployment in a **live**, **stand-by production**, or **staging** environment — in each case including, without limitation, any environment accessed by application end-users, including but not limited to: +You shall not use the Developer Version for any application deployment in a **live**, **stand-by production**, or **staging** environment - in each case including, without limitation, any environment accessed by application end-users, including but not limited to: * servers, * workstations, diff --git a/docs/Admin-and-data/Images/invoices.png b/docs/Admin-and-data/Images/invoices.png new file mode 100644 index 0000000000000000000000000000000000000000..b8949a958aab754ad22b8f550f2e04327a4fef74 GIT binary patch literal 17728 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