From 749932082fdb20a50ce0960004b3d6d4dc9e7d28 Mon Sep 17 00:00:00 2001 From: Graham McIntire Date: Wed, 8 Jul 2026 10:57:31 -0500 Subject: [PATCH] =?UTF-8?q?chore:=20update=20phoenix=5Flive=5Fview=201.1.3?= =?UTF-8?q?2=E2=86=921.2.6,=20relax=20constraint=20to=20~>=201.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/towerops_web/components/consent_prompt.ex | 4 +- lib/towerops_web/components/layouts.ex | 79 ++--- .../components/layouts/root.html.heex | 12 +- .../components/marketing_layouts.ex | 8 +- .../controllers/api_docs_html/index.html.heex | 332 +++++++++--------- .../controllers/error_html/404.html.heex | 16 +- .../controllers/error_html/500.html.heex | 12 +- .../graphql_docs_html/index.html.heex | 147 ++++---- .../controllers/page_html/home.html.heex | 28 +- .../user_registration_html/new.html.heex | 8 +- .../user_session_html/new.html.heex | 8 +- lib/towerops_web/live/account_live/my_data.ex | 28 +- .../live/account_live/totp_enrollment.ex | 16 +- .../live/activity_feed_live.html.heex | 6 +- .../live/admin/audit_live/index.ex | 12 +- .../live/admin/monitoring_live.html.heex | 36 +- .../live/admin/org_live/index.html.heex | 4 +- .../live/admin/security_live/index.html.heex | 8 +- .../live/agent_live/index.html.heex | 8 +- .../live/agent_live/show.html.heex | 39 +- .../live/alert_live/index.html.heex | 9 +- .../live/check_live/form_component.ex | 12 +- .../live/coverage_live/map.html.heex | 12 +- .../live/coverage_live/show.html.heex | 12 +- .../live/dashboard_live.html.heex | 6 +- .../live/device_live/form.html.heex | 40 +-- .../live/device_live/index.html.heex | 13 +- .../live/device_live/show.html.heex | 7 +- .../live/graph_live/show.html.heex | 3 +- lib/towerops_web/live/help_live/index.ex | 32 +- .../live/map_live/index.html.heex | 12 +- .../live/network_map_live.html.heex | 54 ++- .../live/org/settings_live.html.heex | 44 +-- .../live/schedule_live/index.html.heex | 3 +- .../live/site_live/form.html.heex | 24 +- .../live/site_live/index.html.heex | 3 +- .../live/site_live/show.html.heex | 4 +- .../live/trace_live/index.html.heex | 15 +- .../live/user_settings_live.html.heex | 96 ++--- .../live/weathermap_live.html.heex | 53 ++- mix.exs | 2 +- mix.lock | 2 +- 42 files changed, 619 insertions(+), 650 deletions(-) diff --git a/lib/towerops_web/components/consent_prompt.ex b/lib/towerops_web/components/consent_prompt.ex index 29c8a7eb..c5d9eaef 100644 --- a/lib/towerops_web/components/consent_prompt.ex +++ b/lib/towerops_web/components/consent_prompt.ex @@ -27,8 +27,8 @@ defmodule ToweropsWeb.Components.ConsentPrompt do
- - + +
diff --git a/lib/towerops_web/components/layouts.ex b/lib/towerops_web/components/layouts.ex index aef04c1c..8f608689 100644 --- a/lib/towerops_web/components/layouts.ex +++ b/lib/towerops_web/components/layouts.ex @@ -166,8 +166,8 @@ defmodule ToweropsWeb.Layouts do
<% end %> - - + +
@@ -214,8 +214,8 @@ defmodule ToweropsWeb.Layouts do ⌘K - - + + <.link :if={@current_organization} navigate={~p"/alerts"} @@ -233,8 +233,8 @@ defmodule ToweropsWeb.Layouts do <% end %> - - + + <.link navigate={~p"/help"} class="p-2 rounded-md text-gray-500 hover:text-gray-700 hover:bg-gray-100 dark:text-gray-400 dark:hover:text-gray-200 dark:hover:bg-gray-800 transition-colors" @@ -242,8 +242,8 @@ defmodule ToweropsWeb.Layouts do > <.icon name="hero-question-mark-circle" class="h-5 w-5" /> - - + +
- - + +
- - +
- - + + <.sidebar_link :if={@current_organization} navigate={~p"/orgs/#{@current_organization.slug}/settings"} @@ -518,8 +517,8 @@ defmodule ToweropsWeb.Layouts do icon="hero-cog-6-tooth" label={t("Settings")} /> - - + +
- - + +
- - + +
- - + +

{t("Monitor")} @@ -594,8 +593,8 @@ defmodule ToweropsWeb.Layouts do <.icon name="hero-signal" class="size-5" /> {t("Weathermap")} --%>

- - + +

{t("Respond")} @@ -610,8 +609,8 @@ defmodule ToweropsWeb.Layouts do {t("On-Call")}

- - + +

{t("Analyze")} @@ -626,8 +625,8 @@ defmodule ToweropsWeb.Layouts do {t("Activity")}

- - + +

{t("Account")} @@ -651,8 +650,8 @@ defmodule ToweropsWeb.Layouts do

- - + +
@@ -904,8 +903,8 @@ defmodule ToweropsWeb.Layouts do Admin - - + +
- - + + - - + +

@@ -1351,8 +1351,8 @@ curl -X DELETE https://towerops.net/api/v1/devices/650e8400-e29b-41d4-a716-44665 Requires active browser session with CSRF token. Cannot be accessed via API tokens.

- - + +
@@ -1476,8 +1476,8 @@ Content-Disposition: attachment; filename="towerops-data-{user_id}-{timestamp}.j
- - + +

Alerts @@ -1485,8 +1485,8 @@ Content-Disposition: attachment; filename="towerops-data-{user_id}-{timestamp}.j

Alerts represent monitoring events triggered when a device check fails or recovers. You can list, view, acknowledge, and resolve alerts.

- - + +

The alert model

@@ -1606,8 +1606,8 @@ Content-Disposition: attachment; filename="towerops-data-{user_id}-{timestamp}.j

- - + +

List all alerts

@@ -1700,8 +1700,8 @@ curl -G https://towerops.net/api/v1/alerts \\

- - + +

Retrieve an alert

@@ -1733,8 +1733,8 @@ curl https://towerops.net/api/v1/alerts/a1b2c3d4-e5f6-7890-abcd-ef1234567890 \\

- - + +

@@ -1790,8 +1790,8 @@ curl -X POST https://towerops.net/api/v1/alerts/a1b2c3d4-e5f6-7890-abcd-ef123456


- - + +

Resolve an alert

@@ -1824,8 +1824,8 @@ curl -X POST https://towerops.net/api/v1/alerts/a1b2c3d4-e5f6-7890-abcd-ef123456


- - + +

Agents @@ -1833,8 +1833,8 @@ curl -X POST https://towerops.net/api/v1/alerts/a1b2c3d4-e5f6-7890-abcd-ef123456

Agents are lightweight monitoring agents that run on your infrastructure to collect device data. Each agent has a token used for authentication.

- - + +

The agent model

@@ -1908,8 +1908,8 @@ curl -X POST https://towerops.net/api/v1/alerts/a1b2c3d4-e5f6-7890-abcd-ef123456

- - + +

List all agents

@@ -1959,8 +1959,8 @@ curl -G https://towerops.net/api/v1/agents \\

- - + +

Create an agent

@@ -2027,8 +2027,8 @@ curl -X POST https://towerops.net/api/v1/agents \\

- - + +

Retrieve an agent

@@ -2079,8 +2079,8 @@ curl https://towerops.net/api/v1/agents/b2c3d4e5-f6a7-8901-bcde-f12345678901 \\

- - + +

Delete an agent

@@ -2121,8 +2121,8 @@ curl -X DELETE https://towerops.net/api/v1/agents/b2c3d4e5-f6a7-8901-bcde-f12345


- - + +

Organization @@ -2130,8 +2130,8 @@ curl -X DELETE https://towerops.net/api/v1/agents/b2c3d4e5-f6a7-8901-bcde-f12345

Retrieve and update settings for the authenticated organization, including SNMP defaults, MikroTik configuration, and general preferences.

- - + +

The organization model @@ -2220,8 +2220,8 @@ curl -X DELETE https://towerops.net/api/v1/agents/b2c3d4e5-f6a7-8901-bcde-f12345


- - + +

@@ -2287,8 +2287,8 @@ curl https://towerops.net/api/v1/organization \\


- - + +

@@ -2352,8 +2352,8 @@ curl -X PATCH https://towerops.net/api/v1/organization \\


- - + +

Members @@ -2361,8 +2361,8 @@ curl -X PATCH https://towerops.net/api/v1/organization \\

Manage the users who belong to your organization. You can list members, change roles, and remove members.

- - + +

The member model

@@ -2405,8 +2405,8 @@ curl -X PATCH https://towerops.net/api/v1/organization \\

- - + +

List all members

@@ -2461,8 +2461,8 @@ curl -G https://towerops.net/api/v1/members \\

- - + +

@@ -2514,8 +2514,8 @@ curl -X PATCH https://towerops.net/api/v1/members/user-uuid-2 \\


- - + +

Remove a member

@@ -2548,8 +2548,8 @@ curl -X DELETE https://towerops.net/api/v1/members/user-uuid-2 \\


- - + +

Invitations @@ -2557,8 +2557,8 @@ curl -X DELETE https://towerops.net/api/v1/members/user-uuid-2 \\

Invite new users to your organization. Invitations expire after 7 days.

- - + +

The invitation model @@ -2625,8 +2625,8 @@ curl -X DELETE https://towerops.net/api/v1/members/user-uuid-2 \\


- - + +

@@ -2679,8 +2679,8 @@ curl -G https://towerops.net/api/v1/invitations \\


- - + +

@@ -2743,8 +2743,8 @@ curl -X POST https://towerops.net/api/v1/invitations \\


- - + +

@@ -2779,8 +2779,8 @@ curl -X DELETE https://towerops.net/api/v1/invitations/inv-uuid-1 \\


- - + +

Integrations @@ -2788,8 +2788,8 @@ curl -X DELETE https://towerops.net/api/v1/invitations/inv-uuid-1 \\

Manage third-party integrations for your organization, such as notification providers and external monitoring systems.

- - + +

The integration model @@ -2867,8 +2867,8 @@ curl -X DELETE https://towerops.net/api/v1/invitations/inv-uuid-1 \\


- - + +

@@ -2923,8 +2923,8 @@ curl -G https://towerops.net/api/v1/integrations \\


- - + +

@@ -3001,8 +3001,8 @@ curl -X POST https://towerops.net/api/v1/integrations \\


- - + +

@@ -3036,8 +3036,8 @@ curl https://towerops.net/api/v1/integrations/intg-uuid-1 \\


- - + +

@@ -3073,8 +3073,8 @@ curl -X PATCH https://towerops.net/api/v1/integrations/intg-uuid-1 \\


- - + +

@@ -3108,8 +3108,8 @@ curl -X DELETE https://towerops.net/api/v1/integrations/intg-uuid-1 \\


- - + +

Test connection

@@ -3155,8 +3155,8 @@ curl -X POST https://towerops.net/api/v1/integrations/intg-uuid-1/test \\


- - + +

Checks @@ -3164,8 +3164,8 @@ curl -X POST https://towerops.net/api/v1/integrations/intg-uuid-1/test \\

Service checks monitor the availability and responsiveness of network services. Supported check types: HTTP, TCP, DNS, and ping. SNMP checks are managed internally and are not exposed via this API.

- - + +

The check model

@@ -3263,8 +3263,8 @@ curl -X POST https://towerops.net/api/v1/integrations/intg-uuid-1/test \\

- - + +

List all checks

@@ -3349,8 +3349,8 @@ curl -G https://towerops.net/api/v1/checks \

- - + +

Create a check

@@ -3483,8 +3483,8 @@ curl https://towerops.net/api/v1/checks \

- - + +

Retrieve a check

@@ -3518,8 +3518,8 @@ curl https://towerops.net/api/v1/checks/7c9e6679-7425-40de-944b-e07fc1f90ae7 \

- - + +

Update a check

@@ -3555,8 +3555,8 @@ curl -X PATCH https://towerops.net/api/v1/checks/7c9e6679-7425-40de-944b-e07fc1f

- - + +

Delete a check

@@ -3602,8 +3602,8 @@ curl -X DELETE https://towerops.net/api/v1/checks/7c9e6679-7425-40de-944b-e07fc1


- - + +

Check Results & Metrics @@ -3613,8 +3613,8 @@ curl -X DELETE https://towerops.net/api/v1/checks/7c9e6679-7425-40de-944b-e07fc1


- - + +

@@ -3669,8 +3669,8 @@ curl -G https://towerops.net/api/v1/devices/550e8400-e29b-41d4-a716-446655440000


- - + +

@@ -3754,8 +3754,8 @@ curl -G https://towerops.net/api/v1/devices/550e8400-e29b-41d4-a716-446655440000


- - + +

@@ -3812,8 +3812,8 @@ curl -G https://towerops.net/api/v1/devices/550e8400-e29b-41d4-a716-446655440000


- - + +

Activity Feed @@ -3823,8 +3823,8 @@ curl -G https://towerops.net/api/v1/devices/550e8400-e29b-41d4-a716-446655440000


- - + +

@@ -3910,8 +3910,8 @@ curl -G https://towerops.net/api/v1/activity \\


- - + +

RF Coverages @@ -4092,8 +4092,8 @@ curl -X DELETE https://towerops.net/api/v1/coverages/COV_ID \\


- - + +

Maintenance Windows @@ -4185,8 +4185,8 @@ curl -X DELETE https://towerops.net/api/v1/maintenance_windows/WINDOW_ID \\


- - + +

On-Call Schedules @@ -4313,8 +4313,8 @@ curl -X POST https://towerops.net/api/v1/schedules/SCHED_ID/overrides \


- - + +

Escalation Policies @@ -4413,8 +4413,8 @@ curl -X POST https://towerops.net/api/v1/escalation_policies/POLICY_ID/rules/RUL


- - + +

Terraform Provider @@ -4446,8 +4446,8 @@ curl -X POST https://towerops.net/api/v1/escalation_policies/POLICY_ID/rules/RUL

- - + +

What is Terraform?

@@ -4473,8 +4473,8 @@ curl -X POST https://towerops.net/api/v1/escalation_policies/POLICY_ID/rules/RUL


- - + +

Getting Started

@@ -4499,8 +4499,8 @@ curl -X POST https://towerops.net/api/v1/escalation_policies/POLICY_ID/rules/RUL
  • Towerops API token (create in Organization Settings)
  • - - + +
    @@ -4532,8 +4532,8 @@ provider "towerops" {

    - - + +

    Example Usage

    @@ -4607,8 +4607,8 @@ terraform destroy

    - - + +

    Available Resources

    @@ -4656,8 +4656,8 @@ terraform destroy

    - - + +

    Full Documentation

    @@ -4741,8 +4741,8 @@ terraform destroy

    - - + +
    - - + +

    Query: Devices @@ -461,8 +460,8 @@ }]) %>

    - - + +

    Query: Sites @@ -490,8 +489,8 @@
    <%= raw(~S[{ site(id: "site-uuid") { id name location } }]) %>

    - - + +

    Query: Alerts @@ -553,8 +552,8 @@ }]) %>

    - - + +

    Query: Agents @@ -577,8 +576,8 @@ { agent(id: "agent-uuid") { id name enabled deviceCount } }]) %>

    - - + +

    Query: Organization @@ -604,8 +603,8 @@ }]) %>

    - - + +

    Query: Members @@ -621,8 +620,8 @@ }]) %>

    - - + +

    Query: Integrations @@ -640,8 +639,8 @@ }]) %>

    - - + +

    Query: Activity @@ -661,8 +660,8 @@ }]) %>

    - - + +

    Query: Metrics & Interfaces @@ -732,8 +731,8 @@ }]) %>

    - - + +

    Query: Time-Series @@ -915,8 +914,8 @@ }]) %>

    - - + +

    Query: Service Checks @@ -955,8 +954,8 @@ }]) %>

    - - + +

    Query: On-Call Schedules @@ -1016,8 +1015,8 @@ }]) %>

    - - + +

    Query: Escalation Policies @@ -1062,8 +1061,8 @@ }]) %>

    - - + +

    Query: Maintenance Windows @@ -1088,8 +1087,8 @@ }]) %>

    - - + +

    Mutation: Devices @@ -1138,8 +1137,8 @@ }]) %>

    - - + +

    Mutation: Sites @@ -1165,8 +1164,8 @@

    Same pattern as device mutations.

    - - + +

    Mutation: Alert Actions @@ -1193,8 +1192,8 @@ }]) %>

    - - + +

    Mutation: Agent Management @@ -1219,8 +1218,8 @@
    <%= raw(~S[mutation { deleteAgent(id: "agent-uuid") { success message } }]) %>

    - - + +

    Mutation: Organization Settings @@ -1246,8 +1245,8 @@ }]) %>

    - - + +

    Mutation: Members @@ -1284,8 +1283,8 @@ mutation { cancelInvitation(id: "invitation-uuid") { success message } }]) %>

    - - + +

    Mutation: Integrations @@ -1317,8 +1316,8 @@ mutation { cancelInvitation(id: "invitation-uuid") { success message } }]) %>

    - - + +

    Mutation: Service Checks @@ -1359,8 +1358,8 @@ mutation { }]) %>

    - - + +

    Mutation: Schedules @@ -1439,8 +1438,8 @@ mutation { }]) %>

    - - + +

    Mutation: Escalation Policies @@ -1499,8 +1498,8 @@ mutation { }]) %>

    - - + +

    Mutation: Maintenance Windows @@ -1535,8 +1534,8 @@ mutation { }]) %>

    - - + +

    Subscriptions @@ -1677,8 +1676,8 @@ subscription { }]) %>

    - - + +

    Types Reference @@ -1795,8 +1794,8 @@ subscription { id, name, enabled, token, insertedAt

    - - + +

    curl Examples diff --git a/lib/towerops_web/controllers/page_html/home.html.heex b/lib/towerops_web/controllers/page_html/home.html.heex index c5fc1583..716f740c 100644 --- a/lib/towerops_web/controllers/page_html/home.html.heex +++ b/lib/towerops_web/controllers/page_html/home.html.heex @@ -42,8 +42,8 @@ - - + +
    @@ -81,8 +81,8 @@
    - - + +
    - - + +
    - - + +
    @@ -312,8 +312,8 @@
    - - + +
    @@ -410,8 +410,8 @@

    - - + +
    @@ -450,8 +450,8 @@
    - - + +
    diff --git a/lib/towerops_web/controllers/user_registration_html/new.html.heex b/lib/towerops_web/controllers/user_registration_html/new.html.heex index d3cada4f..a36bab06 100644 --- a/lib/towerops_web/controllers/user_registration_html/new.html.heex +++ b/lib/towerops_web/controllers/user_registration_html/new.html.heex @@ -36,8 +36,8 @@
    - - + +
    @@ -63,8 +63,8 @@

    - - + + <%= unless @invitation do %>
    <.icon name="hero-gift" class="size-5 flex-shrink-0" /> diff --git a/lib/towerops_web/controllers/user_session_html/new.html.heex b/lib/towerops_web/controllers/user_session_html/new.html.heex index 2340cc30..ff28c459 100644 --- a/lib/towerops_web/controllers/user_session_html/new.html.heex +++ b/lib/towerops_web/controllers/user_session_html/new.html.heex @@ -23,8 +23,8 @@
    - - + +
    @@ -133,8 +133,8 @@
    - - + + <.form :let={f} for={@form} as={:user} id="login_form_magic" action={~p"/users/log-in"}> <.input readonly={!!@current_scope} diff --git a/lib/towerops_web/live/account_live/my_data.ex b/lib/towerops_web/live/account_live/my_data.ex index 95a31cea..200f2e64 100644 --- a/lib/towerops_web/live/account_live/my_data.ex +++ b/lib/towerops_web/live/account_live/my_data.ex @@ -149,8 +149,8 @@ defmodule ToweropsWeb.AccountLive.MyData do This page shows all personal data we have stored about you in compliance with GDPR Article 15 (Right to Access).

    - - + +

    Profile Information

    @@ -206,8 +206,8 @@ defmodule ToweropsWeb.AccountLive.MyData do
    - - + +

    @@ -340,8 +340,8 @@ defmodule ToweropsWeb.AccountLive.MyData do <% end %>

    - - + +

    @@ -402,8 +402,8 @@ defmodule ToweropsWeb.AccountLive.MyData do <% end %>

    - - + +

    @@ -471,8 +471,8 @@ defmodule ToweropsWeb.AccountLive.MyData do

    <% end %> - - + +

    @@ -515,8 +515,8 @@ defmodule ToweropsWeb.AccountLive.MyData do <% end %>

    - - + +
    <.icon @@ -539,8 +539,8 @@ defmodule ToweropsWeb.AccountLive.MyData do
    - - + +

    diff --git a/lib/towerops_web/live/account_live/totp_enrollment.ex b/lib/towerops_web/live/account_live/totp_enrollment.ex index 61130f04..8201323d 100644 --- a/lib/towerops_web/live/account_live/totp_enrollment.ex +++ b/lib/towerops_web/live/account_live/totp_enrollment.ex @@ -212,16 +212,16 @@ defmodule ToweropsWeb.AccountLive.TotpEnrollment do <.icon name="hero-arrow-down-tray" class="w-5 h-5 mr-2" /> Download

    - - + + - - + +
    - - + +

    @@ -306,8 +306,8 @@ defmodule ToweropsWeb.AccountLive.TotpEnrollment do

    <% end %> - - + +

    diff --git a/lib/towerops_web/live/activity_feed_live.html.heex b/lib/towerops_web/live/activity_feed_live.html.heex index 8df4029c..1c027b25 100644 --- a/lib/towerops_web/live/activity_feed_live.html.heex +++ b/lib/towerops_web/live/activity_feed_live.html.heex @@ -7,8 +7,7 @@ <.header>
    - - + {t("Activity Feed")} @@ -125,8 +124,7 @@ - - + {t("Live")} diff --git a/lib/towerops_web/live/admin/audit_live/index.ex b/lib/towerops_web/live/admin/audit_live/index.ex index 4120654f..b578c64d 100644 --- a/lib/towerops_web/live/admin/audit_live/index.ex +++ b/lib/towerops_web/live/admin/audit_live/index.ex @@ -89,8 +89,8 @@ defmodule ToweropsWeb.Admin.AuditLive.Index do View and search all system audit logs. Records are retained for 3 years.

    - - + +
    @@ -181,8 +181,8 @@ defmodule ToweropsWeb.Admin.AuditLive.Index do
    - - + +
    <%= if Enum.empty?(@audit_logs) do %>
    @@ -279,8 +279,8 @@ defmodule ToweropsWeb.Admin.AuditLive.Index do
    - - + +
    Page {@page} • Showing {length(@audit_logs)} records diff --git a/lib/towerops_web/live/admin/monitoring_live.html.heex b/lib/towerops_web/live/admin/monitoring_live.html.heex index dcc69770..965fb227 100644 --- a/lib/towerops_web/live/admin/monitoring_live.html.heex +++ b/lib/towerops_web/live/admin/monitoring_live.html.heex @@ -8,8 +8,8 @@ {t("Real-time monitoring of polling and discovery jobs")}

    - - + +

    Completed (1h)

    @@ -47,8 +47,8 @@

    executing now

    - - + +

    Active Operations ({length(@executing_jobs)}) @@ -85,8 +85,8 @@

    <% end %>
    - - + + <%= if length(@stuck_jobs) > 0 or length(@failed_jobs) > 0 do %>

    @@ -158,14 +158,14 @@ <% end %>

    <% end %> - - + +

    {t("Health Metrics")}

    - - + +

    {t("Current Activity")} @@ -197,8 +197,8 @@

    - - + +

    {t("Success Rates")} @@ -237,8 +237,8 @@

    - - + +

    {t("Performance")} @@ -262,8 +262,8 @@

    - - + +

    {t("Queue Depths")} @@ -290,8 +290,8 @@

    - - + +

    {t("Recent Activity")} diff --git a/lib/towerops_web/live/admin/org_live/index.html.heex b/lib/towerops_web/live/admin/org_live/index.html.heex index c7500bdc..53b176ff 100644 --- a/lib/towerops_web/live/admin/org_live/index.html.heex +++ b/lib/towerops_web/live/admin/org_live/index.html.heex @@ -4,8 +4,8 @@

    {t("All Organizations")}

    {t_admin("Manage organizations")}

    - - + +
    - - + +
    - - + + <%= if @current_tab == "whitelist" do %>
    diff --git a/lib/towerops_web/live/agent_live/index.html.heex b/lib/towerops_web/live/agent_live/index.html.heex index b74c69cf..addd97b2 100644 --- a/lib/towerops_web/live/agent_live/index.html.heex +++ b/lib/towerops_web/live/agent_live/index.html.heex @@ -13,8 +13,8 @@ - - + + <% end %> - - + + <%= if @show_token_modal && @new_token do %>
    - - + +
    - - + +
    - - + +
    - - +
    @@ -175,8 +174,8 @@ <.icon name="hero-signal" class="h-8 w-8 text-gray-400 dark:text-gray-500" />
    - - + +
    @@ -191,8 +190,8 @@ <.icon name="hero-server" class="h-8 w-8 text-gray-400 dark:text-gray-500" />
    - - + +
    @@ -218,8 +217,8 @@ <.icon name="hero-clock" class="h-8 w-8 text-gray-400 dark:text-gray-500 flex-shrink-0" />
    - - + +
    @@ -238,8 +237,8 @@
    - - + + <%= if @agent_token.metadata && map_size(@agent_token.metadata) > 0 do %>

    @@ -265,8 +264,8 @@

    <% end %> - - + +

    {t("Timestamps")} @@ -305,8 +304,8 @@ <% end %>

    - - + +

    diff --git a/lib/towerops_web/live/alert_live/index.html.heex b/lib/towerops_web/live/alert_live/index.html.heex index c041fe6b..413599db 100644 --- a/lib/towerops_web/live/alert_live/index.html.heex +++ b/lib/towerops_web/live/alert_live/index.html.heex @@ -402,8 +402,7 @@

    - - + {t("Triggered")} @@ -416,8 +415,7 @@
    <%= if alert.acknowledged_at do %>
    - - + {t("Ack'd")} @@ -436,8 +434,7 @@ <% end %> <%= if alert.resolved_at do %>
    - - + {t("Resolved")} diff --git a/lib/towerops_web/live/check_live/form_component.ex b/lib/towerops_web/live/check_live/form_component.ex index 7875240e..493ae1f0 100644 --- a/lib/towerops_web/live/check_live/form_component.ex +++ b/lib/towerops_web/live/check_live/form_component.ex @@ -57,8 +57,8 @@ defmodule ToweropsWeb.CheckLive.FormComponent do disabled={@action == :edit} />
    - - + +
    <.input field={@form[:name]} @@ -67,8 +67,8 @@ defmodule ToweropsWeb.CheckLive.FormComponent do placeholder="e.g., Web Server Check" />
    - - + + <%= case @selected_type do %> <% "http" -> %> {render_http_fields(assigns)} @@ -83,8 +83,8 @@ defmodule ToweropsWeb.CheckLive.FormComponent do Select a check type to configure
    <% end %> - - + +
    <.input diff --git a/lib/towerops_web/live/coverage_live/map.html.heex b/lib/towerops_web/live/coverage_live/map.html.heex index bd636914..68e92b3d 100644 --- a/lib/towerops_web/live/coverage_live/map.html.heex +++ b/lib/towerops_web/live/coverage_live/map.html.heex @@ -148,8 +148,7 @@ do: "bg-green-500", else: "bg-gray-300 dark:bg-gray-600" ) - ]}> - + ]}> {c.name} {c.site && c.site.name} @@ -203,14 +202,11 @@
    ≥-50 - - + -65 - - + -75 - - + -85 ≤-95 dBm diff --git a/lib/towerops_web/live/coverage_live/show.html.heex b/lib/towerops_web/live/coverage_live/show.html.heex index 32310f51..94fa718b 100644 --- a/lib/towerops_web/live/coverage_live/show.html.heex +++ b/lib/towerops_web/live/coverage_live/show.html.heex @@ -285,17 +285,13 @@
    ≥-50 - - + -65 - - + -75 - - + -85 - - + ≤-95 dBm
    diff --git a/lib/towerops_web/live/dashboard_live.html.heex b/lib/towerops_web/live/dashboard_live.html.heex index c70511d2..9b4226b9 100644 --- a/lib/towerops_web/live/dashboard_live.html.heex +++ b/lib/towerops_web/live/dashboard_live.html.heex @@ -26,8 +26,7 @@
    - - + Live @@ -597,8 +596,7 @@ - + ]}> {site.name} diff --git a/lib/towerops_web/live/device_live/form.html.heex b/lib/towerops_web/live/device_live/form.html.heex index f07f1f35..176a91bd 100644 --- a/lib/towerops_web/live/device_live/form.html.heex +++ b/lib/towerops_web/live/device_live/form.html.heex @@ -210,8 +210,8 @@
    - - + +

    @@ -319,8 +319,8 @@

    - - + +

    @@ -383,8 +383,8 @@ <% end %>

    - - + +
    - - + +
    <% end %>
    - - + + <%= if @form[:snmp_version].value == "3" do %>
    <.input @@ -480,8 +480,8 @@ if Map.has_key?(@form.params, "snmpv3_security_level"), do: @form.params["snmpv3_security_level"], else: current_security_level %> - - + +
    <.input field={@form[:snmpv3_security_level]} @@ -494,8 +494,8 @@ ]} />
    - - + + <%= if selected_security_level in ["authNoPriv", "authPriv"] do %>
    <.input @@ -523,8 +523,8 @@ />
    <% end %> - - + + <%= if selected_security_level == "authPriv" do %>
    <.input @@ -748,8 +748,8 @@
    <% end %>
    - - + +
    <.button navigate={~p"/devices"}>{t("Cancel")} <.button @@ -761,8 +761,8 @@
    - - + + <%= if @live_action == :edit do %>
    diff --git a/lib/towerops_web/live/device_live/index.html.heex b/lib/towerops_web/live/device_live/index.html.heex index 1e630e4f..1dfb7366 100644 --- a/lib/towerops_web/live/device_live/index.html.heex +++ b/lib/towerops_web/live/device_live/index.html.heex @@ -353,16 +353,14 @@ :if={row.stats.up > 0} class="text-green-600 dark:text-green-400" > - - + {row.stats.up} 0} class="text-red-600 dark:text-red-400 font-medium" > - - + {row.stats.down} <%= if row.site && @site_subscribers[row.site.id] do %> @@ -663,8 +661,11 @@
    <% end %> - - + +
    - - + +
    @@ -537,8 +537,8 @@ defmodule ToweropsWeb.HelpLive.Index do

    - - + +
    @@ -741,8 +741,8 @@ defmodule ToweropsWeb.HelpLive.Index do

    - - + +
    @@ -758,8 +758,8 @@ defmodule ToweropsWeb.HelpLive.Index do

    - - + +
    @@ -779,8 +779,8 @@ defmodule ToweropsWeb.HelpLive.Index do

    - - + +
    @@ -954,8 +954,8 @@ defmodule ToweropsWeb.HelpLive.Index do

    - - + +
    @@ -1004,8 +1004,8 @@ defmodule ToweropsWeb.HelpLive.Index do

    - - + +
    @@ -1030,8 +1030,8 @@ defmodule ToweropsWeb.HelpLive.Index do

    - - + +
    diff --git a/lib/towerops_web/live/map_live/index.html.heex b/lib/towerops_web/live/map_live/index.html.heex index 13c4bacd..c0599127 100644 --- a/lib/towerops_web/live/map_live/index.html.heex +++ b/lib/towerops_web/live/map_live/index.html.heex @@ -41,8 +41,8 @@
    - - + +
    - - + +
    @@ -92,8 +92,8 @@
    - - + +

    diff --git a/lib/towerops_web/live/network_map_live.html.heex b/lib/towerops_web/live/network_map_live.html.heex index f4e7943b..2f5d13a2 100644 --- a/lib/towerops_web/live/network_map_live.html.heex +++ b/lib/towerops_web/live/network_map_live.html.heex @@ -15,16 +15,15 @@ <:actions>
    - - + Live
    - - + +

    - - + +
    @@ -256,8 +255,8 @@
    - - + +
    @@ -276,8 +275,8 @@
    - - + +
    - - + +
    - - + + <%= if @selected_node_detail do %>
    - - + +

    @@ -396,16 +395,15 @@ do: "bg-green-400", else: "bg-red-400" ) - ]}> - + ]}> {@selected_node_detail.status}

    <% end %>
    - - + + <%= if @selected_node_detail[:is_wireless] do %>

    @@ -459,8 +457,8 @@

    <% end %> - - + + <%= if length(@selected_node_detail.connections) > 0 do %>

    @@ -499,8 +497,8 @@

    <% end %> - - + + <%= if @selected_node_detail.type == :managed do %>
    <.link @@ -527,8 +525,8 @@
    <% end %>
    - - + +
    <%!-- Device roles --%> @@ -606,8 +604,8 @@
    - - + + <%= if @topology.stats.total_devices == 0 do %>
    <.icon name="hero-map" class="mx-auto h-12 w-12 text-gray-400 dark:text-gray-500" /> diff --git a/lib/towerops_web/live/org/settings_live.html.heex b/lib/towerops_web/live/org/settings_live.html.heex index e2ab170c..fb3032c0 100644 --- a/lib/towerops_web/live/org/settings_live.html.heex +++ b/lib/towerops_web/live/org/settings_live.html.heex @@ -173,8 +173,8 @@
    <% end %> - - + +

    @@ -225,8 +225,8 @@ <% end %>

    - - + +

    @@ -271,8 +271,8 @@

    - - + +
    - - + +
    - - + +
    <.link navigate={~p"/dashboard"} @@ -791,8 +791,8 @@
    <% end %> - - + + <%= if @pending_invitations != [] do %>
    @@ -872,8 +872,8 @@
    <% end %> - - + +

    diff --git a/lib/towerops_web/live/schedule_live/index.html.heex b/lib/towerops_web/live/schedule_live/index.html.heex index 41aec2ae..ae3bc774 100644 --- a/lib/towerops_web/live/schedule_live/index.html.heex +++ b/lib/towerops_web/live/schedule_live/index.html.heex @@ -199,8 +199,7 @@ - + ]}> {schedule.current_on_call_name} diff --git a/lib/towerops_web/live/site_live/form.html.heex b/lib/towerops_web/live/site_live/form.html.heex index 45c2e654..d253d9ae 100644 --- a/lib/towerops_web/live/site_live/form.html.heex +++ b/lib/towerops_web/live/site_live/form.html.heex @@ -64,8 +64,8 @@ />

    - - + +

    {t("Geographic Location")} @@ -151,8 +151,8 @@

    - - + + <%= if @form[:latitude].value && @form[:longitude].value do %>
    @@ -270,8 +270,8 @@ prompt="Inherit from organization" options={[{"v1", "1"}, {"v2c", "2c"}, {"v3", "3"}]} /> - - + + <%= if @form[:snmp_version].value in ["1", "2c"] do %> <.input field={@form[:snmp_community]} @@ -280,8 +280,8 @@ placeholder={t("Leave blank to inherit from organization")} /> <% end %> - - + + <%= if @form[:snmp_version].value == "3" do %> <.input field={@form[:snmpv3_security_level]} @@ -301,8 +301,8 @@ label={t("Username")} placeholder={t("Leave blank to inherit from organization")} /> - - + + <%= if @form[:snmpv3_security_level].value in ["authNoPriv", "authPriv"] do %> <.input field={@form[:snmpv3_auth_protocol]} @@ -327,8 +327,8 @@ autocomplete="off" /> <% end %> - - + + <%= if @form[:snmpv3_security_level].value == "authPriv" do %> <.input field={@form[:snmpv3_priv_protocol]} diff --git a/lib/towerops_web/live/site_live/index.html.heex b/lib/towerops_web/live/site_live/index.html.heex index 26142955..c94e7e6e 100644 --- a/lib/towerops_web/live/site_live/index.html.heex +++ b/lib/towerops_web/live/site_live/index.html.heex @@ -84,8 +84,7 @@ - + ]}> {site.name}

    diff --git a/lib/towerops_web/live/site_live/show.html.heex b/lib/towerops_web/live/site_live/show.html.heex index 7ca6f720..df1ef300 100644 --- a/lib/towerops_web/live/site_live/show.html.heex +++ b/lib/towerops_web/live/site_live/show.html.heex @@ -21,8 +21,8 @@ <% end %>

    - - + + <%= if @site.latitude && @site.longitude do %>
    {device.ip_address} - - + {device.status || "unknown"} @@ -181,8 +180,7 @@ :for={alert <- @trace.alerts} class="flex items-start gap-3 p-2 rounded-lg hover:bg-gray-100/50 dark:hover:bg-gray-800/50 dark:hover:bg-white/5" > - - +
    @@ -326,8 +324,7 @@ - + ]}> {String.capitalize(to_string(@trace.device.status))}
    @@ -542,8 +539,7 @@ - + ]}>
    {format_alert_type(alert.alert_type)} @@ -626,8 +622,7 @@ - + ]}>
    {insight.title} diff --git a/lib/towerops_web/live/user_settings_live.html.heex b/lib/towerops_web/live/user_settings_live.html.heex index be8a5654..7e6c27aa 100644 --- a/lib/towerops_web/live/user_settings_live.html.heex +++ b/lib/towerops_web/live/user_settings_live.html.heex @@ -457,8 +457,8 @@
    <% end %> - - + + <%= if @active_tab == "account" do %>
    @@ -509,8 +509,8 @@
    - - + +

    @@ -603,8 +603,8 @@

    - - + +

    @@ -648,8 +648,8 @@

    <% end %> - - + + <%= if @active_tab == "api" do %>
    @@ -742,8 +742,8 @@
    <% end %> - - + + <%= if @active_tab == "notifications" do %>
    @@ -843,8 +843,8 @@
    <% end %> - - + + <%= if @active_tab == "sessions" do %> <%= if @show_security_alert do %> @@ -870,8 +870,8 @@
    <% end %> - - + +

    @@ -971,8 +971,8 @@ <% end %>

    - - + +
    @@ -1097,8 +1097,8 @@ {t("Next")}
    - - + + <% end %> - - + + <%= if @active_tab == "security" do %>
    @@ -1279,8 +1279,8 @@ <% end %>
    - - + +

    @@ -1353,8 +1353,8 @@

    <% end %>
    - - + + <%= if @show_revoke_all_modal do %>
    <% end %> - - + + <%= if @show_add_token_modal do %>
    <% end %> - - + + <%= if @show_token_modal && @created_token do %>
    <% end %> - - + + <%= if @show_add_device_modal do %>
    <% end %> - - + + <%= if @show_device_qr_modal && @new_device_qr_code do %>
    - - + +
    TOTP QR Code
    - - + +

    {t("Enter the 6-digit code from your app to verify")} @@ -1794,8 +1794,8 @@

    <% end %> - - + + <%= if @show_recovery_codes_modal && @generated_recovery_codes do %>
    - - + +
    @@ -1846,8 +1846,8 @@
    - - + +
    - - + + - - + +
    @@ -1906,8 +1906,8 @@
    <% end %> - - + + <%= if @show_delete_modal do %>
    - - + 60s refresh @@ -52,8 +51,7 @@
    - - + 60s refresh @@ -68,8 +66,8 @@
    <% end %> - - + +
    - - + +
    @@ -342,8 +340,8 @@
    - - + +
    - - + +
    - - + +

    Link Utilization

    @@ -412,8 +410,8 @@ Last updated: <.timestamp datetime={@topology.last_updated} timezone={@timezone} />
    - - + + <%= if @selected_node_detail do %>
    - - + +

    @@ -491,16 +489,15 @@ do: "bg-green-400", else: "bg-red-400" ) - ]}> - + ]}> {@selected_node_detail.status}

    <% end %>
    - - + + <%= if @selected_node_detail[:utilization_stats] do %>

    @@ -534,8 +531,8 @@

    <% end %> - - + + <%= if length(@selected_node_detail.connections) > 0 do %>

    @@ -579,8 +576,8 @@

    <% end %> - - + + <%= if @selected_node_detail.type == :managed do %>
    <.link @@ -597,8 +594,8 @@ <% end %>
    - - + + <%= if @topology.stats.total_devices == 0 do %>
    diff --git a/mix.exs b/mix.exs index 67fbcfea..1d542998 100644 --- a/mix.exs +++ b/mix.exs @@ -87,7 +87,7 @@ defmodule Towerops.MixProject do {:postgrex, ">= 0.0.0"}, {:phoenix_html, "~> 4.1"}, {:phoenix_live_reload, "~> 1.2", only: :dev}, - {:phoenix_live_view, "~> 1.1.28"}, + {:phoenix_live_view, "~> 1.2"}, {:lazy_html, ">= 0.1.0", only: :test}, {:phoenix_live_dashboard, "~> 0.8.3"}, {:esbuild, "~> 0.10", runtime: Mix.env() == :dev}, diff --git a/mix.lock b/mix.lock index 27a275e3..d4d95478 100644 --- a/mix.lock +++ b/mix.lock @@ -72,7 +72,7 @@ "phoenix_html": {:hex, :phoenix_html, "4.3.0", "d3577a5df4b6954cd7890c84d955c470b5310bb49647f0a114a6eeecc850f7ad", [:mix], [], "hexpm", "3eaa290a78bab0f075f791a46a981bbe769d94bc776869f4f3063a14f30497ad"}, "phoenix_live_dashboard": {:hex, :phoenix_live_dashboard, "0.8.7", "405880012cb4b706f26dd1c6349125bfc903fb9e44d1ea668adaf4e04d4884b7", [:mix], [{:ecto, "~> 3.6.2 or ~> 3.7", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_mysql_extras, "~> 0.5", [hex: :ecto_mysql_extras, repo: "hexpm", optional: true]}, {:ecto_psql_extras, "~> 0.7", [hex: :ecto_psql_extras, repo: "hexpm", optional: true]}, {:ecto_sqlite3_extras, "~> 1.1.7 or ~> 1.2.0", [hex: :ecto_sqlite3_extras, repo: "hexpm", optional: true]}, {:mime, "~> 1.6 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 0.19 or ~> 1.0", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6 or ~> 1.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "3a8625cab39ec261d48a13b7468dc619c0ede099601b084e343968309bd4d7d7"}, "phoenix_live_reload": {:hex, :phoenix_live_reload, "1.6.2", "b18b0773a1ba77f28c52decbb0f10fd1ac4d3ae5b8632399bbf6986e3b665f62", [:mix], [{:file_system, "~> 0.2.10 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "d1f89c18114c50d394721365ffb428cce24f1c13de0467ffa773e2ff4a30d5b9"}, - "phoenix_live_view": {:hex, :phoenix_live_view, "1.1.32", "4977ad4cfab7868f3d2ba390a2cd6c62412614d48f798e85785602281a0a3827", [:mix], [{:igniter, ">= 0.6.16 and < 1.0.0-0", [hex: :igniter, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:lazy_html, "~> 0.1.0", [hex: :lazy_html, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.15 or ~> 1.7.0 or ~> 1.8.0-rc", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.3 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.15", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "3c9d8e76373414259ec5699a809991d1324808bee1d297730599e273282cee34"}, + "phoenix_live_view": {:hex, :phoenix_live_view, "1.2.6", "b2b50c51993b068fe2a29eda45ca4fe67bf74f146343468485686a253c65a8da", [:mix], [{:igniter, ">= 0.6.16 and < 1.0.0-0", [hex: :igniter, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:lazy_html, "~> 0.1.0", [hex: :lazy_html, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.15 or ~> 1.7.0 or ~> 1.8.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.3 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.15", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "5dc549a78dab94e80a340c760090e9e7bab16ac47841e34f4fff5819e02cbf35"}, "phoenix_pubsub": {:hex, :phoenix_pubsub, "2.2.0", "ff3a5616e1bed6804de7773b92cbccfc0b0f473faf1f63d7daf1206c7aeaaa6f", [:mix], [], "hexpm", "adc313a5bf7136039f63cfd9668fde73bba0765e0614cba80c06ac9460ff3e96"}, "phoenix_pubsub_redis": {:hex, :phoenix_pubsub_redis, "3.1.1", "54919406b0b6401e0f643e26fd3b814bc3460f3fd3a32aa9c3a473db89e9dca7", [:mix], [{:nimble_options, "~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:phoenix_pubsub, "~> 2.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:poolboy, "~> 1.5.1 or ~> 1.6", [hex: :poolboy, repo: "hexpm", optional: false]}, {:redix, "~> 1.0", [hex: :redix, repo: "hexpm", optional: false]}], "hexpm", "e339963f649e7cf52bd352e55fab7bebb42b65b501e43499dd6eb56890703c32"}, "phoenix_template": {:hex, :phoenix_template, "1.0.4", "e2092c132f3b5e5b2d49c96695342eb36d0ed514c5b252a77048d5969330d639", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "2c0c81f0e5c6753faf5cca2f229c9709919aba34fab866d3bc05060c9c444206"},