public ReportResponse ReportSpeed([FromBody] SpeedData speedData) { try { if (speedData == null) { return(ResponseBase.InvalidInput <ReportResponse>()); } ClientData clientData = HostRoot.Instance.ClientSet.GetByClientId(speedData.ClientId); if (clientData == null) { clientData = ClientData.Create(speedData, ClientIp); HostRoot.Instance.ClientSet.Add(clientData); } else { clientData.Update(speedData, ClientIp); } if (Version.TryParse(speedData.Version, out Version version)) { string jsonVersionKey = EntryAssemblyInfo.GetServerJsonVersion(version); var response = ReportResponse.Ok(HostRoot.GetServerState(jsonVersionKey)); if (speedData.LocalServerMessageTimestamp.AddSeconds(1) < HostRoot.Instance.ServerMessageTimestamp) { var list = HostRoot.Instance.ServerMessageSet.GetServerMessages(speedData.LocalServerMessageTimestamp); if (list.Count < 10) { response.NewServerMessages.AddRange(list); } } return(response); } } catch (Exception e) { Logger.ErrorDebugLine(e); } return(ResponseBase.InvalidInput <ReportResponse>()); }
public ReportResponse ReportSpeed([FromBody] SpeedData speedData) { ReportResponse response; try { if (speedData == null) { response = ResponseBase.InvalidInput <ReportResponse>(); response.ServerState = ServerState.Empty; return(response); } ClientData clientData = HostRoot.Instance.ClientSet.GetByClientId(speedData.ClientId); if (clientData == null) { clientData = ClientData.Create(speedData, ClientIp); HostRoot.Instance.ClientSet.Add(clientData); } else { clientData.Update(speedData, ClientIp); } if (Version.TryParse(speedData.Version, out Version version)) { string jsonVersionKey = MainAssemblyInfo.GetServerJsonVersion(version); response = ResponseBase.Ok <ReportResponse>(); response.ServerState = HostRoot.GetServerState(jsonVersionKey); return(response); } } catch (Exception e) { Logger.ErrorDebugLine(e); } response = ResponseBase.InvalidInput <ReportResponse>(); response.ServerState = ServerState.Empty; return(response); }
public string GetJsonFileVersion(AppSettingRequest request) { ServerState serverState = HostRoot.GetServerState(request.Key); return($"{serverState.JsonFileVersion}|{serverState.MinerClientVersion}|{serverState.Time.ToString()}|{serverState.MessageTimestamp.ToString()}|{serverState.OutputKeywordTimestamp.ToString()}"); }
/// <summary> /// /// </summary> private void Snapshot(DateTime now) { InitOnece(); try { int onlineCount = 0; int miningCount = 0; Dictionary <string, CoinSnapshotData> dicByCoinCode = new Dictionary <string, CoinSnapshotData>(); foreach (var clientData in _root.ClientSet.AsEnumerable()) { if (HostRoot.Instance.HostConfig.IsPull) { if (clientData.ModifiedOn.AddSeconds(15) < now) { continue; } } else { if (clientData.ModifiedOn.AddSeconds(130) < now) { continue; } } onlineCount++; if (string.IsNullOrEmpty(clientData.MainCoinCode)) { continue; } if (!dicByCoinCode.TryGetValue(clientData.MainCoinCode, out CoinSnapshotData mainCoinSnapshotData)) { mainCoinSnapshotData = new CoinSnapshotData() { Timestamp = now, CoinCode = clientData.MainCoinCode }; dicByCoinCode.Add(clientData.MainCoinCode, mainCoinSnapshotData); } if (clientData.IsMining) { miningCount++; mainCoinSnapshotData.MainCoinMiningCount += 1; mainCoinSnapshotData.Speed += clientData.MainCoinSpeed; mainCoinSnapshotData.ShareDelta += clientData.GetMainCoinShareDelta(HostRoot.Instance.HostConfig.IsPull); mainCoinSnapshotData.RejectShareDelta += clientData.GetMainCoinRejectShareDelta(HostRoot.Instance.HostConfig.IsPull); } mainCoinSnapshotData.MainCoinOnlineCount += 1; if (!string.IsNullOrEmpty(clientData.DualCoinCode) && clientData.IsDualCoinEnabled) { if (!dicByCoinCode.TryGetValue(clientData.DualCoinCode, out CoinSnapshotData dualCoinSnapshotData)) { dualCoinSnapshotData = new CoinSnapshotData() { Timestamp = now, CoinCode = clientData.DualCoinCode }; dicByCoinCode.Add(clientData.DualCoinCode, dualCoinSnapshotData); } if (clientData.IsMining) { dualCoinSnapshotData.DualCoinMiningCount += 1; dualCoinSnapshotData.Speed += clientData.DualCoinSpeed; dualCoinSnapshotData.ShareDelta += clientData.GetDualCoinShareDelta(HostRoot.Instance.HostConfig.IsPull); dualCoinSnapshotData.RejectShareDelta += clientData.GetDualCoinRejectShareDelta(HostRoot.Instance.HostConfig.IsPull); } dualCoinSnapshotData.DualCoinOnlineCount += 1; } } HostRoot.ClientCount.Update(onlineCount, miningCount); if (dicByCoinCode.Count > 0) { _dataList.AddRange(dicByCoinCode.Values); using (LiteDatabase db = HostRoot.CreateReportDb()) { var col = db.GetCollection <CoinSnapshotData>(); col.Insert(dicByCoinCode.Values); } Write.DevDebug("拍摄快照" + dicByCoinCode.Count + "张,快照时间戳:" + now.ToString("yyyy-MM-dd HH:mm:ss fff")); } } catch (Exception e) { Logger.ErrorDebugLine(e); } }
public void CloseServices() { HostRoot.Exit(); }