Exemple #1
0
        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
        }
Exemple #2
0
        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
        }
Exemple #3
0
        /// <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);
        }
Exemple #4
0
        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);
        }