- Replace terse helper text with step-by-step setup guide in config form - Add what-gets-synced breakdown when PagerDuty is enabled - Clear visual hierarchy with numbered steps and inline callout
212 lines
6 KiB
Elixir
212 lines
6 KiB
Elixir
defmodule ToweropsWeb.GraphQL.Schema do
|
|
@moduledoc """
|
|
GraphQL schema for the TowerOps API.
|
|
|
|
Provides a complete GraphQL interface for managing devices, sites, alerts,
|
|
agents, organization settings, members, integrations, and activity feeds.
|
|
"""
|
|
use Absinthe.Schema
|
|
|
|
import_types ToweropsWeb.GraphQL.Types.Common
|
|
import_types ToweropsWeb.GraphQL.Types.Device
|
|
import_types ToweropsWeb.GraphQL.Types.Site
|
|
import_types ToweropsWeb.GraphQL.Types.Alert
|
|
import_types ToweropsWeb.GraphQL.Types.Agent
|
|
import_types ToweropsWeb.GraphQL.Types.Organization
|
|
import_types ToweropsWeb.GraphQL.Types.Member
|
|
import_types ToweropsWeb.GraphQL.Types.Integration
|
|
import_types ToweropsWeb.GraphQL.Types.Activity
|
|
|
|
query do
|
|
# Devices
|
|
field :devices, list_of(:device) do
|
|
arg :site_id, :id
|
|
arg :status, :string
|
|
arg :limit, :integer, default_value: 100
|
|
resolve &ToweropsWeb.GraphQL.Resolvers.Device.list/3
|
|
end
|
|
|
|
field :device, :device do
|
|
arg :id, non_null(:id)
|
|
resolve &ToweropsWeb.GraphQL.Resolvers.Device.get/3
|
|
end
|
|
|
|
# Sites
|
|
field :sites, list_of(:site) do
|
|
resolve &ToweropsWeb.GraphQL.Resolvers.Site.list/3
|
|
end
|
|
|
|
field :site, :site do
|
|
arg :id, non_null(:id)
|
|
resolve &ToweropsWeb.GraphQL.Resolvers.Site.get/3
|
|
end
|
|
|
|
# Alerts
|
|
field :alerts, list_of(:alert) do
|
|
arg :status, :string
|
|
arg :device_id, :id
|
|
arg :limit, :integer, default_value: 100
|
|
resolve &ToweropsWeb.GraphQL.Resolvers.Alert.list/3
|
|
end
|
|
|
|
field :alert, :alert do
|
|
arg :id, non_null(:id)
|
|
resolve &ToweropsWeb.GraphQL.Resolvers.Alert.get/3
|
|
end
|
|
|
|
# Agents
|
|
field :agents, list_of(:agent) do
|
|
resolve &ToweropsWeb.GraphQL.Resolvers.Agent.list/3
|
|
end
|
|
|
|
field :agent, :agent do
|
|
arg :id, non_null(:id)
|
|
resolve &ToweropsWeb.GraphQL.Resolvers.Agent.get/3
|
|
end
|
|
|
|
# Organization
|
|
field :organization, :organization do
|
|
resolve &ToweropsWeb.GraphQL.Resolvers.Organization.get/3
|
|
end
|
|
|
|
# Members
|
|
field :members, list_of(:member) do
|
|
resolve &ToweropsWeb.GraphQL.Resolvers.Member.list/3
|
|
end
|
|
|
|
# Integrations
|
|
field :integrations, list_of(:integration) do
|
|
resolve &ToweropsWeb.GraphQL.Resolvers.Integration.list/3
|
|
end
|
|
|
|
# Activity feed
|
|
field :activity, list_of(:activity_item) do
|
|
arg :limit, :integer, default_value: 50
|
|
arg :type, :string
|
|
resolve &ToweropsWeb.GraphQL.Resolvers.Activity.list/3
|
|
end
|
|
|
|
# Device metrics
|
|
field :device_metrics, list_of(:metric_point) do
|
|
arg :device_id, non_null(:id)
|
|
arg :sensor_type, :string
|
|
arg :time_range, :string, default_value: "24h"
|
|
resolve &ToweropsWeb.GraphQL.Resolvers.Device.metrics/3
|
|
end
|
|
|
|
# Device interfaces
|
|
field :device_interfaces, list_of(:interface) do
|
|
arg :device_id, non_null(:id)
|
|
resolve &ToweropsWeb.GraphQL.Resolvers.Device.interfaces/3
|
|
end
|
|
end
|
|
|
|
mutation do
|
|
# Device CRUD
|
|
field :create_device, :device do
|
|
arg :input, non_null(:device_input)
|
|
resolve &ToweropsWeb.GraphQL.Resolvers.Device.create/3
|
|
end
|
|
|
|
field :update_device, :device do
|
|
arg :id, non_null(:id)
|
|
arg :input, non_null(:device_input)
|
|
resolve &ToweropsWeb.GraphQL.Resolvers.Device.update/3
|
|
end
|
|
|
|
field :delete_device, :delete_result do
|
|
arg :id, non_null(:id)
|
|
resolve &ToweropsWeb.GraphQL.Resolvers.Device.delete/3
|
|
end
|
|
|
|
# Site CRUD
|
|
field :create_site, :site do
|
|
arg :input, non_null(:site_input)
|
|
resolve &ToweropsWeb.GraphQL.Resolvers.Site.create/3
|
|
end
|
|
|
|
field :update_site, :site do
|
|
arg :id, non_null(:id)
|
|
arg :input, non_null(:site_input)
|
|
resolve &ToweropsWeb.GraphQL.Resolvers.Site.update/3
|
|
end
|
|
|
|
field :delete_site, :delete_result do
|
|
arg :id, non_null(:id)
|
|
resolve &ToweropsWeb.GraphQL.Resolvers.Site.delete/3
|
|
end
|
|
|
|
# Alert actions
|
|
field :acknowledge_alert, :alert do
|
|
arg :id, non_null(:id)
|
|
resolve &ToweropsWeb.GraphQL.Resolvers.Alert.acknowledge/3
|
|
end
|
|
|
|
field :resolve_alert, :alert do
|
|
arg :id, non_null(:id)
|
|
resolve &ToweropsWeb.GraphQL.Resolvers.Alert.resolve_alert/3
|
|
end
|
|
|
|
# Agent management
|
|
field :create_agent, :agent_with_token do
|
|
arg :name, non_null(:string)
|
|
resolve &ToweropsWeb.GraphQL.Resolvers.Agent.create/3
|
|
end
|
|
|
|
field :delete_agent, :delete_result do
|
|
arg :id, non_null(:id)
|
|
resolve &ToweropsWeb.GraphQL.Resolvers.Agent.delete/3
|
|
end
|
|
|
|
# Organization settings
|
|
field :update_organization, :organization do
|
|
arg :input, non_null(:organization_input)
|
|
resolve &ToweropsWeb.GraphQL.Resolvers.Organization.update/3
|
|
end
|
|
|
|
# Member management
|
|
field :send_invitation, :invitation do
|
|
arg :email, non_null(:string)
|
|
arg :role, :string, default_value: "member"
|
|
resolve &ToweropsWeb.GraphQL.Resolvers.Member.invite/3
|
|
end
|
|
|
|
field :cancel_invitation, :delete_result do
|
|
arg :id, non_null(:id)
|
|
resolve &ToweropsWeb.GraphQL.Resolvers.Member.cancel_invitation/3
|
|
end
|
|
|
|
field :remove_member, :delete_result do
|
|
arg :id, non_null(:id)
|
|
resolve &ToweropsWeb.GraphQL.Resolvers.Member.remove/3
|
|
end
|
|
|
|
field :update_member_role, :member do
|
|
arg :id, non_null(:id)
|
|
arg :role, non_null(:string)
|
|
resolve &ToweropsWeb.GraphQL.Resolvers.Member.update_role/3
|
|
end
|
|
|
|
# Integrations
|
|
field :create_integration, :integration do
|
|
arg :input, non_null(:integration_input)
|
|
resolve &ToweropsWeb.GraphQL.Resolvers.Integration.create/3
|
|
end
|
|
|
|
field :update_integration, :integration do
|
|
arg :id, non_null(:id)
|
|
arg :input, non_null(:integration_input)
|
|
resolve &ToweropsWeb.GraphQL.Resolvers.Integration.update/3
|
|
end
|
|
|
|
field :delete_integration, :delete_result do
|
|
arg :id, non_null(:id)
|
|
resolve &ToweropsWeb.GraphQL.Resolvers.Integration.delete/3
|
|
end
|
|
|
|
field :test_integration, :test_result do
|
|
arg :id, non_null(:id)
|
|
resolve &ToweropsWeb.GraphQL.Resolvers.Integration.test_connection/3
|
|
end
|
|
end
|
|
end
|