2016-08-30 2 views
0

가능한 한 모든 원격 측정 항목에 사용자 정의 데이터 필드를 추가하려고합니다.이 데이터는 단일 조작에서 일관되지만 조작마다 다릅니다. 나는 정의 ITelemetryInitializer이 있고, 그 안에 내가 좋아하는 뭔가를 할 수 있습니다Application Insights telemetry에 조작을위한 사용자 정의 데이터 추가하기

public class MyInitializer : ITelemetryInitializer 
{ 
    public void Initialize(Microsoft.ApplicationInsights.Channel.ITelemetry telemetry) 
    { 
      telemetry.Context.Properties[ "platform" ] = "PC"; 
    } 
} 

을하지만 나는이 초기화에이 데이터를 밀어 가정하고있어 이해가 안 돼요.

public class MyInitializer : ITelemetryInitializer 
{ 
    private string mPlatform = "unknown"; 

    public void Initialize(Microsoft.ApplicationInsights.Channel.ITelemetry telemetry) 
    { 
      telemetry.Context.Properties[ "platform" ] = mPlatform; 
    } 

    public void SetPlatform(string platform) 
    { 
     mPlatform = platform 
    } 
} 

그리고 컨트롤러 레벨에서 내가 이런 일을 수행합니다 :이 같은 것을 추가 한

foreach (var init in TelemetryConfiguration.Active.TelemetryInitializers) 
{ 
    var customInit = init as MyInitializer; 

    if (customInit != null) 
    { 
     customInit.SetPlatform(requestPlatform); 
    } 
} 

을하지만이 끔찍하게 투박하고, 오류가 발생하는 경향이다 (예 : 이 함수가 호출되기 전에 원격 측정 값이 전송되면), 그리고 이것이 thread-safe인지는 확실하지 않습니다.

이러한 종류의 데이터를 전달하기위한 의도 된 방법은 무엇입니까?

[Route("[controller]")] 
public class MyController : Controller 
{ 
    private readonly TelemetryClient  mTelemetryClient; 

    public MyController( 
     TelemetryClient    TelemetryClientArg) 
    { 
     mTelemetryClient = TelemetryClientArg; 
     mTelemetryClient.Context.Properties.Remove("platform"); 
    } 

    [HttpPost] 
    [Produces("application/json")] 
    public IActionResult Post([FromBody] RequestClass RequestData) 
    { 
     mTelemetryClient.TrackTrace("Test trace 1"); // doesn't have platform set 
     mTelemetryClient.Context.Properties["platform"] = RequestData.platform; 
     mTelemetryClient.TrackTrace("Test trace 2"); // has platform set correctly 
    } 
} 

이 컨트롤러 생성자를 호출 할 나타나는 안전 할 것 같다 : 내가 지금이 문제를 해결했다고 생각

답변

0

이 솔루션은이 같은 컨트롤러 내에서 TelemetryClient의 특성에 작성하는 것입니다 각 HTTP 요청이 처리되고 TelemetryClient 내의 컨텍스트가 스레드마다 고유합니다. 나는 이것이 합리적이라는 팀의 확인을 얻고 싶다.

관련 문제