Class: Aidp::Interfaces::ActivityMonitor
- Inherits:
-
Object
- Object
- Aidp::Interfaces::ActivityMonitor
show all
- Includes:
- ActivityMonitorInterface
- Defined in:
- lib/aidp/interfaces/activity_monitor_interface.rb
Overview
ActivityMonitor is the standard implementation that tracks activity state.
Constant Summary
collapse
- DEFAULT_STUCK_TIMEOUT =
30
Aidp::Interfaces::ActivityMonitorInterface::STATES
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
Returns a new instance of ActivityMonitor.
154
155
156
157
158
159
160
161
162
163
|
# File 'lib/aidp/interfaces/activity_monitor_interface.rb', line 154
def initialize(logger: nil)
@logger = logger
@state = :idle
@start_time = nil
@last_activity_time = nil
@stuck_timeout = DEFAULT_STUCK_TIMEOUT
@step_name = nil
@on_state_change = nil
@output_count = 0
end
|
Instance Attribute Details
#state ⇒ Object
Returns the value of attribute state.
150
151
152
|
# File 'lib/aidp/interfaces/activity_monitor_interface.rb', line 150
def state
@state
end
|
Instance Method Details
#complete ⇒ Object
182
183
184
185
|
# File 'lib/aidp/interfaces/activity_monitor_interface.rb', line 182
def complete
update_state(:completed)
log_debug("completed", elapsed_time: elapsed_time, output_count: @output_count)
end
|
#elapsed_time ⇒ Object
205
206
207
208
|
# File 'lib/aidp/interfaces/activity_monitor_interface.rb', line 205
def elapsed_time
return 0.0 unless @start_time
Time.now - @start_time
end
|
#fail(error_message = nil) ⇒ Object
187
188
189
190
|
# File 'lib/aidp/interfaces/activity_monitor_interface.rb', line 187
def fail(error_message = nil)
update_state(:failed, error_message)
log_debug("failed", error_message: error_message, elapsed_time: elapsed_time)
end
|
#record_activity(message = nil) ⇒ Object
176
177
178
179
180
|
# File 'lib/aidp/interfaces/activity_monitor_interface.rb', line 176
def record_activity(message = nil)
@output_count += 1
@last_activity_time = Time.now
update_state(:working, message)
end
|
#start(step_name:, stuck_timeout: DEFAULT_STUCK_TIMEOUT, on_state_change: nil) ⇒ Object
165
166
167
168
169
170
171
172
173
174
|
# File 'lib/aidp/interfaces/activity_monitor_interface.rb', line 165
def start(step_name:, stuck_timeout: DEFAULT_STUCK_TIMEOUT, on_state_change: nil)
@step_name = step_name
@stuck_timeout = stuck_timeout
@on_state_change = on_state_change
@start_time = Time.now
@last_activity_time = @start_time
@output_count = 0
update_state(:working)
log_debug("started", step_name: step_name, stuck_timeout: stuck_timeout)
end
|
#stuck? ⇒ Boolean
192
193
194
195
196
197
198
199
200
201
202
203
|
# File 'lib/aidp/interfaces/activity_monitor_interface.rb', line 192
def stuck?
return false unless @state == :working
return false if @last_activity_time.nil?
seconds_since_activity = Time.now - @last_activity_time
if seconds_since_activity > @stuck_timeout
update_state(:stuck, "No activity for #{seconds_since_activity.round}s")
true
else
false
end
end
|
#summary ⇒ Object
210
211
212
213
214
215
216
217
218
219
|
# File 'lib/aidp/interfaces/activity_monitor_interface.rb', line 210
def summary
{
step_name: @step_name,
state: @state,
start_time: @start_time&.iso8601,
elapsed_time: elapsed_time.round(2),
stuck_detected: @state == :stuck,
output_count: @output_count
}
end
|