Class: Luciq::Commands::Query

Inherits:
Object
  • Object
show all
Includes:
QueryArguments
Defined in:
lib/luciq/commands/query.rb

Overview

Read/query commands. Each public method maps one-to-one to an MCP tool: it builds that tool's arguments from typed CLI flags (see QueryArguments) and proxies to the MCP server's CLI endpoint.

Constant Summary

Constants included from QueryArguments

Luciq::Commands::QueryArguments::BUG_PRIORITY_IDS, Luciq::Commands::QueryArguments::BUG_STATUS_IDS, Luciq::Commands::QueryArguments::CRASH_STATUS_IDS

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Query

Returns a new instance of Query.



16
17
18
19
# File 'lib/luciq/commands/query.rb', line 16

def initialize(options = {})
  @options = options
  @client = API::Client.new
end

Instance Method Details

#alert_createObject



175
176
177
# File 'lib/luciq/commands/query.rb', line 175

def alert_create
  execute('write_alerts') { alert_payload.merge(base_args).merge(action: 'create') }
end

#alert_delete(ulid) ⇒ Object



183
184
185
# File 'lib/luciq/commands/query.rb', line 183

def alert_delete(ulid)
  execute('write_alerts') { base_args.merge(action: 'delete', ulid: ulid) }
end

#alert_show(ulid) ⇒ Object



167
168
169
# File 'lib/luciq/commands/query.rb', line 167

def alert_show(ulid)
  execute('read_alerts') { base_args.merge(action: 'details', ulid: ulid) }
end

#alert_update(ulid) ⇒ Object



179
180
181
# File 'lib/luciq/commands/query.rb', line 179

def alert_update(ulid)
  execute('write_alerts') { alert_payload.merge(base_args).merge(action: 'update', ulid: ulid) }
end

#alerts_initObject



171
172
173
# File 'lib/luciq/commands/query.rb', line 171

def alerts_init
  execute('read_alerts') { base_args.merge(action: 'init') }
end

#alerts_listObject

--- Alerts (rules) ----------------------------------------------------



163
164
165
# File 'lib/luciq/commands/query.rb', line 163

def alerts_list
  execute('read_alerts') { base_args.merge(action: 'list').merge(sort_dir_args) }
end

#apm_funnel_createObject



101
102
103
104
105
# File 'lib/luciq/commands/query.rb', line 101

def apm_funnel_create
  execute('apm_funnel_write') do
    base_args.merge(operation: 'create', name: @options[:name]).merge(json_arg(:events, @options[:events]))
  end
end

#apm_funnel_deleteObject



114
115
116
# File 'lib/luciq/commands/query.rb', line 114

def apm_funnel_delete
  execute('apm_funnel_write') { base_args.merge(operation: 'delete', ulid: @options[:ulid]) }
end

#apm_funnel_eventsObject



96
97
98
99
# File 'lib/luciq/commands/query.rb', line 96

def apm_funnel_events
  params = { event_type: @options[:event_type], q: @options[:q], limit: @options[:limit] }.compact
  execute('apm_funnel_events') { base_args.merge(params) }
end

#apm_funnel_updateObject



107
108
109
110
111
112
# File 'lib/luciq/commands/query.rb', line 107

def apm_funnel_update
  changes = { ulid: @options[:ulid], name: @options[:name] }.compact
  execute('apm_funnel_write') do
    base_args.merge(operation: 'update').merge(changes, json_arg(:events, @options[:events]))
  end
end

#apm_groupObject



78
79
80
81
82
83
84
85
# File 'lib/luciq/commands/query.rb', line 78

def apm_group
  group = { metric: @options[:metric], group_uuid: @options[:group_uuid],
            group_url: @options[:group_url], method: @options[:method] }.compact
  views = @options[:views] ? json_arg(:views, @options[:views]) : { views: ['summary'] }
  execute('apm_group_view') do
    base_args.merge(group).merge(views, filters_arg(raw_filters))
  end
end

#apm_groupsObject

--- APM ---------------------------------------------------------------



71
72
73
74
75
76
# File 'lib/luciq/commands/query.rb', line 71

def apm_groups
  execute('apm_list_groups') do
    base_args.merge({ metric: @options[:metric] }.compact, page_args)
             .merge(apm_sort_arg, filters_arg(raw_filters))
  end
end

#apm_occurrenceObject



87
88
89
90
91
92
93
94
# File 'lib/luciq/commands/query.rb', line 87

def apm_occurrence
  selector = { metric: @options[:metric], selector: @options[:selector],
               group_uuid: @options[:group_uuid], group_url: @options[:group_url],
               method: @options[:method], token: @options[:token],
               current_token: @options[:current_token],
               direction: @options[:direction], limit: @options[:limit] }.compact
  execute('apm_occurrence') { base_args.merge(selector).merge(filters_arg(raw_filters)) }
end

#app_hangsObject



42
43
44
# File 'lib/luciq/commands/query.rb', line 42

def app_hangs
  execute('list_app_hangs') { base_args.merge(page_args, sort_args, filters_arg(hang_filters)) }
end

#apps_listObject

--- Applications & health --------------------------------------------



136
137
138
# File 'lib/luciq/commands/query.rb', line 136

def apps_list
  execute('list_applications') { page_args.merge({ platform: @options[:platform] }.compact) }
end

#bug_show(number) ⇒ Object



62
63
64
# File 'lib/luciq/commands/query.rb', line 62

def bug_show(number)
  execute('bug_details') { base_args.merge(number: number) }
end

#bug_update(number) ⇒ Object



66
67
68
# File 'lib/luciq/commands/query.rb', line 66

def bug_update(number)
  execute('update_bug') { base_args.merge(number: number).merge(bug_update_changes) }
end

#bugs_listObject

--- Bugs --------------------------------------------------------------



58
59
60
# File 'lib/luciq/commands/query.rb', line 58

def bugs_list
  execute('list_bugs') { base_args.merge(page_args, sort_args, filters_arg(bug_filters)) }
end

#crash_diagnostics(number) ⇒ Object



38
39
40
# File 'lib/luciq/commands/query.rb', line 38

def crash_diagnostics(number)
  execute('crash_diagnostics') { base_args.merge(number: number) }
end

#crash_patterns(number) ⇒ Object



30
31
32
33
34
35
36
# File 'lib/luciq/commands/query.rb', line 30

def crash_patterns(number)
  pattern = { pattern_key: @options[:pattern_key], sort_by: @options[:sort_by],
              direction: @options[:direction] }.compact
  execute('crash_patterns') do
    base_args.merge(number: number).merge(pattern).merge(filters_arg(raw_filters))
  end
end

#crash_show(number) ⇒ Object



26
27
28
# File 'lib/luciq/commands/query.rb', line 26

def crash_show(number)
  execute('crash_details') { base_args.merge(number: number) }
end

#crashes_listObject

--- Crashes -----------------------------------------------------------



22
23
24
# File 'lib/luciq/commands/query.rb', line 22

def crashes_list
  execute('list_crashes') { base_args.merge(page_args, sort_args, filters_arg(crash_filters)) }
end

#incident_reopen(ulid) ⇒ Object



202
203
204
# File 'lib/luciq/commands/query.rb', line 202

def incident_reopen(ulid)
  execute('write_incidents') { base_args.merge(action: 'reopen', ulid: ulid) }
end

#incident_resolve(ulid) ⇒ Object



198
199
200
# File 'lib/luciq/commands/query.rb', line 198

def incident_resolve(ulid)
  execute('write_incidents') { base_args.merge(action: 'resolve', ulid: ulid) }
end

#incident_show(ulid) ⇒ Object



194
195
196
# File 'lib/luciq/commands/query.rb', line 194

def incident_show(ulid)
  execute('read_incidents') { base_args.merge(action: 'details', ulid: ulid) }
end

#incidents_listObject

--- Incidents (triggered alerts) --------------------------------------



188
189
190
191
192
# File 'lib/luciq/commands/query.rb', line 188

def incidents_list
  execute('read_incidents') do
    base_args.merge(action: 'list').merge(page_args, sort_dir_args, filters_arg(incident_filters))
  end
end

#insightsObject



140
141
142
# File 'lib/luciq/commands/query.rb', line 140

def insights
  execute('app_insights') { base_args.merge(filters_arg(raw_filters)) }
end

#issues_listObject

--- Issues ------------------------------------------------------------



145
146
147
148
149
150
151
# File 'lib/luciq/commands/query.rb', line 145

def issues_list
  top = { top_issues: @options[:top_issues] }.compact
  execute('list_issues') do
    base_args.merge({ limit: @options[:limit] }.compact, sort_dir_args, top)
             .merge(json_arg(:pagination, @options[:pagination]), filters_arg(raw_filters))
  end
end

#occurrence_details(number, ulid) ⇒ Object



53
54
55
# File 'lib/luciq/commands/query.rb', line 53

def occurrence_details(number, ulid)
  execute('get_occurrence_details') { base_args.merge(number: number, ulid: ulid) }
end

#occurrence_tokens(number) ⇒ Object



46
47
48
49
50
51
# File 'lib/luciq/commands/query.rb', line 46

def occurrence_tokens(number)
  cursor = { current_token: @options[:current_token], direction: @options[:direction] }.compact
  execute('list_occurrences_tokens') do
    base_args.merge(number: number).merge(cursor).merge(filters_arg(raw_filters))
  end
end

#opportunities_listObject

--- Opportunities -----------------------------------------------------



154
155
156
# File 'lib/luciq/commands/query.rb', line 154

def opportunities_list
  execute('list_opportunities') { base_args.merge(page_args, filters_arg(opportunity_filters)) }
end

#opportunity_show(id) ⇒ Object



158
159
160
# File 'lib/luciq/commands/query.rb', line 158

def opportunity_show(id)
  execute('opportunity_details') { base_args.merge(id: id) }
end

#reviews_listObject

--- Reviews -----------------------------------------------------------



119
120
121
122
123
# File 'lib/luciq/commands/query.rb', line 119

def reviews_list
  execute('list_reviews') do
    base_args.merge(page_args, sort_dir_args).merge(filters_arg(review_filters))
  end
end

#survey_show(id) ⇒ Object



130
131
132
133
# File 'lib/luciq/commands/query.rb', line 130

def survey_show(id)
  page = { page: @options[:page] }.compact
  execute('survey_details') { base_args.merge(id: id).merge(page, filters_arg(raw_filters)) }
end

#surveys_listObject

--- Surveys -----------------------------------------------------------



126
127
128
# File 'lib/luciq/commands/query.rb', line 126

def surveys_list
  execute('list_surveys') { base_args.merge(page_args, filters_arg(survey_filters)) }
end