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); }
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)); }
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(); } }
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 } })); } }
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); }
/// <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); }
/// <summary> /// 获取string 数据 /// </summary> /// <param name="url"></param> /// <returns></returns> public static string GetData(this IKernel knl, string url) { return(ApiDataHelper.GetData(url)); }
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(); } }
/// <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); }
/// <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); }