public static bool Upload()

in src/PortingAssistant.Client.Telemetry/Uploader.cs [22:120]


        public static bool Upload(TelemetryConfiguration teleConfig, string profile, string prefix)
        {
            try
            {
                var fileEntries = new List<string> {
                    teleConfig.LogFilePath,
                    teleConfig.MetricsFilePath
                }.Where(x => !string.IsNullOrEmpty(x) && File.Exists(x)).ToList();

                var lastReadTokenFile = Path.Combine(teleConfig.LogsPath, "lastToken.json");
                var fileLineNumberMap = new Dictionary<string, int>();
                if (File.Exists(lastReadTokenFile))
                {
                    fileLineNumberMap = JsonConvert.DeserializeObject<Dictionary<string, int>>(File.ReadAllText(lastReadTokenFile));
                }
                foreach (var file in fileEntries)
                {
                    var logName = Path.GetFileNameWithoutExtension(file);
                    var fileExtension = Path.GetExtension(file);
                    if (fileExtension == ".log")
                    {
                        logName = $"{logName}-logs";
                    }
                    else if (fileExtension == ".metrics")
                    {
                        logName = $"{logName}-metrics";
                    }

                    // Add new files to fileLineNumberMap
                    if (!fileLineNumberMap.ContainsKey(file))
                    {
                        fileLineNumberMap[file] = 0;
                    }
                    var initLineNumber = fileLineNumberMap[file];

                    FileInfo fileInfo = new FileInfo(file);
                    var success = false;
                    using (FileStream fs = fileInfo.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                    {
                        using (StreamReader reader = new StreamReader(fs))
                        {
                            // If put-log api works keep sending logs else wait and do it next time
                            var logs = new ArrayList();

                            int currLineNumber = 0;
                            for (; currLineNumber < initLineNumber; currLineNumber++)
                            {
                                string line = reader.ReadLine();
                                if (line == null)
                                {
                                    return true;
                                }
                            }

                            while (!reader.EndOfStream)
                            {
                                currLineNumber++;
                                logs.Add(reader.ReadLine());

                                // send 1000 lines of logs each time when there are large files
                                if (logs.Count >= 1000)
                                {
                                    // logs.TrimToSize();
                                    success = PutLogData(logName, JsonConvert.SerializeObject(logs), profile, teleConfig).Result;
                                    if (success) { logs = new ArrayList(); }
                                    else
                                    {
                                        return false;
                                    }
                                }
                            }

                            if (logs.Count != 0)
                            {
                                success = PutLogData(logName, JsonConvert.SerializeObject(logs), profile, teleConfig).Result;
                                if (!success)
                                {
                                    return false;
                                }
                            }

                            if (success)
                            {
                                fileLineNumberMap[file] = currLineNumber;
                                string jsonString = JsonConvert.SerializeObject(fileLineNumberMap);
                                File.WriteAllText(lastReadTokenFile, jsonString);
                            }
                        }
                    }
                }

                return true;
            }
            catch (Exception ex)
            {
                Log.Logger.Error(ex.Message);
                return false;
            }
        }