Skip to content

Commit 0dbf01a

Browse files
committed
adds sponor_reason and exclude_reason to report
1 parent 64eb8f0 commit 0dbf01a

File tree

5 files changed

+112
-11
lines changed

5 files changed

+112
-11
lines changed

lib/patron.rb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@ def self.inst_roles_for(data)
2323

2424
def self.for(data)
2525
if test_user?(data)
26-
return Skipped.new(data: data, exclude_reasons: ["test_user"])
26+
reason = "test_user"
27+
Report.metrics.exclude_reason.increment({name: reason})
28+
return Skipped.new(data: data, exclude_reasons: [reason])
2729
end
2830

2931
inst_roles = inst_roles_for(data)
@@ -34,6 +36,7 @@ def self.for(data)
3436
return user
3537
else
3638
S.logger.debug("exclude_reason", {uniqname: user.uniqname, reason: user.exclude_reason, inst_role: inst_role})
39+
Report.metrics.exclude_reason.increment({name: user.exclude_reason})
3740
exclude_reasons.push(user.exclude_reason)
3841
end
3942
end

lib/patron/sponsored_affiliate.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ def exclude_reason
4848
end
4949

5050
def sponsor_reason
51-
hr_item.umichSponsorReason
51+
hr_data.umichSponsorReason
5252
end
5353

5454
def valid_start_date?(hr_item)

lib/report.rb

Lines changed: 43 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,16 @@
22
require "uri"
33
require "forwardable"
44
class Report
5+
COLUMN_NAMES = [
6+
"action",
7+
"umid",
8+
"uniqname",
9+
"campus",
10+
"user_group",
11+
"statistic_category",
12+
"sponsor_reason",
13+
"exclude_reasons"
14+
]
515
def self.configure_yabeda!
616
Yabeda.configure do
717
group :aim_patron_load do
@@ -12,6 +22,8 @@ def self.configure_yabeda!
1222
gauge :campus, comment: "Number of patrons in a given campus", tags: [:script_type, :name]
1323
gauge :user_group, comment: "Number of patrons in a given Alma User Group", tags: [:script_type, :name]
1424
gauge :statistic_category, comment: "Number of loaded patrons in a statistic category", tags: [:script_type, :name]
25+
gauge :sponsor_reason, comment: "Number of loaded Sponsored Affiliates with a given sponsor reason", tags: [:script_type, :name]
26+
gauge :exclude_reason, comment: "Number of patrons skipped for a given reason", tags: [:script_type, :name]
1527
gauge :error, comment: "Number of errors encountered while running the patron load", tags: [:script_type]
1628
gauge :job_duration_seconds, comment: "Number of seconds it took to run the patron load job", tags: [:script_type]
1729
end
@@ -27,6 +39,10 @@ def self.print_metrics
2739
Prometheus::Client::Formats::Text.marshal(Yabeda::Prometheus.registry)
2840
end
2941

42+
def self.column_names
43+
COLUMN_NAMES
44+
end
45+
3046
def self.push_metrics
3147
# The env var needs to be set to the push gateway url
3248
if ENV["PROMETHEUS_PUSH_GATEWAY"]&.match?(URI::DEFAULT_PARSER.make_regexp)
@@ -51,6 +67,7 @@ def self.open(file_base:, script_type:, &block)
5167

5268
def initialize(fh:, script_type:)
5369
@fh = fh
70+
@fh.write self.class.column_names.join("\t") + "\n"
5471
@script_type = script_type
5572
end
5673

@@ -59,17 +76,18 @@ def metrics
5976
end
6077

6178
def load(patron)
62-
patron = Patron.new(patron)
63-
@fh.write report_string(kind: "LOAD", patron: patron)
79+
patron = Patron.new(patron: patron, action: "load")
80+
@fh.write patron.report_string
6481
metrics.found.increment({script_type: @script_type})
6582
metrics.loaded.increment({script_type: @script_type})
66-
["patron_kind", "statistic_category", "user_group", "campus"].each do |metric|
83+
["patron_kind", "statistic_category", "user_group", "campus", "sponsor_reason"].each do |metric|
6784
increment_metric(metric, patron)
6885
end
6986
end
7087

7188
def skip(patron)
72-
@fh.write report_string(kind: "SKIP", patron: patron)
89+
patron = Patron.new(patron: patron, action: "skip")
90+
@fh.write patron.report_string
7391
metrics.found.increment({script_type: @script_type})
7492
metrics.skipped.increment({script_type: @script_type})
7593
end
@@ -87,7 +105,7 @@ def report_string(kind:, patron:)
87105
end
88106

89107
def increment_metric(metric, patron)
90-
metrics.public_send(metric).increment({script_type: @script_type, name: patron.public_send(metric)})
108+
metrics.public_send(metric).increment({script_type: @script_type, name: patron.public_send(metric)}) if patron.public_send(metric)
91109
end
92110

93111
class Patron
@@ -153,8 +171,13 @@ class Patron
153171
"SH" => "shares"
154172
}
155173

156-
def initialize(patron)
174+
def initialize(patron:, action: "whatever")
157175
@patron = patron
176+
@action = action
177+
end
178+
179+
def action
180+
@action.upcase
158181
end
159182

160183
def umid
@@ -173,10 +196,24 @@ def statistic_category
173196
STATISTIC_CATEGORY_MAP[@patron.statistic_category] || @patron.statistic_category
174197
end
175198

199+
def sponsor_reason
200+
@patron.sponsor_reason&.downcase
201+
end
202+
176203
def patron_kind
177204
to_snake(@patron.class.name.split("::").last)
178205
end
179206

207+
def exclude_reasons
208+
@patron.exclude_reasons.join(",")
209+
end
210+
211+
def report_string
212+
Report.column_names.map do |method|
213+
public_send(method)
214+
end.join("\t") + "\n"
215+
end
216+
180217
private
181218

182219
def to_snake(str)

spec/fixtures/emcard_staff.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@
6565
"TRUE"
6666
],
6767
"sn": [
68-
"Rio"
68+
"Card"
6969
],
7070
"telephonenumber": [
7171
"734-999-9999"

spec/report_spec.rb

Lines changed: 63 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,17 @@
11
describe Report do
2+
let(:staff_data) do
3+
json_fixture("emcard_staff.json")
4+
end
25
let(:staff_person) do
3-
Patron::StaffPerson.new(data: json_fixture("emcard_staff.json"))
6+
Patron::StaffPerson.new(data: staff_data)
7+
end
8+
let(:sponsored_affiliate) do
9+
start_date_str = Date.today.prev_day.strftime("%m/%d/%Y")
10+
end_date_str = Date.today.next_day.strftime("%m/%d/%Y")
11+
staff_data["umichsponsorshipdetail"] = [
12+
"{campus=UM_ANN-ARBOR}:{deptId=99999}:{deptGroup=SOME_DEPT_GROUP}:{deptDescription=SOME DEPARTMENT DESCRIPTION}:{deptGroupDescription=School of Something}:{deptVPArea=PRVST_EXC_VP_ACA_AFF}:{umichSponsorAdmin=sponsoruniqname}:{umichSponsorRequestor=otheruniqname}:{umichSponsorReason=Researchers}:{umichSponsorStartDate=#{start_date_str}}:{umichSponsorEndDate=#{end_date_str}}:{umichSponsorshipCn=111-111-11111111111111111-111}"
13+
]
14+
Patron::SponsoredAffiliate.new(data: staff_data)
415
end
516
before(:each) do
617
@file_handle = StringIO.new
@@ -13,6 +24,17 @@
1324
described_class.new(fh: @file_handle, script_type: "test")
1425
end
1526

27+
it "includes a header with all of the column names" do
28+
subject
29+
expect(@file_handle.string).to include("action")
30+
expect(@file_handle.string).to include("umid")
31+
expect(@file_handle.string).to include("uniqname")
32+
expect(@file_handle.string).to include("campus")
33+
expect(@file_handle.string).to include("user_group")
34+
expect(@file_handle.string).to include("statistic_category")
35+
expect(@file_handle.string).to include("sponsor_reason")
36+
expect(@file_handle.string).to include("exclude_reasons")
37+
end
1638
context "#load" do
1739
it "writes the word LOAD for a staff person, umid, user_group, user_statistic" do
1840
subject.load(staff_person)
@@ -23,12 +45,51 @@
2345
expect(@file_handle.string).to include("staff")
2446
expect(@file_handle.string).to include("staff")
2547
end
26-
it "increments the counters" do
48+
it "includes a sponsored affiliate reason when there is one" do
49+
subject.load(sponsored_affiliate)
50+
expect(@file_handle.string).to include("researchers")
51+
end
52+
53+
it "increments the counters when valid" do
2754
subject.load(staff_person)
2855
expect(Report.metrics.statistic_category.get(name: "staff", script_type: "test")).to eq(1)
2956
expect(Report.metrics.patron_kind.get(name: "staff_person", script_type: "test")).to eq(1)
3057
expect(Report.metrics.user_group.get(name: "staff", script_type: "test")).to eq(1)
3158
expect(Report.metrics.campus.get(name: "ann_arbor", script_type: "test")).to eq(1)
59+
expect(Report.metrics.sponsor_reason.values).to eq({})
60+
end
61+
it "increments the sponsor reason when there is one" do
62+
subject.load(sponsored_affiliate)
63+
expect(Report.metrics.sponsor_reason.get(name: "researchers", script_type: "test")).to eq(1)
64+
end
65+
end
66+
67+
context "#skip" do
68+
it "includes columns in the report" do
69+
skipped_person = Patron::Skipped.new(data: staff_data, exclude_reasons: ["reason1", "reason2"])
70+
subject.skip(skipped_person)
71+
expect(@file_handle.string).to include("SKIP")
72+
expect(@file_handle.string).to include("emcard")
73+
expect(@file_handle.string).to include("99991111")
74+
expect(@file_handle.string).to include("reason1,reason2")
75+
end
76+
end
77+
78+
context "exclude_reason metric" do
79+
it "is incremeneted when user a user is a test user" do
80+
test_user = staff_data
81+
test_user["uid"] = ["ststv"]
82+
Yabeda.with_tags(script_type: "test") do
83+
Patron.for(test_user)
84+
end
85+
expect(Report.metrics.exclude_reason.get(name: "test_user", script_type: "test")).to eq(1)
86+
end
87+
it "is incremented when a user is skipped for some other reason" do
88+
staff_data["umichhr"][0].sub!("jobCategory=Staff", "jobCateogry=INVALID")
89+
Yabeda.with_tags(script_type: "test") do
90+
Patron.for(staff_data)
91+
end
92+
expect(Report.metrics.exclude_reason.get(name: "job_category_not_staff", script_type: "test")).to eq(1)
3293
end
3394
end
3495
end

0 commit comments

Comments
 (0)