mirror of
https://github.com/edgelesssys/constellation.git
synced 2024-12-27 00:19:36 -05:00
19b731b5f7
Signed-off-by: Fabian Kammel <fk@edgeless.systems>
66 lines
1.8 KiB
Go
66 lines
1.8 KiB
Go
package azure
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
|
|
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/applicationinsights/armapplicationinsights"
|
|
"github.com/edgelesssys/constellation/internal/azureshared"
|
|
"github.com/microsoft/ApplicationInsights-Go/appinsights"
|
|
)
|
|
|
|
type Logger struct {
|
|
client appinsights.TelemetryClient
|
|
}
|
|
|
|
// NewLogger creates a new client to store information in Azure Application Insights
|
|
// https://github.com/Microsoft/ApplicationInsights-go
|
|
func NewLogger(ctx context.Context, metadata *Metadata) (*Logger, error) {
|
|
providerID, err := metadata.providerID(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
_, resourceGroup, err := azureshared.BasicsFromProviderID(providerID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
uid, err := azureshared.UIDFromProviderID(providerID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
resourceName := "constellation-insights-" + uid
|
|
resp, err := metadata.applicationInsightsAPI.Get(ctx, resourceGroup, resourceName, &armapplicationinsights.ComponentsClientGetOptions{})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if resp.Properties == nil || resp.Properties.InstrumentationKey == nil {
|
|
return nil, errors.New("unable to get instrumentation key")
|
|
}
|
|
client := appinsights.NewTelemetryClient(*resp.Properties.InstrumentationKey)
|
|
|
|
instance, err := metadata.GetInstance(ctx, providerID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
client.Context().CommonProperties["instance-name"] = instance.Name
|
|
|
|
return &Logger{
|
|
client: client,
|
|
}, nil
|
|
}
|
|
|
|
// Disclose stores log information in Azure Application Insights!
|
|
// Do **NOT** log sensitive information!
|
|
func (l *Logger) Disclose(msg string) {
|
|
l.client.Track(appinsights.NewTraceTelemetry(msg, appinsights.Information))
|
|
}
|
|
|
|
// Close blocks until all information are written to cloud API.
|
|
func (l *Logger) Close() error {
|
|
<-l.client.Channel().Close()
|
|
return nil
|
|
}
|