| 737 | } |
| 738 | |
| 739 | func (b *BasicTelemetryController) SendTelemetryEvent(event *proto.TelemetryEvent) { |
| 740 | b.Lock() |
| 741 | if b.client == nil { |
| 742 | b.Unlock() |
| 743 | b.logger.Debug(context.Background(), |
| 744 | "telemetry event dropped; no client", slog.F("event", event)) |
| 745 | return |
| 746 | } |
| 747 | if b.unavailable { |
| 748 | b.Unlock() |
| 749 | b.logger.Debug(context.Background(), |
| 750 | "telemetry event dropped; unavailable", slog.F("event", event)) |
| 751 | return |
| 752 | } |
| 753 | client := b.client |
| 754 | b.Unlock() |
| 755 | unavailable := sendTelemetry(b.logger, client, event) |
| 756 | if unavailable { |
| 757 | b.Lock() |
| 758 | defer b.Unlock() |
| 759 | if b.client == client { |
| 760 | b.unavailable = true |
| 761 | } |
| 762 | } |
| 763 | } |
| 764 | |
| 765 | func NewBasicTelemetryController(logger slog.Logger) *BasicTelemetryController { |
| 766 | return &BasicTelemetryController{logger: logger} |