Class: Facilities::AccessDataDownload
- Inherits:
-
Object
- Object
- Facilities::AccessDataDownload
show all
- Includes:
- SentryLogging, Sidekiq::Job
- Defined in:
- app/sidekiq/facilities/access_data_download.rb
Constant Summary
collapse
- SAT_KEY_MAP =
{
'Primary Care (Routine)' => 'primary_care_routine',
'Primary Care (Urgent)' => 'primary_care_urgent',
'Specialty Care (Routine)' => 'specialty_care_routine',
'Specialty Care (Urgent)' => 'specialty_care_urgent'
}.freeze
- SAT_REQUIRED_KEYS =
%w[facilityID ApptTypeName SHEPScore sliceEndDate].freeze
- WT_KEY_MAP =
{
'PRIMARY CARE' => 'primary_care',
'MENTAL HEALTH' => 'mental_health_care',
'COMP WOMEN\'S HLTH' => 'womens_health',
'AUDIOLOGY' => 'audiology',
'CARDIOLOGY' => 'cardiology',
'DERMATOLOGY' => 'dermatology',
'GASTROENTEROLOGY' => 'gastroenterology',
'GYNECOLOGY' => 'gynecology',
'OPHTHALMOLOGY' => 'ophthalmology',
'OPTOMETRY' => 'optometry',
'ORTHOPEDICS' => 'orthopedics',
'UROLOGY CLINIC' => 'urology',
'SPECIALTY CARE' => 'specialty_care'
}.freeze
- WT_REQUIRED_KEYS =
%w[facilityID ApptTypeName newWaitTime estWaitTime sliceEndDate].freeze
Instance Method Summary
collapse
#log_exception_to_sentry, #log_message_to_sentry, #non_nil_hash?, #normalize_level, #rails_logger
Instance Method Details
#filter(val) ⇒ Object
95
96
97
|
# File 'app/sidekiq/facilities/access_data_download.rb', line 95
def filter(val)
val >= 9999 ? nil : val
end
|
#invalidate_removed(model, facility_keys) ⇒ Object
60
61
62
63
64
|
# File 'app/sidekiq/facilities/access_data_download.rb', line 60
def invalidate_removed(model, facility_keys)
invalidate = model.keys - facility_keys
invalidate.each { |x| model.delete(x) }
logger.info "Removed #{invalidate.size} obsolete entries from cache"
end
|
#parse_satisfaction_data(records) ⇒ Object
71
72
73
74
75
76
77
78
79
80
81
82
|
# File 'app/sidekiq/facilities/access_data_download.rb', line 71
def parse_satisfaction_data(records)
facilities = Hash.new { |h, k| h[k] = { 'metrics' => {} } }
records.each do |rec|
require_keys(rec, SAT_REQUIRED_KEYS)
id = rec['facilityID']
facility = facilities[id]
category = SAT_KEY_MAP[rec['ApptTypeName']]
facility['metrics'][category] = rec['SHEPScore']
facility['source_date'] = rec['sliceEndDate']
end
facilities
end
|
#parse_wait_time_data(records) ⇒ Object
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
# File 'app/sidekiq/facilities/access_data_download.rb', line 99
def parse_wait_time_data(records)
facilities = Hash.new { |h, k| h[k] = { 'metrics' => {}, 'ed' => [], 'uc' => [] } }
records.each do |rec|
require_keys(rec, WT_REQUIRED_KEYS)
id = rec['facilityID']
facility = facilities[id]
category = WT_KEY_MAP[rec['ApptTypeName']]
metric = { 'new' => filter(rec['newWaitTime']),
'established' => filter(rec['estWaitTime']) }
facility['metrics'][category] = metric
facility['ed'] << rec['ED']
facility['uc'] << rec['UC']
facility['source_date'] = rec['sliceEndDate']
end
facilities
end
|
#require_keys(record, required_keys) ⇒ Object
66
67
68
69
|
# File 'app/sidekiq/facilities/access_data_download.rb', line 66
def require_keys(record, required_keys)
diff = required_keys - record.keys
raise AccessDataError, "Missing expected keys: #{diff}" if diff.present?
end
|
#update_cache(model, facilities) ⇒ Object
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
# File 'app/sidekiq/facilities/access_data_download.rb', line 43
def update_cache(model, facilities)
facilities.each do |k, v|
attrs = { station_number: k,
metrics: v['metrics'],
emergency_care: v['ed'],
urgent_care: v['uc'],
source_updated: v['source_date'],
local_updated: Time.now.utc.iso8601 }
obj = model.find(k)
if obj
obj.update(attrs)
else
model.create(attrs)
end
end
end
|
#update_satisfaction_data(client) ⇒ Object
#update_wait_time_data(client) ⇒ Object
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
# File 'app/sidekiq/facilities/access_data_download.rb', line 116
def update_wait_time_data(client)
records = client.download
uniq_specialties = records.map { |facility| facility['ApptTypeName'] }.uniq
unless uniq_specialties.sort == WT_KEY_MAP.keys.sort
log_message_to_sentry(
'Facility Locator Specialty Wait Time Inconsistency',
:error,
missing_specialties: uniq_specialties - WT_KEY_MAP.keys,
unused_specialties: WT_KEY_MAP.keys - uniq_specialties
)
end
facilities = parse_wait_time_data(records)
update_cache(FacilityWaitTime, facilities)
logger.info "Updated facility wait time cache for #{facilities.size} facilities"
invalidate_removed(FacilityWaitTime, facilities.keys)
rescue Common::Exceptions::BackendServiceException, Common::Client::Errors::ClientError,
Facilities::AccessDataError => e
log_exception_to_sentry(e)
end
|