public async Task <IActionResult> UploadFiles(IFormFile file, string guid)
        {
            var filextention = Path.GetExtension(file.FileName);

            //if (filextention != ".xls" && filextention != ".xlsx")

            //验证文件格式
            using (var stream = file.OpenReadStream())
            {
                var objid = await _mongoRepository.UploadFileAsync(stream, file.FileName, new GridFSUploadOptions { Metadata = new BsonDocument
                                                                                                                    {
                                                                                                                        { "PostId", guid }
                                                                                                                    } });

                if (objid != null)
                {
                    ApiDataHelper.GetHtmlId(objid.ToString());
                    return(Json(new Response <string> {
                        Data = objid.ToString(), Msg = "上传成功", Status = 1
                    }));
                }
                return(Json(new Response <string> {
                    Data = "", Msg = "上传失败", Status = 0
                }));
            }
        }
        public void Return_CorrectMinMaxValues_WhenPassedBooleansAsString(string description)
        {
            var result = ApiDataHelper.GetMinAndMaxRange(description);

            Assert.AreEqual(0, result.MinRange);
            Assert.AreEqual(1, result.MaxRange);
        }
예제 #3
0
        public SsoUser GetUser()
        {
            //sso逻辑
            var token = HttpContext.Current.Request.QueryString["token"];

            if (token.IsNullOrEmpty())
            {
                token = CookieHelper.GetCookieValue("token");
            }
            //根据token 获取用户信息,并保存token
            if (!token.IsNullOrEmpty())
            {
                try
                {
                    var ssoserver    = ConfigSettingHelper.GetAppStr("ssoserver");
                    var userinfojson = ApiDataHelper.GetData(ssoserver + api + "?token=" + token);
                    var user         = JsonHelper.DeserializeObject <SsoUser>(userinfojson);
                    return(user);
                }
                catch (Exception ex)
                {
                    LogHelper.Error(ex);
                }
            }
            return(null);
        }
        /// <summary>
        /// get content by file id
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public async Task <IActionResult> GetKnownHtml(string id)
        {
            var fileInfo = await _mongoRepository.GetFileInfoAsync(id);

            if (FileHelper.FileCollections.ContainsKey(Path.GetExtension(fileInfo.Filename).ToLowerInvariant()))
            {
                switch (FileHelper.FileCollections[Path.GetExtension(fileInfo.Filename).ToLowerInvariant()])
                {
                case 0:    //无须转且可直接预览
                    //return await DownloadFile(id);
                    return(new FileContentResult(await GetByte(id), FileHelper.GetContentType(fileInfo.Filename)));

                //return Content(await GetText(id), FileHelper.GetContentType(fileInfo.Filename));
                case 1:    //必须转
                    if (fileInfo.Metadata.Contains("HtmlId") && fileInfo.Metadata["HtmlId"] != "")
                    {
                        string text = await GetText(fileInfo.Metadata["HtmlId"].ToString(), "Htmls");

                        return(Content(text, "text/html", Encoding.UTF8));
                    }

                    var htmlid = await ApiDataHelper.GetHtmlId(id);

                    var hz = 0;
                    while (htmlid == "" && hz < 2)
                    {
                        htmlid = await ApiDataHelper.GetHtmlId(id);

                        hz++;
                    }
                    if (htmlid == "")    //again
                    {
                        return(Content("文件转换多次未成功,请查看文档及转换接口", "text/html", Encoding.UTF8));
                    }
                    var stext = await GetText(htmlid, "Htmls");

                    return(Content(stext, "text/html", Encoding.UTF8));

                default:    //todo
                    break;
                }
            }

            return(Content("附件格式无法识别...", "text/html", Encoding.UTF8));
        }
예제 #5
0
        public async Task AddSensors(IReadOnlyList <ApiSensorDetailsDTO> lastApiSensors)
        {
            bool shouldCallSaveChanges = false;

            foreach (var newSensor in lastApiSensors)
            {
                var measureType = await this.Context
                                  .MeasureTypes
                                  .FirstOrDefaultAsync(mt => mt.MeasureUnit == newSensor.MeasureType && !mt.IsDeleted);

                if (measureType != null)
                {
                    var(MinRange, MaxRange) = ApiDataHelper
                                              .GetMinAndMaxRange(newSensor.Description);

                    var icbSensorToAdd = new IcbSensor
                    {
                        Id              = newSensor.ApiSensorId,
                        Description     = newSensor.Description,
                        Tag             = newSensor.Tag,
                        MeasureTypeId   = measureType.Id,
                        PollingInterval = newSensor.MinPollingIntervalInSeconds,
                        MinRangeValue   = MinRange,
                        MaxRangeValue   = MaxRange,
                        CreatedOn       = DateTime.Now
                    };

                    await this.Context.IcbSensors.AddAsync(icbSensorToAdd);

                    if (!shouldCallSaveChanges)
                    {
                        shouldCallSaveChanges = true;
                    }
                }
            }

            if (shouldCallSaveChanges)
            {
                await this.Context.SaveChangesAsync();
            }
        }
예제 #6
0
        public async override Task <ApiData> GetMinerStatsDataAsync()
        {
            var summaryApiResult = await apiReader.GetApiDataAsync(_apiPort, ApiDataHelper.GetHttpRequestNhmAgentStrin("summary"));

            double totalSpeed = 0;
            int    totalPower = 0;

            if (!string.IsNullOrEmpty(summaryApiResult))
            {
                // TODO return empty
                try
                {
                    var summaryOptvals = summaryApiResult.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
                    foreach (var optvalPairs in summaryOptvals)
                    {
                        var pair = optvalPairs.Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
                        if (pair.Length != 2)
                        {
                            continue;
                        }
                        if (pair[0] == "KHS")
                        {
                            totalSpeed = double.Parse(pair[1], CultureInfo.InvariantCulture) * 1000; // HPS
                        }
                    }
                }
                catch
                { }
            }
            var ad    = new ApiData();
            var total = new List <(AlgorithmType, double)>();

            total.Add((_algorithmType, totalSpeed));
            ad.AlgorithmSpeedsTotal = total;
            ad.PowerUsageTotal      = totalPower;
            // cpuMiner is single device so no need for API

            return(ad);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="file"></param>
        /// <param name="postguid"></param>
        /// <param name="type">1:QA 2:Reply</param>
        /// <returns></returns>
        public async Task <IActionResult> QAUploadFiles(IFormFile file, string postguid, int type = 1)
        {
            if (file == null || file.Length == 0)
            {
                return(Json(new Response <bool> {
                    Data = false, Msg = "未选择文件", Status = 0
                }));
            }

            var filextention = Path.GetExtension(file.FileName);
            //if (filextention != ".xls" && filextention != ".xlsx")
            //    return Json(new Response<bool> { Data = false, Msg = "请选择Excel文件", Status = 0 });

            //验证文件格式
            GridFSUploadOptions options = new GridFSUploadOptions
            {
                Metadata = new BsonDocument
                {
                    {
                        "PostId", postguid
                    },
                    {
                        "Type", type
                    }
                }
            };

            using (var stream = file.OpenReadStream())
            {
                var id = await _mongoRepository.UploadFileAsync(stream, file.FileName, options);

                ApiDataHelper.GetHtmlId(id.ToString());
                return(Json(new Response <object> {
                    Status = 1, Msg = "", Data = new { id, Name = file.FileName }
                }));
            }
        }
예제 #8
0
        public async override Task <ApiData> GetMinerStatsDataAsync()
        {
            var api = new ApiData();

            try
            {
                var summaryApiResult = await apiReader.GetApiDataAsync(_apiPort, ApiDataHelper.GetHttpRequestNhmAgentStrin("summary"));

                double totalSpeed = 0;
                int    totalPower = 0;
                if (!string.IsNullOrEmpty(summaryApiResult))
                {
                    var summaryOptvals = summaryApiResult.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
                    foreach (var optvalPairs in summaryOptvals)
                    {
                        var pair = optvalPairs.Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
                        if (pair.Length != 2)
                        {
                            continue;
                        }
                        if (pair[0] == "KHS")
                        {
                            totalSpeed = double.Parse(pair[1], CultureInfo.InvariantCulture) * 1000; // HPS
                        }
                    }
                }

                var threadsApiResult = await apiReader.GetApiDataAsync(_apiPort, ApiDataHelper.GetHttpRequestNhmAgentStrin("threads"));

                var perDeviceSpeedInfo = new List <(string uuid, IReadOnlyList <(AlgorithmType, double)>)>();
                var perDevicePowerInfo = new List <(string, int)>();
                if (!string.IsNullOrEmpty(threadsApiResult))
                {
                    var gpus = threadsApiResult.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
                    foreach (var gpu in gpus)
                    {
                        var gpuOptvalPairs = gpu.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
                        var gpuData        = (id : -1, power : -1, speed : -1d);
                        foreach (var optvalPairs in gpuOptvalPairs)
                        {
                            var optval = optvalPairs.Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
                            if (optval.Length != 2)
                            {
                                continue;
                            }
                            if (optval[0] == "GPU")
                            {
                                gpuData.id = int.Parse(optval[1], CultureInfo.InvariantCulture);
                            }
                            if (optval[0] == "POWER")
                            {
                                gpuData.power = int.Parse(optval[1], CultureInfo.InvariantCulture);
                            }
                            if (optval[0] == "KHS")
                            {
                                gpuData.speed = double.Parse(optval[1], CultureInfo.InvariantCulture) * 1000; // HPS
                            }
                        }

                        var device = _miningPairs.Where(kvp => kvp.device.ID == gpuData.id).Select(kvp => kvp.device).FirstOrDefault();
                        if (device != null)
                        {
                            perDeviceSpeedInfo.Add((device.UUID, new List <(AlgorithmType, double)>()
                            {
                                (_algorithmType, gpuData.speed)
                            }));
                            perDevicePowerInfo.Add((device.UUID, gpuData.power));
                            totalPower += gpuData.power;
                        }
                    }
                }
                var total = new List <(AlgorithmType, double)>();
                total.Add((_algorithmType, totalSpeed));
                api.AlgorithmSpeedsTotal     = total;
                api.PowerUsageTotal          = totalPower;
                api.AlgorithmSpeedsPerDevice = perDeviceSpeedInfo;
                api.PowerUsagePerDevice      = perDevicePowerInfo;
            }
            catch (Exception e)
            {
                Console.WriteLine($"exception: {e}");
            }
            return(api);
        }
예제 #9
0
 /// <summary>
 /// 上传数据
 /// </summary>
 /// <param name="knl"></param>
 /// <param name="url"></param>
 /// <param name="data"></param>
 /// <returns></returns>
 public static string PostData(this IKernel knl, string url, string data)
 {
     return(ApiDataHelper.PostData(url, data));
 }
        public async override Task <ApiData> GetMinerStatsDataAsync()
        {
            var summaryApiResult = await apiReader.GetApiDataAsync(_apiPort, ApiDataHelper.GetHttpRequestNhmAgentStrin("summary"));

            double totalSpeed = 0;
            int    totalPower = 0;

            if (!string.IsNullOrEmpty(summaryApiResult))
            {
                // TODO return empty
                try
                {
                    var summaryOptvals = summaryApiResult.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
                    foreach (var optvalPairs in summaryOptvals)
                    {
                        var pair = optvalPairs.Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
                        if (pair.Length != 2)
                        {
                            continue;
                        }
                        if (pair[0] == "KHS")
                        {
                            totalSpeed = double.Parse(pair[1], CultureInfo.InvariantCulture) * 1000; // HPS
                        }
                    }
                }
                catch
                { }
            }
            // TODO if have multiple GPUs call the threads as well, but maybe not as often since it might crash the miner
            //var threadsApiResult = await _httpClient.GetStringAsync($"{localhost}/threads");
            var threadsApiResult = await apiReader.GetApiDataAsync(_apiPort, ApiDataHelper.GetHttpRequestNhmAgentStrin("threads"));

            var perDeviceSpeedInfo = new List <(string uuid, IReadOnlyList <(AlgorithmType, double)>)>();
            var perDevicePowerInfo = new List <(string, int)>();

            if (!string.IsNullOrEmpty(threadsApiResult))
            {
                // TODO return empty
                try
                {
                    var gpus = threadsApiResult.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
                    foreach (var gpu in gpus)
                    {
                        var gpuOptvalPairs = gpu.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
                        var gpuData        = (id : -1, power : -1, speed : -1d);
                        foreach (var optvalPairs in gpuOptvalPairs)
                        {
                            var optval = optvalPairs.Split(new char[] { '=' }, StringSplitOptions.RemoveEmptyEntries);
                            if (optval.Length != 2)
                            {
                                continue;
                            }
                            if (optval[0] == "GPU")
                            {
                                gpuData.id = int.Parse(optval[1], CultureInfo.InvariantCulture);
                            }
                            if (optval[0] == "POWER")
                            {
                                gpuData.power = int.Parse(optval[1], CultureInfo.InvariantCulture);
                            }
                            if (optval[0] == "KHS")
                            {
                                gpuData.speed = double.Parse(optval[1], CultureInfo.InvariantCulture) * 1000; // HPS
                            }
                        }
                        // TODO do stuff with it gpuData
                        var device = _miningPairs.Where(kvp => kvp.device.ID == gpuData.id).Select(kvp => kvp.device).FirstOrDefault();
                        if (device != null)
                        {
                            perDeviceSpeedInfo.Add((device.UUID, new List <(AlgorithmType, double)>()
                            {
                                (_algorithmType, gpuData.speed)
                            }));
                            perDevicePowerInfo.Add((device.UUID, gpuData.power));
                            totalPower += gpuData.power;
                        }
                    }
                }
                catch
                { }
            }
            var ad    = new ApiData();
            var total = new List <(AlgorithmType, double)>();

            total.Add((_algorithmType, totalSpeed));
            ad.AlgorithmSpeedsTotal     = total;
            ad.PowerUsageTotal          = totalPower;
            ad.AlgorithmSpeedsPerDevice = perDeviceSpeedInfo;
            ad.PowerUsagePerDevice      = perDevicePowerInfo;

            return(ad);
        }
        public void Return_CorrectValue_WhenPassedFalseAsString(string stringText)
        {
            var result = ApiDataHelper.GetLastValue(stringText);

            Assert.AreEqual(0, result);
        }
 public void ThrowsInvalidOperationException_WhenPassedInvalidString(string stringText)
 {
     Assert.ThrowsException <InvalidOperationException>(() => ApiDataHelper.GetLastValue(stringText), "Invalid last value response");
 }
        public void Return_CorrectFloatValue(string stringText)
        {
            var result = ApiDataHelper.GetLastValue(stringText);

            Assert.AreEqual(16.5, result);
        }
예제 #14
0
 /// <summary>
 /// 获取string 数据
 /// </summary>
 /// <param name="url"></param>
 /// <returns></returns>
 public static string GetData(this IKernel knl, string url)
 {
     return(ApiDataHelper.GetData(url));
 }
예제 #15
0
        public async Task UpdateSensorsData()
        {
            using (var scope = this.serviceProvider.CreateScope())
            {
                var icbApi              = scope.ServiceProvider.GetService <IIcbApiService>();
                var sensorsService      = scope.ServiceProvider.GetService <ISensorsService>();
                var notificationService = scope.ServiceProvider.GetService <INotificationService>();
                var dbContext           = scope.ServiceProvider.GetService <SmartDormitoryContext>();

                var liveDataCache          = new Dictionary <string, ApiSensorValueDTO>();
                var sensorsToUpdate        = new List <Sensor>();
                var alarmsActivatedSensors = new List <Sensor>();

                var userSensorsForUpdate = await sensorsService.GetAllForUpdate();

                foreach (var userSensor in userSensorsForUpdate)
                {
                    try
                    {
                        // caching all 13 api sensors data for current BackgroundJob iteration
                        if (!liveDataCache.ContainsKey(userSensor.IcbSensorId))
                        {
                            var newApiData = await icbApi.GetIcbSensorDataById(userSensor.IcbSensorId);

                            liveDataCache[userSensor.IcbSensorId] = newApiData;
                        }

                        var   liveSensorData = liveDataCache[userSensor.IcbSensorId];
                        float newValue       = ApiDataHelper.GetLastValue(liveSensorData.LastValue);

                        //if live data value is same like last time, skip
                        if (newValue != userSensor.CurrentValue)
                        {
                            userSensor.CurrentValue = newValue;
                        }
                        userSensor.LastUpdateOn = liveSensorData.TimeStamp;

                        // populate list of sensors which data should be updated
                        sensorsToUpdate.Add(userSensor);

                        if (userSensor.AlarmOn &&
                            (newValue <= userSensor.MinRangeValue || newValue >= userSensor.MaxRangeValue))
                        {
                            // populate list of sensors with activated alarms
                            alarmsActivatedSensors.Add(userSensor);
                        }
                    }
                    catch (HttpRequestException e)
                    {
                        await this.notificationManager.SendUIErrorAlerts(e.Message);
                    }
                }

                //stage notifications
                var notifications = await notificationService.CreateAlarmNotifications(alarmsActivatedSensors);

                foreach (var notify in notifications)
                {
                    await this.notificationManager.SendNotification(notify.ReceiverId, notify.Title);
                }

                //--- Save everything(sensors + notifies) with one transaction
                dbContext.UpdateRange(sensorsToUpdate);
                await dbContext.SaveChangesAsync();
            }
        }
예제 #16
0
 /// <summary>
 /// 上传文件
 /// </summary>
 /// <param name="url"></param>
 /// <param name="filePath"></param>
 public static void UpLoadFile(this IKernel knl, string url, string filePath)
 {
     ApiDataHelper.UpLoadFile(url, filePath);
 }
예제 #17
0
 /// <summary>
 /// 下载文件
 /// </summary>
 /// <param name="url"></param>
 /// <param name="savePath"></param>
 public static void DownLoadFile(this IKernel knl, string url, string savePath)
 {
     ApiDataHelper.DownLoadFile(url, savePath);
 }