-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathRakefile
executable file
·197 lines (159 loc) · 4.45 KB
/
Rakefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
#!/usr/bin/env ruby
begin
require 'rspec/core/rake_task'
RSpec::Core::RakeTask.new(:spec) {|t| }
task :default => :spec
rescue LoadError
end
$stdout.sync = true
$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__))
require 'rake'
require 'ext'
desc "Pry console"
task :console do
require 'pry'
require 'models'
require 'bart_api'
require 'my_rollbar'
Models.setup
Pry.start
end
desc "Dump raw outage csv"
task :dump_csv do
require 'models'
Models.setup
outages = Hash[
Models::Outage.all.group_by(&:elevator_id)
.map {|k,v| [Models::Elevator.get(k).name, v]}
]
outages_to_print = outages.map do |k,v|
length = v.map(&:length).reduce(:+).round(2)
avg = (length / v.size).round(2)
{ :elevator => k,
:number_outages => v.size,
:length_outages => length,
:avg_outage_length => avg
}
end.sort_by {|r| r[:length_outages]}
.reverse # Put the most-out elevators at the top
csv = CSV.generate do |c|
c << ['Elevator', 'Number of Outages', 'Total hours out', 'Average outage length']
outages_to_print.each {|o| c << o.values}
end
puts csv
end
task :worker do
require 'worker'
require 'models'
require 'my_rollbar'
Models.setup
loop do
begin
puts "Start loop ..."
Worker.run!
puts "About to sleep ..."
rescue StandardError => e
puts "ERROR: #{e.class}, #{e.message}, #{e.backtrace}"
Rollbar.error(e)
end
sleep 60
end
end
desc "Get current state"
task :current do
require'models'
require 'my_rollbar'
Models.setup
puts "Worker count: #{Models::Metric.first(:name => "bartworker").try(:counter)}"
puts "Current system count: #{Models::System.count}"
puts "Current station count: #{Models::Station.count}"
puts "Current elevator count: #{Models::Elevator.count}"
puts "Current outages: #{Models::Outage.all_open.count}, #{Models::Outage.all_open.to_a.map(&:elevator).map(&:name).join(", ")}"
puts "Unparseables: #{Models::Unparseable.count}"
puts "Users: #{Models::User.count}"
end
namespace :dev do
desc "Check that all required env keys are set"
task :check_environment do
require 'environment'
Environment.check_env
end
desc "Generate a new session secret"
task :session_secret do
require 'environment'
puts Environment.new_session_secret
end
desc "Dump seed json from database - this contains systems, stations, and elevators"
task :dump_seed_json do
require 'models'
Models.setup
puts JSON.pretty_generate(Models.seed_hash)
end
desc "Load from seed.json"
task :load_seed_json, [:file] do |t, args|
require 'models'
Models.setup
unless File.exists?(args[:file])
warn "You must provide a json file like that generated by dev:dump_seed_hash"
exit 1
end
json = File.read(args[:file])
seed_hash = JSON.parse(json)
Models.from_seed_hash(seed_hash)
end
end
namespace :migrations do
desc "Add Muni"
task :m_001_add_muni do
require 'models'
require 'my_rollbar'
Models.setup
orig_adding_elevators = ENV['ADDING_ELEVATORS']
ENV['ADDING_ELEVATORS'] = '1'
if Models::System.first(:name => "SF Muni")
puts "You already added the SF Muni system!"
exit 1
end
bart = Models::System.first_or_create(:name => "BART")
Models::Station.all.each do |s|
next unless s.systems.empty?
s.systems << bart
s.save
end
muni = Models::System.first_or_create(:name => "SF Muni")
["Castro", "Church", "Civic Center", "Embarcadero", "Forest Hill",
"Montgomery", "Powell", "Van Ness", "West Portal"].each do |name|
station = Models::Station.create(:name => "Muni: #{name}", :systems => [muni])
elevator = Models::Elevator.create(:name => "Muni: #{name}", :station => station)
end
ENV['ADDING_ELEVATORS'] = orig_adding_elevators
end
desc "Remove ' Station' from elevator names"
task :m_002_remove_station_from_elevator_names do
require 'models'
require 'my_rollbar'
Models.setup
Models::Elevator.all(:name.like => "Station").each do |e|
e.name.gsub!(/ Station/, '')
e.save
end
end
end
namespace :export do
namespace :bart do
desc "Raw outage data to csv"
task :raw do
require 'exports'
require 'models'
Models.setup
Exports.bart_raw_outage_dump
end
desc "Elevator data"
task :elevator do
require 'exports'
require 'models'
Models.setup
Exports.bart_elevator_dump
end
end
end