@@ -18,53 +18,50 @@ import (
18
18
"go.opentelemetry.io/otel/trace"
19
19
)
20
20
21
- func NewSystemEventLogGetter (req * v1. GetSystemEventLogRequest , opts ... Option ) (* Action , error ) {
21
+ func NewSystemEventLogAction (req interface {} , opts ... Option ) (* Action , error ) {
22
22
a := & Action {}
23
- a .GetSystemEventLogRequest = req
24
- for _ , opt := range opts {
25
- err := opt (a )
26
- if err != nil {
27
- return nil , err
28
- }
23
+ switch r := req .(type ) {
24
+ case * v1.SystemEventLogRequest :
25
+ a .SystemEventLogRequest = r
26
+ case * v1.SystemEventLogRawRequest :
27
+ a .SystemEventLogRawRequest = r
28
+ default :
29
+ return nil , fmt .Errorf ("unsupported request type" )
29
30
}
30
- return a , nil
31
- }
32
31
33
- func NewSystemEventLogRawGetter (req * v1.GetSystemEventLogRawRequest , opts ... Option ) (* Action , error ) {
34
- a := & Action {}
35
- a .GetSystemEventLogRawRequest = req
36
32
for _ , opt := range opts {
37
33
err := opt (a )
38
34
if err != nil {
39
35
return nil , err
40
36
}
41
37
}
38
+
42
39
return a , nil
43
40
}
44
41
45
- func (m Action ) GetSystemEventLog (ctx context.Context ) (result bmc.SystemEventLogEntries , err error ) {
42
+ func (m Action ) SystemEventLog (ctx context.Context ) (entries bmc.SystemEventLogEntries , raw string , err error ) {
46
43
labels := prometheus.Labels {
47
44
"service" : "diagnostic" ,
48
- "action" : "get_system_event_log" ,
45
+ "action" : m . ActionName ,
49
46
}
50
47
51
48
timer := prometheus .NewTimer (metrics .ActionDuration .With (labels ))
52
49
defer timer .ObserveDuration ()
53
50
54
51
tracer := otel .Tracer ("pbnj" )
55
- ctx , span := tracer .Start (ctx , "diagnostic.GetSystemEventLog" , trace .WithAttributes (
56
- attribute .String ("bmc.device" , m .GetSystemEventLogRequest .GetAuthn ().GetDirectAuthn ().GetHost ().GetHost ()),
52
+ ctx , span := tracer .Start (ctx , "diagnostic." + m . RPCName , trace .WithAttributes (
53
+ attribute .String ("bmc.device" , m .SystemEventLogRequest .GetAuthn ().GetDirectAuthn ().GetHost ().GetHost ()),
57
54
))
58
55
defer span .End ()
59
56
60
- if v := m .GetSystemEventLogRequest .GetVendor (); v != nil {
57
+ if v := m .SystemEventLogRequest .GetVendor (); v != nil {
61
58
span .SetAttributes (attribute .String ("bmc.vendor" , v .GetName ()))
62
59
}
63
60
64
- host , user , password , parseErr := m .ParseAuth (m .GetSystemEventLogRequest .GetAuthn ())
61
+ host , user , password , parseErr := m .ParseAuth (m .SystemEventLogRequest .GetAuthn ())
65
62
if parseErr != nil {
66
63
span .SetStatus (codes .Error , "error parsing credentials: " + parseErr .Error ())
67
- return result , parseErr
64
+ return entries , raw , parseErr
68
65
}
69
66
70
67
span .SetAttributes (attribute .String ("bmc.host" , host ), attribute .String ("bmc.username" , user ))
@@ -75,96 +72,25 @@ func (m Action) GetSystemEventLog(ctx context.Context) (result bmc.SystemEventLo
75
72
}
76
73
77
74
client := bmclib .NewClient (host , user , password , opts ... )
78
- client .Registry .Drivers = client .Registry .Supports (providers .FeatureGetSystemEventLog )
79
-
80
- m .SendStatusMessage ("connecting to BMC" )
81
- err = client .Open (ctx )
82
- meta := client .GetMetadata ()
83
- span .SetAttributes (attribute .StringSlice ("bmc.open.providersAttempted" , meta .ProvidersAttempted ),
84
- attribute .StringSlice ("bmc.open.successfulOpenConns" , meta .SuccessfulOpenConns ))
85
- if err != nil {
86
- span .SetStatus (codes .Error , err .Error ())
87
- return nil , & repository.Error {
88
- Code : v1 .Code_value ["PERMISSION_DENIED" ],
89
- Message : err .Error (),
90
- }
91
- }
92
- log := m .Log .WithValues ("host" , host , "user" , user )
93
- defer func () {
94
- client .Close (ctx )
95
- log .Info ("closed connections" , logMetadata (client .GetMetadata ())... )
96
- }()
97
- log .Info ("connected to BMC" , logMetadata (client .GetMetadata ())... )
98
- m .SendStatusMessage ("connected to BMC" )
99
-
100
- // Get the system event log
101
- m .SendStatusMessage ("getting system event log" )
102
- sel , err := client .GetSystemEventLog (ctx )
103
- log = m .Log .WithValues (logMetadata (client .GetMetadata ())... )
104
- meta = client .GetMetadata ()
105
- span .SetAttributes (attribute .StringSlice ("bmc.get_system_event_log.providersAttempted" , meta .ProvidersAttempted ),
106
- attribute .StringSlice ("bmc.get_system_event_log.successfulOpenConns" , meta .SuccessfulOpenConns ))
107
- if err != nil {
108
- log .Error (err , "error getting system event log" )
109
- span .SetStatus (codes .Error , "error getting system event log: " + err .Error ())
110
- m .SendStatusMessage (fmt .Sprintf ("failed to get system event log %v" , host ))
111
-
112
- return nil , & repository.Error {
113
- Code : v1 .Code_value ["UNKNOWN" ],
114
- Message : err .Error (),
115
- }
116
- }
117
-
118
- span .SetStatus (codes .Ok , "" )
119
- log .Info ("got system event log" , logMetadata (client .GetMetadata ())... )
120
- m .SendStatusMessage (fmt .Sprintf ("got system event log on %v" , host ))
121
-
122
- return sel , nil
123
- }
124
-
125
- func (m Action ) GetSystemEventLogRaw (ctx context.Context ) (result string , err error ) {
126
- labels := prometheus.Labels {
127
- "service" : "diagnostic" ,
128
- "action" : "get_system_event_log_raw" ,
129
- }
130
-
131
- timer := prometheus .NewTimer (metrics .ActionDuration .With (labels ))
132
- defer timer .ObserveDuration ()
133
-
134
- tracer := otel .Tracer ("pbnj" )
135
- ctx , span := tracer .Start (ctx , "diagnostic.GetSystemEventLogRaw" , trace .WithAttributes (
136
- attribute .String ("bmc.device" , m .GetSystemEventLogRawRequest .GetAuthn ().GetDirectAuthn ().GetHost ().GetHost ()),
137
- ))
138
- defer span .End ()
139
75
140
- if v := m .GetSystemEventLogRawRequest .GetVendor (); v != nil {
141
- span .SetAttributes (attribute .String ("bmc.vendor" , v .GetName ()))
76
+ // Set the driver(s) to use based on the request type
77
+ switch {
78
+ case m .SystemEventLogRequest != nil :
79
+ client .Registry .Drivers = client .Registry .Supports (providers .FeatureGetSystemEventLog )
80
+ case m .SystemEventLogRawRequest != nil :
81
+ client .Registry .Drivers = client .Registry .Supports (providers .FeatureGetSystemEventLogRaw )
82
+ default :
83
+ return entries , raw , fmt .Errorf ("unsupported request type" )
142
84
}
143
85
144
- host , user , password , parseErr := m .ParseAuth (m .GetSystemEventLogRawRequest .GetAuthn ())
145
- if parseErr != nil {
146
- span .SetStatus (codes .Error , "error parsing credentials: " + parseErr .Error ())
147
- return result , parseErr
148
- }
149
-
150
- span .SetAttributes (attribute .String ("bmc.host" , host ), attribute .String ("bmc.username" , user ))
151
-
152
- opts := []bmclib.Option {
153
- bmclib .WithLogger (m .Log ),
154
- bmclib .WithPerProviderTimeout (common .BMCTimeoutFromCtx (ctx )),
155
- }
156
-
157
- client := bmclib .NewClient (host , user , password , opts ... )
158
- client .Registry .Drivers = client .Registry .Supports (providers .FeatureGetSystemEventLogRaw )
159
-
160
86
m .SendStatusMessage ("connecting to BMC" )
161
87
err = client .Open (ctx )
162
88
meta := client .GetMetadata ()
163
89
span .SetAttributes (attribute .StringSlice ("bmc.open.providersAttempted" , meta .ProvidersAttempted ),
164
90
attribute .StringSlice ("bmc.open.successfulOpenConns" , meta .SuccessfulOpenConns ))
165
91
if err != nil {
166
92
span .SetStatus (codes .Error , err .Error ())
167
- return "" , & repository.Error {
93
+ return entries , raw , & repository.Error {
168
94
Code : v1 .Code_value ["PERMISSION_DENIED" ],
169
95
Message : err .Error (),
170
96
}
@@ -177,27 +103,37 @@ func (m Action) GetSystemEventLogRaw(ctx context.Context) (result string, err er
177
103
log .Info ("connected to BMC" , logMetadata (client .GetMetadata ())... )
178
104
m .SendStatusMessage ("connected to BMC" )
179
105
180
- // Get the system event log
181
- m .SendStatusMessage ("getting system event log" )
182
- sel , err := client .GetSystemEventLogRaw (ctx )
106
+ m .SendStatusMessage ("getting " + m .ActionName + " on " + host )
107
+
108
+ switch {
109
+ case m .SystemEventLogRequest != nil :
110
+ // Get the system event log
111
+ entries , err = client .GetSystemEventLog (ctx )
112
+ case m .SystemEventLogRawRequest != nil :
113
+ // Get the system event log
114
+ raw , err = client .GetSystemEventLogRaw (ctx )
115
+ default :
116
+ return entries , raw , fmt .Errorf ("unsupported request type" )
117
+ }
118
+
183
119
log = m .Log .WithValues (logMetadata (client .GetMetadata ())... )
184
120
meta = client .GetMetadata ()
185
- span .SetAttributes (attribute .StringSlice ("bmc.get_system_event_log_raw .providersAttempted" , meta .ProvidersAttempted ),
186
- attribute .StringSlice ("bmc.get_system_event_log_raw .successfulOpenConns" , meta .SuccessfulOpenConns ))
121
+ span .SetAttributes (attribute .StringSlice ("bmc." + m . ActionName + " .providersAttempted" , meta .ProvidersAttempted ),
122
+ attribute .StringSlice ("bmc." + m . ActionName + " .successfulOpenConns" , meta .SuccessfulOpenConns ))
187
123
if err != nil {
188
- log .Error (err , "error getting raw system event log" )
189
- span .SetStatus (codes .Error , "error getting raw system event log : " + err .Error ())
190
- m .SendStatusMessage (fmt .Sprintf ("failed to get raw system event log %v" , host ))
124
+ log .Error (err , "error getting " + m . ActionName )
125
+ span .SetStatus (codes .Error , "error getting " + m . ActionName + " : "+ err .Error ())
126
+ m .SendStatusMessage (fmt .Sprintf ("failed to get " + m . ActionName + " %v" , host ))
191
127
192
- return "" , & repository.Error {
128
+ return entries , raw , & repository.Error {
193
129
Code : v1 .Code_value ["UNKNOWN" ],
194
130
Message : err .Error (),
195
131
}
196
132
}
197
133
198
134
span .SetStatus (codes .Ok , "" )
199
- log .Info ("got raw system event log" , logMetadata (client .GetMetadata ())... )
200
- m .SendStatusMessage (fmt .Sprintf ("got raw system event log on %v" , host ))
135
+ log .Info ("got " + m . ActionName , logMetadata (client .GetMetadata ())... )
136
+ m .SendStatusMessage (fmt .Sprintf ("got " + m . ActionName + " on %v" , host ))
201
137
202
- return sel , nil
138
+ return entries , raw , nil
203
139
}
0 commit comments