in src/PortingAssistantExtensionServer/Program.cs [24:99]
static async Task Main(string[] args)
{
try
{
if (args.Length < 1)
{
throw new ArgumentException("Must provide a config file");
}
var config = args[0];
var stdInPipeName = args.Length == 1 ? Common.Constants.stdDebugInPipeName : args[1];
var stdOutPipeName = args.Length == 1 ? Common.Constants.stdDebugOutPipeName : args[2];
Common.PALanguageServerConfiguration.ExtensionVersion = args.Length == 1 ? "0.0.0" : args[3];
var vsClientVersion = args.Length == 1 ? Common.Constants.VS_UNKNOWN : args[4];
Common.PALanguageServerConfiguration.VisualStudioVersion = GetVSVersion(vsClientVersion);
Console.WriteLine($"Porting Assistant Version is {Common.PALanguageServerConfiguration.ExtensionVersion}");
Console.WriteLine($"Visual Studio Version is {Common.PALanguageServerConfiguration.VisualStudioVersion}");
var portingAssistantConfiguration = JsonSerializer.Deserialize<PortingAssistantIDEConfiguration>(File.ReadAllText(config));
var outputTemplate = Common.Constants.DefaultOutputTemplate;
var isConsole = args.Length == 5 && args[4].Equals("--console");
if (args.Length == 5 && !args[4].Equals("--console"))
{
outputTemplate = "[{Timestamp:yyyy-MM-dd HH:mm:ss} {Level:u3}] (Porting Assistant IDE Extension) (" + args[3] + ") {SourceContext}: {Message:lj}{NewLine}{Exception}";
}
Serilog.Formatting.Display.MessageTemplateTextFormatter tf = new Serilog.Formatting.Display.MessageTemplateTextFormatter(outputTemplate, CultureInfo.InvariantCulture);
var logConfiguration = new LoggerConfiguration().Enrich.FromLogContext()
.MinimumLevel.Warning()
.WriteTo.File(
portingAssistantConfiguration.TelemetryConfiguration.LogFilePath,
rollingInterval: RollingInterval.Day,
rollOnFileSizeLimit: true,
outputTemplate: outputTemplate);
if (isConsole)
{
logConfiguration = logConfiguration.WriteTo.Console();
}
Log.Logger = logConfiguration.CreateLogger();
TelemetryCollector.Builder(Log.Logger, portingAssistantConfiguration.TelemetryConfiguration.MetricsFilePath);
var (input, output) = await CreateNamedPipe(stdInPipeName, stdOutPipeName);
var portingAssisstantLanguageServer = new PortingAssistantLanguageServer(
loggingBuilder => loggingBuilder
.SetMinimumLevel(LogLevel.Debug)
.AddLanguageProtocolLogging()
.AddSerilog(logger: Log.Logger, dispose: true),
input,
output,
portingAssistantConfiguration
);
await portingAssisstantLanguageServer.StartAsync();
var logTimer = new System.Timers.Timer();
logTimer.Interval = Convert.ToDouble(portingAssistantConfiguration.TelemetryConfiguration.LogTimerInterval);
var lastReadTokenFile = Path.Combine(portingAssistantConfiguration.TelemetryConfiguration.LogsPath, "lastToken.json");
logTimer.Elapsed += (source, e) => LogUploadUtils.OnTimedEvent(source, e, portingAssistantConfiguration.TelemetryConfiguration, lastReadTokenFile, Common.PALanguageServerConfiguration.AWSProfileName); ;
logTimer.AutoReset = true;
logTimer.Enabled = true;
await portingAssisstantLanguageServer.WaitForShutdownAsync();
if (portingAssisstantLanguageServer.IsSeverStarted() && !_isConnected)
{
await portingAssisstantLanguageServer.WaitForShutdownAsync();
Environment.Exit(0);
}
}
catch (Exception ex)
{
Log.Logger.Error(ex, "Porting Assistant Extension failed with error: ");
Environment.Exit(1);
}
finally
{
Log.CloseAndFlush();
}
}