File tree Expand file tree Collapse file tree 9 files changed +153
-0
lines changed
Expand file tree Collapse file tree 9 files changed +153
-0
lines changed Original file line number Diff line number Diff line change 1+ # frozen_string_literal: true
2+
3+ require 'administrate/field/base'
4+
5+ class ResultsSummaryField < Administrate ::Field ::Base
6+ def to_s
7+ "#{ successful_count } successful, #{ failed_count } failed"
8+ end
9+
10+ def successful_count
11+ data . dig ( 'successful' ) &.count || 0
12+ end
13+
14+ def failed_count
15+ data . dig ( 'failed' ) &.count || 0
16+ end
17+
18+ def total_count
19+ successful_count + failed_count
20+ end
21+ end
Original file line number Diff line number Diff line change 1+ # frozen_string_literal: true
2+
3+ require 'administrate/field/base'
4+
5+ class StatusField < Administrate ::Field ::Base
6+ def to_s
7+ job_status
8+ end
9+
10+ def job_status
11+ return 'unknown' if data . blank?
12+
13+ job = GoodJob ::Execution . find_by ( active_job_id : data )
14+ return 'not_found' unless job
15+
16+ return 'failed' if job . error . present?
17+ return 'completed' if job . finished_at . present?
18+ return 'scheduled' if job . scheduled_at . present? && job . scheduled_at > Time . current
19+ return 'running' if job . performed_at . present? && job . finished_at . nil?
20+
21+ 'queued'
22+ end
23+
24+ def status_class
25+ case job_status
26+ when 'completed' then 'status-completed'
27+ when 'failed' then 'status-failed'
28+ when 'running' then 'status-running'
29+ when 'queued' , 'scheduled' then 'status-queued'
30+ else 'status-unknown'
31+ end
32+ end
33+ end
Original file line number Diff line number Diff line change 1+ # frozen_string_literal: true
2+
3+ require 'administrate/field/base'
4+
5+ class UserInfoField < Administrate ::Field ::Base
6+ def to_s
7+ user_display
8+ end
9+
10+ def user_display
11+ return 'Unknown User' if data . blank?
12+
13+ user_info = fetch_user_info
14+ return data if user_info . nil?
15+
16+ if user_info [ :name ] . present? && user_info [ :email ] . present?
17+ "#{ user_info [ :name ] } <#{ user_info [ :email ] } >"
18+ elsif user_info [ :name ] . present?
19+ user_info [ :name ]
20+ elsif user_info [ :email ] . present?
21+ user_info [ :email ]
22+ else
23+ data
24+ end
25+ end
26+
27+ def user_name
28+ return nil if data . blank?
29+
30+ user_info = fetch_user_info
31+ user_info &.dig ( :name )
32+ end
33+
34+ def user_email
35+ return nil if data . blank?
36+
37+ user_info = fetch_user_info
38+ user_info &.dig ( :email )
39+ end
40+
41+ def user_id
42+ data
43+ end
44+
45+ private
46+
47+ def fetch_user_info
48+ return @user_info if defined? ( @user_info )
49+
50+ @user_info = begin
51+ # Try to get from request-level cache first (set by controller)
52+ cache = RequestStore . store [ :user_info_cache ] || { }
53+ cached = cache [ data ]
54+
55+ if cached
56+ cached
57+ else
58+ # Fallback to individual API call if not in cache
59+ result = UserInfoApiClient . fetch_by_ids ( [ data ] )
60+ result &.first
61+ end
62+ rescue StandardError => e
63+ Rails . logger . error ( "Failed to fetch user info for #{ data } : #{ e . message } " )
64+ nil
65+ end
66+ end
67+ end
Original file line number Diff line number Diff line change 1+ <%#
2+ Administrate field partial for ResultsSummaryField in index view
3+ %>
4+ < span style ="color: green; font-weight: bold; "> <%= field . successful_count %> ✓</ span >
5+ /
6+ < span style ="color: red; font-weight: bold; "> <%= field . failed_count %> ✗</ span >
Original file line number Diff line number Diff line change 1+ <%#
2+ Administrate field partial for ResultsSummaryField in show view
3+ %>
4+ < span style ="color: green; font-weight: bold; "> <%= field . successful_count %> ✓</ span >
5+ /
6+ < span style ="color: red; font-weight: bold; "> <%= field . failed_count %> ✗</ span >
Original file line number Diff line number Diff line change 1+ <%#
2+ Administrate field partial for StatusField in index view
3+ %>
4+ < span class ="status-badge status- <%= field . job_status %> ">
5+ <%= field . job_status . upcase %>
6+ </ span >
Original file line number Diff line number Diff line change 1+ <%#
2+ Administrate field partial for StatusField in show view
3+ %>
4+ < span class ="status-badge status- <%= field . job_status %> ">
5+ <%= field . job_status . upcase %>
6+ </ span >
Original file line number Diff line number Diff line change 1+ <%#
2+ Administrate field partial for UserInfoField in index view
3+ %>
4+ <%= field.user_display %>
Original file line number Diff line number Diff line change 1+ <%#
2+ Administrate field partial for UserInfoField in show view
3+ %>
4+ <%= field.user_display %>
You can’t perform that action at this time.
0 commit comments