static void Main(string[] args) { #region Initial Setup long elapsedTime; Stopwatch stopwatch = null; SitesAPI sitesAPI = null; // Read all configuration parameters configParameters = ReadConfigParameters(); bool debug = Convert.ToBoolean(configParameters["DebugMode"]); numberOfBoardsPerRound = Convert.ToInt32(configParameters["NumberOfBoardsPerRound"]); totalNumberOfPairs = Convert.ToInt32(configParameters["TotalNumberOfPairs"]); // Initialize Google SitesAPI Console.WriteLine("Initializing connection to Google Site"); Console.WriteLine(); if (Boolean.Parse(configParameters["RunUpdateGoogleSite"])) { sitesAPI = new SitesAPI(configParameters["GoogleSiteName"], configParameters["Username"], configParameters["Password"], debug); } #endregion #region Main Loop // Run continuously while (true) { try { stopwatch = Stopwatch.StartNew(); if (debug) { Console.WriteLine("Running at " + DateTime.Now.ToString()); } // Calculate Scores and Update Files Console.WriteLine("Creating Running scores and Board files"); Console.WriteLine(); DataTable runningScores = CreateRunningScoresFile(totalNumberOfPairs, debug); if (Boolean.Parse(configParameters["RunUpdateGoogleSite"])) { // Upload Running Scores Console.WriteLine("Uploading running scores"); Console.WriteLine(); sitesAPI.uploadDirectory(configParameters["OutputFolder"] + "\\runningscores", configParameters["GoogleRunningScoresRoot"], configParameters["BackupFolder"]); } } catch (Exception e) { Console.WriteLine("Exception Encountered : " + e.ToString()); } if (Convert.ToBoolean(configParameters["RunOnce"])) { break; } Console.WriteLine("Done processing..."); Console.WriteLine(); elapsedTime = stopwatch.ElapsedMilliseconds; if (debug) { Console.WriteLine("...Sleeping for " + (long.Parse(configParameters["UpdateFrequency"]) - elapsedTime) + " milliseconds."); } if (elapsedTime < long.Parse(configParameters["UpdateFrequency"])) { Thread.Sleep((int)(long.Parse(configParameters["UpdateFrequency"]) - elapsedTime)); } } #endregion }
static void Main(string[] args) { #region Initial Setup long elapsedTime; Stopwatch stopwatch = null; NameValueCollection nameNumberMapping = null; SpreadSheetAPI spreadsheetAPI = null; SitesAPI sitesAPI = null; // Read all configuration parameters configParameters = ReadConfigParameters(); bool debug = Convert.ToBoolean(configParameters["DebugMode"]); playOffMode = Convert.ToBoolean(configParameters["Playoffs"]); isMultiSegment = Convert.ToInt16(configParameters["NumberOfSegmentsPerRound"]) > 1; #region Initialize SpreadsheetAPI and gather information if (Boolean.Parse(configParameters["RunUpdateGoogleSpreadsheet"])) { Console.WriteLine("Retrieving event parameter data from spreadsheet"); Console.WriteLine(); try { spreadsheetAPI = new SpreadSheetAPI(configParameters["GoogleSpreadsheetName"], configParameters["Username"], configParameters["Password"], debug); totalNumberOfTeams = spreadsheetAPI.getNumberOfTeams(); eventName = spreadsheetAPI.getEventName(); numberOfBoardsPerRound = spreadsheetAPI.getNumberOfBoards(); nameNumberMapping = spreadsheetAPI.getTeamNames(debug); isMultiRound = spreadsheetAPI.getNumberOfRounds() > 1; } catch (Exception) { if (debug) { Console.WriteLine("Spreadsheet call failed. Using parameters from Config"); } GetEventParametersFromConfig(out totalNumberOfTeams, out eventName, out numberOfBoardsPerRound, out nameNumberMapping); } } else { Console.WriteLine("Retrieving event parameter data from config"); Console.WriteLine(); GetEventParametersFromConfig(out totalNumberOfTeams, out eventName, out numberOfBoardsPerRound, out nameNumberMapping); } #endregion // If we are in playoffs, always read number of rounds and teams from config if (isMultiSegment) { numberOfBoardsPerRound = Convert.ToInt32(configParameters["NumberOfBoardsPerSegment"]); } if (playOffMode) { totalNumberOfTeams = Convert.ToInt32(configParameters["TotalNumberOfTeams"]); } // Initialize Google SitesAPI Console.WriteLine("Initializing connection to Google Site"); Console.WriteLine(); if (Boolean.Parse(configParameters["RunUpdateGoogleSite"])) { sitesAPI = new SitesAPI(configParameters["GoogleSiteName"], configParameters["Username"], configParameters["Password"], debug); } #endregion #region Main Loop // Run continuously while (true) { try { stopwatch = Stopwatch.StartNew(); if (debug) { Console.WriteLine("Running at " + DateTime.Now.ToString()); } // Calculate Scores and Update Files Console.WriteLine("Creating Butler, Running scores and Board files"); Console.WriteLine(); DataTable runningScores = CreateButlerAndRunningScoresFiles(totalNumberOfTeams, nameNumberMapping, debug); if (Boolean.Parse(configParameters["RunUpdateGoogleSite"])) { // Upload Running Scores Console.WriteLine("Uploading running scores"); Console.WriteLine(); sitesAPI.uploadDirectory(configParameters["OutputFolder"] + "\\runningscores", configParameters["GoogleRunningScoresRoot"], configParameters["BackupFolder"]); } if (isEndOfSegment) { // Upload Butler Scores at the end of each segment if (Boolean.Parse(configParameters["RunUpdateGoogleSite"]) && Boolean.Parse(configParameters["UseButlerScores"])) { Console.WriteLine("Uploading Butler Scores"); Console.WriteLine(); sitesAPI.uploadDirectory(configParameters["OutputFolder"] + "\\butlerscores", configParameters["GoogleButlerScoresRoot"], configParameters["BackupFolder"]); } // Only write to the spreadsheet at the end of the round - we don't track segment scores in the spreadsheet if (Boolean.Parse(configParameters["RunUpdateGoogleSpreadsheet"]) && segmentInProgress == Convert.ToInt16(configParameters["NumberOfSegmentsPerRound"])) { Console.WriteLine(String.Format("Uploading spreadsheet with round scores for Round {0}", roundInProgress)); Console.WriteLine(); GetWebScores(ref runningScores, nameNumberMapping); spreadsheetAPI.updateScores(roundInProgress, runningScores, debug); } } } catch (Exception e) { Console.WriteLine("Exception Encountered : " + e.ToString()); } if (Convert.ToBoolean(configParameters["RunOnce"])) { break; } Console.WriteLine("Done processing..."); Console.WriteLine(); elapsedTime = stopwatch.ElapsedMilliseconds; if (debug) { Console.WriteLine("...Sleeping for " + (long.Parse(configParameters["UpdateFrequency"]) - elapsedTime) + " milliseconds."); } if (elapsedTime < long.Parse(configParameters["UpdateFrequency"])) { Thread.Sleep((int)(long.Parse(configParameters["UpdateFrequency"]) - elapsedTime)); } } #endregion }
/// <summary> /// Чтение данных из файла и запись в БД Амур через REST сервис. /// </summary> /// <param name="filePath">Путь к файлу.</param> /// <param name="client">REST</param> /// <returns></returns> public static async Task <int> Import(HttpClient client, string filePath, FileType dataFileType) { // PARSE List <Data> datas = Parse(filePath, dataFileType); // GET UTC OFFSET SiteAttributeValue sav = await SiteAttributesAPI.GetByFilterAsync(client, new SiteAttribute { DateS = DateTime.Today, SiteAttributeTypeId = (int)EnumSiteAttrType.UTCOffset, SiteId = SITE_ID_BPISTAC }); if (sav == null) { throw new Exception($"Отсутствует UTCOffset для сайта id={SITE_ID_BPISTAC}."); } int utcOffset = int.Parse(sav.Value); // GET Sample attributes Site parentSite = await SitesAPI.GetByIdAsync(client, SITE_ID_BPISTAC); List <Site> sampleSites = await GetSampleSites(client, parentSite, utcOffset, datas.Select(x => x.PointName).Distinct()); List <DeviceItem> deviceItems = await GetDeviceItems(client, _deviceNames); List <Sample> samples = await GetSamples(client, sampleSites, datas); List <SampleDeviceItem> sampleDeviceItems = await GetSampleDeviceItems(client, deviceItems, samples); // PREPARE CATALOG BUFFER List <Catalog> catalogs = await CatalogsAPI.GetByFilterAsync(client, new CatalogFilter { Sites = sampleSites.Select(x => x.Id).ToList() }); // INSERT DATA int itemsCount = 0; int bufItemsLength = 50000; for (int i = 0; i < datas.Count; i++) { Data data = datas[i]; if (_amurVars.Count != datas[i].Values.Count) { throw new Exception("(_amurVars.Count != datas[i].Values.Count)"); } // GET SAMPLE_DEVICE_ITEM int siteId; { IEnumerable <Site> sites1 = sampleSites.Where(x => x.Name.ToUpper() == data.PointName.Trim().ToUpper()); if (sites1.Count() != 1) { throw new Exception("(sites.Count() != 1)"); } siteId = sites1.ElementAt(0).Id; } int sampleId; { IEnumerable <Sample> samples1 = samples.Where(x => x.SiteId == siteId && x.SampleNum == data.SampleNum); if (samples1.Count() != 1) { throw new Exception("(samples1.Count() != 1)"); } sampleId = samples1.ElementAt(0).Id; } for (int iVar = 0; iVar < _amurVars.Count;) { // GET SAMPLE DEVICE ITEM int sampleDeviceItemId; { IEnumerable <SampleDeviceItem> sampleDeviceItems1 = sampleDeviceItems.Where(x => x.SampleId == sampleId && x.DeviceItemId == deviceItems[_varXdev[iVar]].Id ); if (sampleDeviceItems1.Count() != 1) { throw new Exception("(sampleDeviceItems1.Count() != 1)"); } sampleDeviceItemId = sampleDeviceItems1.ElementAt(0).Id; } // GET or CREATE CATALOGS FOR VARIABLE Catalog catalog = new Catalog { MethodId = (int)EnumMethod.ObservationInSitu, ParentId = null, SiteId = siteId, SourceId = SOURCE_ID_PGI, VariableId = _amurVars[iVar][0], ValueTypeId = _amurVars[iVar][1], OffsetTypeId = (int)EnumOffsetType.Sample, OffsetValue = sampleDeviceItemId }; List <Catalog> catalogs1 = catalogs.FindAll(x => x.MethodId == catalog.MethodId && !x.ParentId.HasValue && x.SiteId == catalog.SiteId && x.SourceId == catalog.SourceId && x.VariableId == catalog.VariableId && x.ValueTypeId == catalog.ValueTypeId && x.OffsetTypeId == catalog.OffsetTypeId && x.OffsetValue == catalog.OffsetValue ); if (catalogs1.Count == 0) { catalog.Id = await CatalogsAPI.CreateAsync(client, catalog); catalogs.Add(catalog); } else if (catalogs1.Count == 1) { catalog = catalogs1[0]; } else { throw new Exception($"(catalogs1.Count = {catalogs1.Count })"); } // CONVERT DATA 2 AMUR DATAVALUES List <DataValue> bufDatas = new List <DataValue>(bufItemsLength); for (int k = 0; k < bufItemsLength; k++) { if (iVar < datas[i].Values.Count) { bufDatas.Add(new DataValue() { CatalogId = catalog.Id, Date = data.Date, DateTypeId = (int)EnumDateType.LOC, UTCOffset = utcOffset, Value = data.Values[iVar], FlagAQC = (byte)EnumFlagAQC.NoAQC }); iVar++; itemsCount++; } } // INSERT DATAVALUES BUF Console.WriteLine($"Insert data buf ({bufDatas.Count} elements)..."); //////await DataValuesAPI.Insert(client, bufDatas); } } return(itemsCount); }
public static int EMERCIT_ORG_ID = 1297; // EMERCIT /// <summary> /// Чтение данных из файла и запись в БД Амур через REST сервис. /// </summary> /// <param name="filePath">Путь к файлу.</param> /// <param name="client">REST</param> /// <returns></returns> public static async Task <int> Import(HttpClient client, string filePath) { // Дата актуальности, которая фигурирует при записи атрибутов пункта. DateTime importSiteAttrDateActual = new DateTime(2000, 1, 1); // PARSE FILE List <FileSite.SiteEMERCIT> sites = FileSite.Parse(filePath); Console.WriteLine($"{sites.Count} readed from file [{filePath}]"); // INSERT DATA List <Site> allSites = await SitesAPI.GetByFilterAsync(client, new Amur.Data.Filters.SiteFilter { OwnerId = EMERCIT_ORG_ID, SiteTypeId = EMERCIT_SITE_TYPE_ID }); int i = 1; foreach (var siteE in sites) { Console.WriteLine($"Insert site #{i++}"); // GET EXISTING or CREATE SITE Site existSite = allSites.FirstOrDefault(x => x.Code == siteE.Site.Code && x.Name == siteE.Site.Name); int siteId = (existSite == null) ? await SitesAPI.CreateAsync(client, siteE.Site) : existSite.Id; // GET EXISTING or CREATE GEOOBJECTS int?goFallIntoId = await GetGeoObjectId(client, siteE.FallIntoName); int?goId = await GetGeoObjectId(client, siteE.RiverName, (int)EnumGeoObject.River, goFallIntoId); if (goId.HasValue) { List <SiteXGeoObject> sgos = await SiteXGeoObjectAPI.GetBySiteIdAsync(client, siteId); if (sgos == null || sgos.Count == 0) { SiteXGeoObjectAPI.CreateAsync(client, new SiteXGeoObject { SiteId = siteId, GeoObjectId = (int)goId, OrderBy = -1 }); } } // CREATE SITE ATTRIBUTES await SiteAttributesAPI.CreateAsync(client, siteId, (int)EnumSiteAttrType.CatchmentArea, siteE.CatchmentArea, importSiteAttrDateActual); await SiteAttributesAPI.CreateAsync(client, siteId, (int)EnumSiteAttrType.NYa, siteE.NYa, importSiteAttrDateActual); await SiteAttributesAPI.CreateAsync(client, siteId, (int)EnumSiteAttrType.OYa, siteE.OYa, importSiteAttrDateActual); await SiteAttributesAPI.CreateAsync(client, siteId, (int)EnumSiteAttrType.DistFromMouth, siteE.DistFromMouth, importSiteAttrDateActual); await SiteAttributesAPI.CreateAsync(client, siteId, (int)EnumSiteAttrType.MarkSiteZeroBS77, siteE.DeviceLevel, importSiteAttrDateActual); await SiteAttributesAPI.CreateAsync(client, siteId, (int)EnumSiteAttrType.UTCOffset, siteE.UTCOffset, importSiteAttrDateActual); } Console.WriteLine($"Site import ended..."); return(sites.Count); }