1*e7b1675dSTing-Kang Chang// Copyright 2022 Google LLC 2*e7b1675dSTing-Kang Chang// 3*e7b1675dSTing-Kang Chang// Licensed under the Apache License, Version 2.0 (the "License"); 4*e7b1675dSTing-Kang Chang// you may not use this file except in compliance with the License. 5*e7b1675dSTing-Kang Chang// You may obtain a copy of the License at 6*e7b1675dSTing-Kang Chang// 7*e7b1675dSTing-Kang Chang// http://www.apache.org/licenses/LICENSE-2.0 8*e7b1675dSTing-Kang Chang// 9*e7b1675dSTing-Kang Chang// Unless required by applicable law or agreed to in writing, software 10*e7b1675dSTing-Kang Chang// distributed under the License is distributed on an "AS IS" BASIS, 11*e7b1675dSTing-Kang Chang// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*e7b1675dSTing-Kang Chang// See the License for the specific language governing permissions and 13*e7b1675dSTing-Kang Chang// limitations under the License. 14*e7b1675dSTing-Kang Chang// 15*e7b1675dSTing-Kang Chang//////////////////////////////////////////////////////////////////////////////// 16*e7b1675dSTing-Kang Chang 17*e7b1675dSTing-Kang Chang// Package internalregistry provides a container for functionality that is required 18*e7b1675dSTing-Kang Chang// across Tink similar to the `registry` but isn't part of the public API. 19*e7b1675dSTing-Kang Changpackage internalregistry 20*e7b1675dSTing-Kang Chang 21*e7b1675dSTing-Kang Changimport ( 22*e7b1675dSTing-Kang Chang "fmt" 23*e7b1675dSTing-Kang Chang "sync" 24*e7b1675dSTing-Kang Chang 25*e7b1675dSTing-Kang Chang "github.com/google/tink/go/monitoring" 26*e7b1675dSTing-Kang Chang) 27*e7b1675dSTing-Kang Chang 28*e7b1675dSTing-Kang Changvar ( 29*e7b1675dSTing-Kang Chang monitoringClientMu sync.RWMutex 30*e7b1675dSTing-Kang Chang monitoringClient monitoring.Client = defaultClient 31*e7b1675dSTing-Kang Chang) 32*e7b1675dSTing-Kang Chang 33*e7b1675dSTing-Kang Changtype doNothingLogger struct{} 34*e7b1675dSTing-Kang Chang 35*e7b1675dSTing-Kang Changvar _ monitoring.Logger = (*doNothingLogger)(nil) 36*e7b1675dSTing-Kang Chang 37*e7b1675dSTing-Kang Changfunc (l *doNothingLogger) Log(uint32, int) {} 38*e7b1675dSTing-Kang Chang 39*e7b1675dSTing-Kang Changfunc (l *doNothingLogger) LogFailure() {} 40*e7b1675dSTing-Kang Chang 41*e7b1675dSTing-Kang Changvar defaultLogger = &doNothingLogger{} 42*e7b1675dSTing-Kang Chang 43*e7b1675dSTing-Kang Changtype doNothingClient struct{} 44*e7b1675dSTing-Kang Chang 45*e7b1675dSTing-Kang Changvar _ monitoring.Client = (*doNothingClient)(nil) 46*e7b1675dSTing-Kang Chang 47*e7b1675dSTing-Kang Changfunc (c *doNothingClient) NewLogger(*monitoring.Context) (monitoring.Logger, error) { 48*e7b1675dSTing-Kang Chang return defaultLogger, nil 49*e7b1675dSTing-Kang Chang} 50*e7b1675dSTing-Kang Chang 51*e7b1675dSTing-Kang Changvar defaultClient = &doNothingClient{} 52*e7b1675dSTing-Kang Chang 53*e7b1675dSTing-Kang Chang// RegisterMonitoringClient registers a client that can create loggers. 54*e7b1675dSTing-Kang Changfunc RegisterMonitoringClient(client monitoring.Client) error { 55*e7b1675dSTing-Kang Chang monitoringClientMu.Lock() 56*e7b1675dSTing-Kang Chang defer monitoringClientMu.Unlock() 57*e7b1675dSTing-Kang Chang if monitoringClient != nil && monitoringClient != defaultClient { 58*e7b1675dSTing-Kang Chang return fmt.Errorf("monitoring client is already registered") 59*e7b1675dSTing-Kang Chang } 60*e7b1675dSTing-Kang Chang monitoringClient = client 61*e7b1675dSTing-Kang Chang return nil 62*e7b1675dSTing-Kang Chang} 63*e7b1675dSTing-Kang Chang 64*e7b1675dSTing-Kang Chang// ClearMonitoringClient removes the registered monitoring client. 65*e7b1675dSTing-Kang Changfunc ClearMonitoringClient() { 66*e7b1675dSTing-Kang Chang monitoringClientMu.Lock() 67*e7b1675dSTing-Kang Chang defer monitoringClientMu.Unlock() 68*e7b1675dSTing-Kang Chang monitoringClient = defaultClient 69*e7b1675dSTing-Kang Chang} 70*e7b1675dSTing-Kang Chang 71*e7b1675dSTing-Kang Chang// GetMonitoringClient returns the registered monitoring client. 72*e7b1675dSTing-Kang Changfunc GetMonitoringClient() monitoring.Client { 73*e7b1675dSTing-Kang Chang return monitoringClient 74*e7b1675dSTing-Kang Chang} 75