func()

in appinsights/telemetrycontext.go [46:104]


func (context *TelemetryContext) envelop(item Telemetry) *contracts.Envelope {
	// Apply common properties
	if props := item.GetProperties(); props != nil && context.CommonProperties != nil {
		for k, v := range context.CommonProperties {
			if _, ok := props[k]; !ok {
				props[k] = v
			}
		}
	}

	tdata := item.TelemetryData()
	data := contracts.NewData()
	data.BaseType = tdata.BaseType()
	data.BaseData = tdata

	envelope := contracts.NewEnvelope()
	envelope.Name = tdata.EnvelopeName(context.nameIKey)
	envelope.Data = data
	envelope.IKey = context.iKey

	timestamp := item.Time()
	if timestamp.IsZero() {
		timestamp = currentClock.Now()
	}

	envelope.Time = timestamp.UTC().Format("2006-01-02T15:04:05.999999Z")

	if contextTags := item.ContextTags(); contextTags != nil {
		envelope.Tags = contextTags

		// Copy in default tag values.
		for tagkey, tagval := range context.Tags {
			if _, ok := contextTags[tagkey]; !ok {
				contextTags[tagkey] = tagval
			}
		}
	} else {
		// Create new tags object
		envelope.Tags = make(map[string]string)
		for k, v := range context.Tags {
			envelope.Tags[k] = v
		}
	}

	// Create operation ID if it does not exist
	if _, ok := envelope.Tags[contracts.OperationId]; !ok {
		envelope.Tags[contracts.OperationId] = newUUID().String()
	}

	// Sanitize.
	for _, warn := range tdata.Sanitize() {
		diagnosticsWriter.Printf("Telemetry data warning: %s", warn)
	}
	for _, warn := range contracts.SanitizeTags(envelope.Tags) {
		diagnosticsWriter.Printf("Telemetry tag warning: %s", warn)
	}

	return envelope
}