MCPcopy Index your code
hub / github.com/coder/coder / RecordTelemetryStatus

Function RecordTelemetryStatus

coderd/telemetry/telemetry.go:203–248  ·  view source on GitHub ↗

RecordTelemetryStatus records the telemetry status in the database. If the status changed from enabled to disabled, returns a snapshot to be sent to the telemetry server.

( //nolint:revive
	ctx context.Context,
	logger slog.Logger,
	db database.Store,
	telemetryEnabled bool,
)

Source from the content-addressed store, hash-verified

201// If the status changed from enabled to disabled, returns a snapshot to
202// be sent to the telemetry server.
203func RecordTelemetryStatus( //nolint:revive
204 ctx context.Context,
205 logger slog.Logger,
206 db database.Store,
207 telemetryEnabled bool,
208) (*Snapshot, error) {
209 item, err := db.GetTelemetryItem(ctx, string(TelemetryItemKeyTelemetryEnabled))
210 if err != nil && !errors.Is(err, sql.ErrNoRows) {
211 return nil, xerrors.Errorf("get telemetry enabled: %w", err)
212 }
213 var recordedTelemetryEnabled *bool
214 if !errors.Is(err, sql.ErrNoRows) {
215 value, err := strconv.ParseBool(item.Value)
216 if err != nil {
217 logger.Debug(ctx, "parse telemetry enabled", slog.Error(err))
218 }
219 // If ParseBool fails, value will default to false.
220 // This may happen if an admin manually edits the telemetry item
221 // in the database.
222 recordedTelemetryEnabled = &value
223 }
224
225 if err := db.UpsertTelemetryItem(ctx, database.UpsertTelemetryItemParams{
226 Key: string(TelemetryItemKeyTelemetryEnabled),
227 Value: strconv.FormatBool(telemetryEnabled),
228 }); err != nil {
229 return nil, xerrors.Errorf("upsert telemetry enabled: %w", err)
230 }
231
232 shouldReport := ShouldReportTelemetryDisabled(recordedTelemetryEnabled, telemetryEnabled)
233 if !shouldReport {
234 return nil, nil //nolint:nilnil
235 }
236 // If any of the following calls fail, we will never report that telemetry changed
237 // from enabled to disabled. This is okay. We only want to ping the telemetry server
238 // once, and never again. If that attempt fails, so be it.
239 item, err = db.GetTelemetryItem(ctx, string(TelemetryItemKeyTelemetryEnabled))
240 if err != nil {
241 return nil, xerrors.Errorf("get telemetry enabled after upsert: %w", err)
242 }
243 return &Snapshot{
244 TelemetryItems: []TelemetryItem{
245 ConvertTelemetryItem(item),
246 },
247 }, nil
248}
249
250func (r *remoteReporter) runSnapshotter() {
251 telemetryDisabledSnapshot, err := RecordTelemetryStatus(r.ctx, r.options.Logger, r.options.Database, r.Enabled())

Callers 2

runSnapshotterMethod · 0.85

Calls 7

ConvertTelemetryItemFunction · 0.85
GetTelemetryItemMethod · 0.65
UpsertTelemetryItemMethod · 0.65
IsMethod · 0.45
ErrorfMethod · 0.45
ErrorMethod · 0.45

Tested by 1