Class: Travis::CLI::Monitor
Constant Summary
Constants inherited
from Command
Command::DAY, Command::HOUR, Command::MINUTE, Command::WEEK
Tools::Assets::BASE
Instance Attribute Summary collapse
Attributes inherited from ApiCommand
#enterprise_name, #session
Attributes inherited from Command
#arguments, #config, #debug, #force_interactive, #formatter, #input, #output
Instance Method Summary
collapse
Methods inherited from ApiCommand
#authenticate, #detected_endpoint?, #endpoint_config, #enterprise?, #org?, #pro?, #sync
#access_token, #access_token=, #account, #accounts, #api_endpoint, #api_endpoint=, #artifact, #broadcasts, #build, #cancel, #explicit_api_endpoint?, #github_auth, #hooks, #job, #lint, #listen, #logout, #repo, #restart, #user
Methods inherited from Command
abstract, abstract?, #check_completion, #check_ruby, #check_version, #command_name, command_name, #debug?, description, #execute, #help, #info, #last_check, #on_signal, #parse, #say, skip, subcommands, #terminal, #time, #usage, #usage_for, #write_to
#asset, #asset_path
Methods included from Parser
#new, #on, #on_initialize
Constructor Details
Returns a new instance of Monitor.
25
26
27
28
|
# File 'lib/travis/cli/monitor.rb', line 25
def initialize(*)
@repos = []
super
end
|
Instance Attribute Details
#notification ⇒ Object
Returns the value of attribute notification.
23
24
25
|
# File 'lib/travis/cli/monitor.rb', line 23
def notification
@notification
end
|
#repos ⇒ Object
Returns the value of attribute repos.
23
24
25
|
# File 'lib/travis/cli/monitor.rb', line 23
def repos
@repos
end
|
Instance Method Details
#all? ⇒ Boolean
71
72
73
|
# File 'lib/travis/cli/monitor.rb', line 71
def all?
!pull? and !push?
end
|
#description ⇒ Object
53
54
55
56
57
58
59
|
# File 'lib/travis/cli/monitor.rb', line 53
def description
case repos.size
when 0 then session.config['host']
when 1 then repos.first.slug
else "#{repos.size} repositories"
end
end
|
#display(entity, time) ⇒ Object
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
# File 'lib/travis/cli/monitor.rb', line 80
def display(entity, time)
say [
color(formatter.time(time), entity.color),
color(entity.inspect_info, [entity.color, :bold]),
color(entity.state, entity.color),
color(entity.commit.subject, entity.color)
].join(" ")
notification.notify(entity.repository.slug, [
entity.class.name[/[^:]+$/],
entity.number,
entity.state + ":",
entity.commit.subject
].join(" "))
end
|
#events ⇒ Object
61
62
63
64
65
|
# File 'lib/travis/cli/monitor.rb', line 61
def events
events = %w[build:started build:finished]
events << 'job:started' << 'job:finished' unless builds?
events
end
|
#firehose? ⇒ Boolean
67
68
69
|
# File 'lib/travis/cli/monitor.rb', line 67
def firehose?
org? and repos.empty?
end
|
#handle_event(event) ⇒ Object
95
96
97
98
99
100
101
|
# File 'lib/travis/cli/monitor.rb', line 95
def handle_event(event)
entity = event.job || event.build
time = entity.finished_at || entity.started_at
display(entity, time) if monitor? entity
rescue Travis::Client::Error => error
raise error if explode?
end
|
#monitor?(entity) ⇒ Boolean
75
76
77
78
|
# File 'lib/travis/cli/monitor.rb', line 75
def monitor?(entity)
return true if all?
entity.pull_request? ? pull? : push?
end
|
#run ⇒ Object
103
104
105
106
107
108
|
# File 'lib/travis/cli/monitor.rb', line 103
def run
listen(*repos) do |listener|
listener.on_connect { say description, "Monitoring #{"builds for " if builds?}%s:" }
listener.on(*events) { |e| handle_event(e) }
end
end
|
#setup ⇒ Object
30
31
32
33
34
35
36
|
# File 'lib/travis/cli/monitor.rb', line 30
def setup
super
repos.map! { |r| repo(r) }
repos.concat(user.repositories) if my_repos?
setup_notification(!firehose? || :dummy) unless notification
debug "Using notifications: #{notification.class.name[/[^:]+$/]}"
end
|
#setup_notification(type = nil) ⇒ Object
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
# File 'lib/travis/cli/monitor.rb', line 38
def setup_notification(type = nil)
refuse = false
case type
when false then @notification = Tools::Notification.new(:dummy)
when nil, true then @notification = Tools::Notification.new
else
refuse = true
@notification = Tools::Notification.new(type)
end
rescue ArgumentError => e
@notification = Tools::Notification.new(:dummy)
error(e.message) if refuse
warn(e.message)
end
|