ClientData.cs 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776
  1. using LiteDB;
  2. using Newtonsoft.Json;
  3. using NTMiner.Gpus;
  4. using NTMiner.Report;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Reflection;
  9. namespace NTMiner.Core.MinerServer {
  10. public class ClientData : SpeedDto, IClientData {
  11. private static readonly Dictionary<string, PropertyInfo> _reflectionUpdateProperties = new Dictionary<string, PropertyInfo>();
  12. public static bool TryGetReflectionUpdateProperty(string propertyName, out PropertyInfo propertyInfo) {
  13. return _reflectionUpdateProperties.TryGetValue(propertyName, out propertyInfo);
  14. }
  15. static ClientData() {
  16. Type type = typeof(ClientData);
  17. // 这算是一个安全措施,因为propertyName是来自客户端传入的,所以需要白名单。
  18. HashSet<string> propertyNames = new HashSet<string> {
  19. nameof(WorkerName),
  20. nameof(GroupId),
  21. nameof(WorkId),
  22. nameof(WindowsLoginName),
  23. nameof(WindowsPassword)
  24. };
  25. foreach (var propertyName in propertyNames) {
  26. _reflectionUpdateProperties.Add(propertyName, type.GetProperty(propertyName));
  27. }
  28. }
  29. public ClientData() : base() {
  30. }
  31. public static ClientData Create(IMinerData data) {
  32. return new ClientData() {
  33. #region
  34. Id = data.Id,
  35. CpuId = data.CpuId,
  36. ClientId = data.ClientId,
  37. MACAddress = data.MACAddress,
  38. LocalIp = data.LocalIp,
  39. MinerIp = data.MinerIp,
  40. MinerName = data.MinerName,
  41. WorkerName = data.WorkerName,
  42. CreatedOn = data.CreatedOn,
  43. GroupId = data.GroupId,
  44. WorkId = data.WorkId,
  45. WindowsLoginName = data.WindowsLoginName,
  46. WindowsPassword = data.WindowsPassword,
  47. AESPassword = data.AESPassword,
  48. AESPasswordOn = data.AESPasswordOn,
  49. LoginName = data.LoginName,
  50. IsOuterUserEnabled = data.IsOuterUserEnabled,
  51. OuterUserId = data.OuterUserId,
  52. ReportOuterUserId = data.OuterUserId,
  53. MineContextId = Guid.Empty,
  54. DiskSpaceMb = 0,
  55. MineWorkId = Guid.Empty,
  56. MineWorkName = string.Empty,
  57. IsAutoBoot = false,
  58. IsAutoStart = false,
  59. AutoStartDelaySeconds = 15,
  60. IsAutoRestartKernel = false,
  61. AutoRestartKernelTimes = 10,
  62. IsNoShareRestartKernel = false,
  63. NoShareRestartKernelMinutes = 0,
  64. IsNoShareRestartComputer = false,
  65. NoShareRestartComputerMinutes = 0,
  66. IsPeriodicRestartKernel = false,
  67. PeriodicRestartKernelHours = 0,
  68. IsPeriodicRestartComputer = false,
  69. PeriodicRestartComputerHours = 0,
  70. PeriodicRestartKernelMinutes = 10,
  71. PeriodicRestartComputerMinutes = 10,
  72. IsAutoStartByCpu = false,
  73. IsAutoStopByCpu = false,
  74. CpuGETemperatureSeconds = 60,
  75. CpuLETemperatureSeconds = 60,
  76. CpuStartTemperature = 40,
  77. CpuStopTemperature = 65,
  78. CpuPerformance = 0,
  79. CpuTemperature = 0,
  80. IsRaiseHighCpuEvent = false,
  81. HighCpuPercent = 80,
  82. HighCpuSeconds = 10,
  83. GpuDriver = string.Empty,
  84. GpuType = GpuType.Empty,
  85. OSName = string.Empty,
  86. OSVirtualMemoryMb = 0,
  87. GpuInfo = string.Empty,
  88. Version = string.Empty,
  89. IsMining = false,
  90. BootOn = DateTime.MinValue,
  91. MineStartedOn = DateTime.MinValue,
  92. MinerActiveOn = DateTime.Now,
  93. MainCoinCode = string.Empty,
  94. MainCoinTotalShare = 0,
  95. MainCoinRejectShare = 0,
  96. MainCoinSpeed = 0,
  97. MainCoinPool = string.Empty,
  98. MainCoinWallet = string.Empty,
  99. Kernel = string.Empty,
  100. IsDualCoinEnabled = false,
  101. DualCoinPool = string.Empty,
  102. DualCoinWallet = string.Empty,
  103. DualCoinCode = string.Empty,
  104. DualCoinTotalShare = 0,
  105. DualCoinRejectShare = 0,
  106. DualCoinSpeed = 0,
  107. KernelCommandLine = string.Empty,
  108. MainCoinPoolDelay = string.Empty,
  109. DualCoinPoolDelay = string.Empty,
  110. DiskSpace = string.Empty,
  111. IsFoundOneGpuShare = false,
  112. IsRejectOneGpuShare = false,
  113. IsGotOneIncorrectGpuShare = false,
  114. KernelSelfRestartCount = 0,
  115. TotalPhysicalMemoryMb = 0,
  116. LocalServerMessageTimestamp = Timestamp.UnixBaseTime,
  117. NetActiveOn = DateTime.MinValue,
  118. IsOnline = false,
  119. IsAutoDisableWindowsFirewall = true,
  120. IsDisableAntiSpyware = true,
  121. IsDisableUAC = true,
  122. IsDisableWAU = true,
  123. MainCoinSpeedOn = DateTime.MinValue,
  124. DualCoinSpeedOn = DateTime.MinValue,
  125. GpuTable = new GpuSpeedData[0],
  126. DualCoinPoolDelayNumber = 0,
  127. MainCoinPoolDelayNumber = 0,
  128. MainCoinRejectPercent = 0,
  129. DualCoinRejectPercent = 0
  130. #endregion
  131. };
  132. }
  133. public static ClientData Clone(ClientData data) {
  134. return new ClientData() {
  135. #region
  136. Id = data.Id,
  137. CpuId = data.CpuId,
  138. DiskSpaceMb = data.DiskSpaceMb,
  139. MineContextId = data.MineContextId,
  140. MinerName = data.MinerName,
  141. MinerIp = data.MinerIp,
  142. CreatedOn = data.CreatedOn,
  143. MinerActiveOn = data.MinerActiveOn,
  144. GroupId = data.GroupId,
  145. WorkId = data.WorkId,
  146. WindowsLoginName = data.WindowsLoginName,
  147. WindowsPassword = data.WindowsPassword,
  148. MACAddress = data.MACAddress,
  149. LocalIp = data.LocalIp,
  150. ClientId = data.ClientId,
  151. IsAutoBoot = data.IsAutoBoot,
  152. IsAutoStart = data.IsAutoStart,
  153. AutoStartDelaySeconds = data.AutoStartDelaySeconds,
  154. IsAutoRestartKernel = data.IsAutoRestartKernel,
  155. AutoRestartKernelTimes = data.AutoRestartKernelTimes,
  156. IsNoShareRestartKernel = data.IsNoShareRestartKernel,
  157. NoShareRestartKernelMinutes = data.NoShareRestartKernelMinutes,
  158. IsNoShareRestartComputer = data.IsNoShareRestartComputer,
  159. NoShareRestartComputerMinutes = data.NoShareRestartComputerMinutes,
  160. IsPeriodicRestartKernel = data.IsPeriodicRestartKernel,
  161. PeriodicRestartKernelHours = data.PeriodicRestartKernelHours,
  162. IsPeriodicRestartComputer = data.IsPeriodicRestartComputer,
  163. PeriodicRestartComputerHours = data.PeriodicRestartComputerHours,
  164. PeriodicRestartComputerMinutes = data.PeriodicRestartComputerMinutes,
  165. PeriodicRestartKernelMinutes = data.PeriodicRestartKernelMinutes,
  166. IsAutoStopByCpu = data.IsAutoStopByCpu,
  167. IsAutoStartByCpu = data.IsAutoStartByCpu,
  168. CpuStopTemperature = data.CpuStopTemperature,
  169. CpuStartTemperature = data.CpuStartTemperature,
  170. CpuLETemperatureSeconds = data.CpuLETemperatureSeconds,
  171. CpuGETemperatureSeconds = data.CpuGETemperatureSeconds,
  172. CpuTemperature = data.CpuTemperature,
  173. CpuPerformance = data.CpuPerformance,
  174. IsRaiseHighCpuEvent = data.IsRaiseHighCpuEvent,
  175. HighCpuPercent = data.HighCpuPercent,
  176. HighCpuSeconds = data.HighCpuSeconds,
  177. GpuDriver = data.GpuDriver,
  178. GpuType = data.GpuType,
  179. OSName = data.OSName,
  180. OSVirtualMemoryMb = data.OSVirtualMemoryMb,
  181. TotalPhysicalMemoryMb = data.TotalPhysicalMemoryMb,
  182. GpuInfo = data.GpuInfo,
  183. Version = data.Version,
  184. IsMining = data.IsMining,
  185. BootOn = data.BootOn,
  186. MineStartedOn = data.MineStartedOn,
  187. MainCoinCode = data.MainCoinCode,
  188. MainCoinTotalShare = data.MainCoinTotalShare,
  189. MainCoinRejectShare = data.MainCoinRejectShare,
  190. MainCoinSpeed = data.MainCoinSpeed,
  191. MainCoinPool = data.MainCoinPool,
  192. MainCoinWallet = data.MainCoinWallet,
  193. Kernel = data.Kernel,
  194. IsDualCoinEnabled = data.IsDualCoinEnabled,
  195. DualCoinPool = data.DualCoinPool,
  196. DualCoinWallet = data.DualCoinWallet,
  197. DualCoinCode = data.DualCoinCode,
  198. DualCoinTotalShare = data.DualCoinTotalShare,
  199. DualCoinRejectShare = data.DualCoinRejectShare,
  200. DualCoinSpeed = data.DualCoinSpeed,
  201. KernelCommandLine = data.KernelCommandLine,
  202. GpuTable = data.GpuTable,
  203. MineWorkId = data.MineWorkId,
  204. MineWorkName = data.MineWorkName,
  205. WorkerName = data.WorkerName,
  206. DiskSpace = data.DiskSpace,
  207. MainCoinPoolDelay = data.MainCoinPoolDelay,
  208. DualCoinPoolDelay = data.DualCoinPoolDelay,
  209. IsFoundOneGpuShare = data.IsFoundOneGpuShare,
  210. IsRejectOneGpuShare = data.IsRejectOneGpuShare,
  211. IsGotOneIncorrectGpuShare = data.IsGotOneIncorrectGpuShare,
  212. KernelSelfRestartCount = data.KernelSelfRestartCount,
  213. LocalServerMessageTimestamp = data.LocalServerMessageTimestamp,
  214. LoginName = data.LoginName,
  215. IsOuterUserEnabled = data.IsOuterUserEnabled,
  216. OuterUserId = data.OuterUserId,
  217. ReportOuterUserId = data.ReportOuterUserId,
  218. NetActiveOn = data.NetActiveOn,
  219. IsOnline = data.IsOnline,
  220. IsDisableWAU = data.IsDisableWAU,
  221. IsDisableUAC = data.IsDisableUAC,
  222. AESPassword = data.AESPassword,
  223. AESPasswordOn = data.AESPasswordOn,
  224. IsDisableAntiSpyware = data.IsDisableAntiSpyware,
  225. IsAutoDisableWindowsFirewall = data.IsAutoDisableWindowsFirewall,
  226. MainCoinSpeedOn = data.MainCoinSpeedOn,
  227. DualCoinSpeedOn = data.DualCoinSpeedOn,
  228. DualCoinRejectPercent = data.DualCoinRejectPercent,
  229. MainCoinRejectPercent = data.MainCoinRejectPercent,
  230. MainCoinPoolDelayNumber = data.MainCoinPoolDelayNumber,
  231. DualCoinPoolDelayNumber = data.DualCoinPoolDelayNumber
  232. #endregion
  233. };
  234. }
  235. public static ClientData Create(ReportState state, string minerIp) {
  236. return new ClientData {
  237. Id = ObjectId.NewObjectId().ToString(),
  238. ClientId = state.ClientId,
  239. IsMining = state.IsMining,
  240. CreatedOn = DateTime.Now,
  241. MinerActiveOn = DateTime.Now,
  242. MinerIp = minerIp
  243. };
  244. }
  245. /// <summary>
  246. /// 从给定的speedData中提取出主币矿池延时,辅币矿池延时,主币拒绝率,辅币拒绝率。
  247. /// </summary>
  248. private static void Extract(
  249. ISpeedDto speedDto,
  250. out int mainCoinPoolDelayNumber,
  251. out int dualCoinPoolDelayNumber,
  252. out double mainCoinRejectPercent,
  253. out double dualCoinRejectPercent,
  254. out int diskSpaceMb) {
  255. #region
  256. mainCoinPoolDelayNumber = 0;
  257. dualCoinPoolDelayNumber = 0;
  258. mainCoinRejectPercent = 0.0;
  259. dualCoinRejectPercent = 0.0;
  260. if (!string.IsNullOrEmpty(speedDto.MainCoinPoolDelay)) {
  261. string text = speedDto.MainCoinPoolDelay.Trim();
  262. int count = 0;
  263. for (int i = 0; i < text.Length; i++) {
  264. if (!char.IsNumber(text[i])) {
  265. count = i;
  266. break;
  267. }
  268. }
  269. if (count != 0) {
  270. mainCoinPoolDelayNumber = int.Parse(text.Substring(0, count));
  271. }
  272. }
  273. if (!string.IsNullOrEmpty(speedDto.DualCoinPoolDelay)) {
  274. string text = speedDto.DualCoinPoolDelay.Trim();
  275. int count = 0;
  276. for (int i = 0; i < text.Length; i++) {
  277. if (!char.IsNumber(text[i])) {
  278. count = i;
  279. break;
  280. }
  281. }
  282. if (count != 0) {
  283. dualCoinPoolDelayNumber = int.Parse(text.Substring(0, count));
  284. }
  285. }
  286. if (speedDto.MainCoinTotalShare != 0) {
  287. mainCoinRejectPercent = (speedDto.MainCoinRejectShare * 100.0) / speedDto.MainCoinTotalShare;
  288. }
  289. if (speedDto.DualCoinTotalShare != 0) {
  290. dualCoinRejectPercent = (speedDto.DualCoinRejectShare * 100.0) / speedDto.DualCoinTotalShare;
  291. }
  292. diskSpaceMb = GetMinDiskSpaceMb(speedDto.DiskSpace);
  293. #endregion
  294. }
  295. private static int GetMinDiskSpaceMb(string diskSpace) {
  296. // C:\21.4 Gb;D:\9.2 Gb;E:\27.1 Gb
  297. if (string.IsNullOrEmpty(diskSpace)) {
  298. return 0;
  299. }
  300. string[] parts = diskSpace.Split(new char[] { '\\' }, StringSplitOptions.RemoveEmptyEntries);
  301. List<int> list = new List<int>();
  302. foreach (string part in parts) {
  303. if (char.IsDigit(part[0])) {
  304. if (double.TryParse(part.Substring(0, part.IndexOf(' ')), out double value)) {
  305. list.Add((int)(value * NTKeyword.IntK));
  306. }
  307. }
  308. }
  309. if (list.Count == 0) {
  310. return 0;
  311. }
  312. return list.Min();
  313. }
  314. public static ClientData Create(ISpeedDto speedDto, string minerIp) {
  315. Extract(
  316. speedDto,
  317. out int mainCoinPoolDelayNumber,
  318. out int dualCoinPoolDelayNumber,
  319. out double mainCoinRejectPercent,
  320. out double dualCoinRejectPercent,
  321. out int diskSpaceMb);
  322. return new ClientData() {
  323. #region
  324. Id = ObjectId.NewObjectId().ToString(),
  325. MineContextId = speedDto.MineContextId,
  326. MinerName = speedDto.MinerName,
  327. CpuId = speedDto.CpuId,
  328. MinerIp = minerIp,
  329. CreatedOn = DateTime.Now,
  330. MinerActiveOn = DateTime.Now,
  331. GroupId = Guid.Empty,
  332. WorkId = Guid.Empty,// 这是服务端指定的作业,不受客户端的影响
  333. WindowsLoginName = string.Empty,
  334. WindowsPassword = string.Empty,
  335. MACAddress = speedDto.MACAddress,
  336. LocalIp = speedDto.LocalIp,
  337. ClientId = speedDto.ClientId,
  338. IsAutoBoot = speedDto.IsAutoBoot,
  339. IsAutoStart = speedDto.IsAutoStart,
  340. AutoStartDelaySeconds = speedDto.AutoStartDelaySeconds,
  341. IsAutoRestartKernel = speedDto.IsAutoRestartKernel,
  342. AutoRestartKernelTimes = speedDto.AutoRestartKernelTimes,
  343. IsNoShareRestartKernel = speedDto.IsNoShareRestartKernel,
  344. NoShareRestartKernelMinutes = speedDto.NoShareRestartKernelMinutes,
  345. IsNoShareRestartComputer = speedDto.IsNoShareRestartComputer,
  346. NoShareRestartComputerMinutes = speedDto.NoShareRestartComputerMinutes,
  347. IsPeriodicRestartKernel = speedDto.IsPeriodicRestartKernel,
  348. PeriodicRestartKernelHours = speedDto.PeriodicRestartKernelHours,
  349. IsPeriodicRestartComputer = speedDto.IsPeriodicRestartComputer,
  350. PeriodicRestartComputerHours = speedDto.PeriodicRestartComputerHours,
  351. PeriodicRestartComputerMinutes = speedDto.PeriodicRestartComputerMinutes,
  352. PeriodicRestartKernelMinutes = speedDto.PeriodicRestartKernelMinutes,
  353. IsAutoStopByCpu = speedDto.IsAutoStopByCpu,
  354. IsAutoStartByCpu = speedDto.IsAutoStartByCpu,
  355. CpuStopTemperature = speedDto.CpuStopTemperature,
  356. CpuStartTemperature = speedDto.CpuStartTemperature,
  357. CpuLETemperatureSeconds = speedDto.CpuLETemperatureSeconds,
  358. CpuGETemperatureSeconds = speedDto.CpuGETemperatureSeconds,
  359. CpuTemperature = speedDto.CpuTemperature,
  360. CpuPerformance = speedDto.CpuPerformance,
  361. IsRaiseHighCpuEvent = speedDto.IsRaiseHighCpuEvent,
  362. HighCpuPercent = speedDto.HighCpuPercent,
  363. HighCpuSeconds = speedDto.HighCpuSeconds,
  364. GpuDriver = speedDto.GpuDriver,
  365. GpuType = speedDto.GpuType,
  366. OSName = speedDto.OSName,
  367. OSVirtualMemoryMb = speedDto.OSVirtualMemoryMb,
  368. TotalPhysicalMemoryMb = speedDto.TotalPhysicalMemoryMb,
  369. GpuInfo = speedDto.GpuInfo,
  370. Version = speedDto.Version,
  371. IsMining = speedDto.IsMining,
  372. BootOn = speedDto.BootOn,
  373. MineStartedOn = speedDto.MineStartedOn,
  374. MainCoinCode = speedDto.MainCoinCode,
  375. MainCoinTotalShare = speedDto.MainCoinTotalShare,
  376. MainCoinRejectShare = speedDto.MainCoinRejectShare,
  377. MainCoinSpeed = speedDto.MainCoinSpeed,
  378. MainCoinPool = speedDto.MainCoinPool,
  379. MainCoinWallet = speedDto.MainCoinWallet,
  380. Kernel = speedDto.Kernel,
  381. IsDualCoinEnabled = speedDto.IsDualCoinEnabled,
  382. DualCoinPool = speedDto.DualCoinPool,
  383. DualCoinWallet = speedDto.DualCoinWallet,
  384. DualCoinCode = speedDto.DualCoinCode,
  385. DualCoinTotalShare = speedDto.DualCoinTotalShare,
  386. DualCoinRejectShare = speedDto.DualCoinRejectShare,
  387. DualCoinSpeed = speedDto.DualCoinSpeed,
  388. KernelCommandLine = speedDto.KernelCommandLine,
  389. MainCoinSpeedOn = speedDto.MainCoinSpeedOn,
  390. DualCoinSpeedOn = speedDto.DualCoinSpeedOn,
  391. GpuTable = speedDto.GpuTable,
  392. MineWorkId = speedDto.MineWorkId,
  393. MineWorkName = speedDto.MineWorkName,
  394. DiskSpace = speedDto.DiskSpace,
  395. MainCoinPoolDelay = speedDto.MainCoinPoolDelay,
  396. DualCoinPoolDelay = speedDto.DualCoinPoolDelay,
  397. IsFoundOneGpuShare = speedDto.IsFoundOneGpuShare,
  398. IsRejectOneGpuShare = speedDto.IsRejectOneGpuShare,
  399. IsGotOneIncorrectGpuShare = speedDto.IsGotOneIncorrectGpuShare,
  400. KernelSelfRestartCount = speedDto.KernelSelfRestartCount - 1,// 需要减1
  401. LocalServerMessageTimestamp = speedDto.LocalServerMessageTimestamp,
  402. AESPassword = string.Empty,
  403. AESPasswordOn = DateTime.MinValue,
  404. IsAutoDisableWindowsFirewall = speedDto.IsAutoDisableWindowsFirewall,
  405. IsDisableAntiSpyware = speedDto.IsDisableAntiSpyware,
  406. IsDisableUAC = speedDto.IsDisableUAC,
  407. IsDisableWAU = speedDto.IsDisableWAU,
  408. IsOnline = false,
  409. NetActiveOn = DateTime.MinValue,
  410. LoginName = string.Empty,
  411. IsOuterUserEnabled = speedDto.IsOuterUserEnabled,
  412. OuterUserId = string.Empty,
  413. ReportOuterUserId = speedDto.ReportOuterUserId,
  414. WorkerName = string.Empty,
  415. DualCoinPoolDelayNumber = dualCoinPoolDelayNumber,
  416. MainCoinPoolDelayNumber = mainCoinPoolDelayNumber,
  417. MainCoinRejectPercent = mainCoinRejectPercent,
  418. DualCoinRejectPercent = dualCoinRejectPercent,
  419. DiskSpaceMb = diskSpaceMb
  420. #endregion
  421. };
  422. }
  423. public void Update(MinerSign minerSign, out bool isChanged) {
  424. #region
  425. this.LoginName = minerSign.LoginName;
  426. isChanged = false;
  427. if (!isChanged) {
  428. isChanged = this.ClientId != minerSign.ClientId;
  429. }
  430. this.ClientId = minerSign.ClientId;
  431. if (!isChanged) {
  432. isChanged = this.OuterUserId != minerSign.OuterUserId;
  433. }
  434. this.OuterUserId = minerSign.OuterUserId;
  435. if (!isChanged) {
  436. isChanged = this.AESPassword != minerSign.AESPassword;
  437. }
  438. this.AESPassword = minerSign.AESPassword;
  439. if (!isChanged) {
  440. isChanged = this.AESPasswordOn != minerSign.AESPasswordOn;
  441. }
  442. this.AESPasswordOn = minerSign.AESPasswordOn;
  443. #endregion
  444. }
  445. public SpeedData ToSpeedData() {
  446. return new SpeedData {
  447. #region
  448. SpeedOn = this.MinerActiveOn,
  449. AutoRestartKernelTimes = this.AutoRestartKernelTimes,
  450. AutoStartDelaySeconds = this.AutoStartDelaySeconds,
  451. BootOn = this.BootOn,
  452. CpuId = this.CpuId,
  453. ClientId = this.ClientId,
  454. CpuGETemperatureSeconds = this.CpuGETemperatureSeconds,
  455. CpuLETemperatureSeconds = this.CpuLETemperatureSeconds,
  456. CpuPerformance = this.CpuPerformance,
  457. CpuStartTemperature = this.CpuStartTemperature,
  458. CpuStopTemperature = this.CpuStopTemperature,
  459. CpuTemperature = this.CpuTemperature,
  460. DiskSpace = this.DiskSpace,
  461. DualCoinCode = this.DualCoinCode,
  462. DualCoinPool = this.DualCoinPool,
  463. DualCoinPoolDelay = this.DualCoinPoolDelay,
  464. DualCoinRejectShare = this.DualCoinRejectShare,
  465. DualCoinSpeed = this.DualCoinSpeed,
  466. DualCoinSpeedOn = this.DualCoinSpeedOn,
  467. DualCoinTotalShare = this.DualCoinTotalShare,
  468. DualCoinWallet = this.DualCoinWallet,
  469. GpuDriver = this.GpuDriver,
  470. GpuInfo = this.GpuInfo,
  471. GpuTable = this.GpuTable,
  472. GpuType = this.GpuType,
  473. HighCpuPercent = this.HighCpuPercent,
  474. HighCpuSeconds = this.HighCpuSeconds,
  475. IsAutoBoot = this.IsAutoBoot,
  476. IsAutoDisableWindowsFirewall = this.IsAutoDisableWindowsFirewall,
  477. IsAutoRestartKernel = this.IsAutoRestartKernel,
  478. IsAutoStart = this.IsAutoStart,
  479. IsAutoStartByCpu = this.IsAutoStartByCpu,
  480. IsAutoStopByCpu = this.IsAutoStopByCpu,
  481. IsDisableAntiSpyware = this.IsDisableAntiSpyware,
  482. IsDisableUAC = this.IsDisableUAC,
  483. IsDisableWAU = this.IsDisableWAU,
  484. IsDualCoinEnabled = this.IsDualCoinEnabled,
  485. IsFoundOneGpuShare = this.IsFoundOneGpuShare,
  486. IsGotOneIncorrectGpuShare = this.IsGotOneIncorrectGpuShare,
  487. IsMining = this.IsMining,
  488. IsNoShareRestartComputer = this.IsNoShareRestartComputer,
  489. IsNoShareRestartKernel = this.IsNoShareRestartKernel,
  490. IsOuterUserEnabled = this.IsOuterUserEnabled,
  491. ReportOuterUserId = this.ReportOuterUserId,
  492. IsPeriodicRestartComputer = this.IsPeriodicRestartComputer,
  493. IsPeriodicRestartKernel = this.IsPeriodicRestartKernel,
  494. IsRaiseHighCpuEvent = this.IsRaiseHighCpuEvent,
  495. IsRejectOneGpuShare = this.IsRejectOneGpuShare,
  496. Kernel = this.Kernel,
  497. KernelCommandLine = this.KernelCommandLine,
  498. KernelSelfRestartCount = this.KernelSelfRestartCount,
  499. LocalIp = this.LocalIp,
  500. LocalServerMessageTimestamp = this.LocalServerMessageTimestamp,
  501. MACAddress = this.MACAddress,
  502. MainCoinCode = this.MainCoinCode,
  503. MainCoinPool = this.MainCoinPool,
  504. MainCoinPoolDelay = this.MainCoinPoolDelay,
  505. MainCoinRejectShare = this.MainCoinRejectShare,
  506. MainCoinSpeed = this.MainCoinSpeed,
  507. MainCoinSpeedOn = this.MainCoinSpeedOn,
  508. MainCoinTotalShare = this.MainCoinTotalShare,
  509. MainCoinWallet = this.MainCoinWallet,
  510. MineContextId = this.MineContextId,
  511. MinerIp = this.MinerIp,
  512. MinerName = this.MinerName,
  513. MineStartedOn = this.MineStartedOn,
  514. MineWorkId = this.MineWorkId,
  515. MineWorkName = this.MineWorkName,
  516. NoShareRestartComputerMinutes = this.NoShareRestartComputerMinutes,
  517. NoShareRestartKernelMinutes = this.NoShareRestartKernelMinutes,
  518. OSName = this.OSName,
  519. OSVirtualMemoryMb = this.OSVirtualMemoryMb,
  520. PeriodicRestartComputerHours = this.PeriodicRestartComputerHours,
  521. PeriodicRestartComputerMinutes = this.PeriodicRestartComputerMinutes,
  522. PeriodicRestartKernelHours = this.PeriodicRestartKernelHours,
  523. PeriodicRestartKernelMinutes = this.PeriodicRestartKernelMinutes,
  524. TotalPhysicalMemoryMb = this.TotalPhysicalMemoryMb,
  525. Version = this.Version
  526. #endregion
  527. };
  528. }
  529. /// <summary>
  530. /// 上报算力时。
  531. /// 因为只有MinerData具有的成员发生了变化时才需要持久化所以该非法输出isMinerDataChanged参数以表示MinerData的成员是否发生了变化。
  532. /// </summary>
  533. /// <param name="speedDto"></param>
  534. /// <param name="minerIp"></param>
  535. /// <param name="isMinerDataChanged"></param>
  536. public void Update(ISpeedDto speedDto, string minerIp, out bool isMinerDataChanged) {
  537. Update(speedDto, out isMinerDataChanged);
  538. this.MinerActiveOn = DateTime.Now;
  539. if (!isMinerDataChanged && minerIp != this.MinerIp) {
  540. isMinerDataChanged = true;
  541. }
  542. this.MinerIp = minerIp;
  543. }
  544. /// <summary>
  545. /// 因为只有MinerData具有的成员发生了变化时才需要持久化所以该非法输出isMinerDataChanged参数以表示MinerData的成员是否发生了变化。
  546. /// </summary>
  547. /// <param name="state"></param>
  548. /// <param name="minerIp"></param>
  549. /// <param name="isMinerDataChanged"></param>
  550. public void Update(ReportState state, string minerIp, out bool isMinerDataChanged) {
  551. isMinerDataChanged = false;
  552. this.IsMining = state.IsMining;
  553. this.MinerActiveOn = DateTime.Now;
  554. if (!isMinerDataChanged && minerIp != this.MinerIp) {
  555. isMinerDataChanged = true;
  556. }
  557. this.MinerIp = minerIp;
  558. }
  559. /// <summary>
  560. /// 上报算力时和拉取算力时。
  561. /// 因为只有MinerData具有的成员发生了变化时才需要持久化所以该非法输出isMinerDataChanged参数以表示MinerData的成员是否发生了变化。
  562. /// </summary>
  563. /// <param name="speedDto"></param>
  564. /// <param name="isMinerDataChanged"></param>
  565. public void Update(ISpeedData speedData, out bool isMinerDataChanged) {
  566. this.Update((ISpeedDto)speedData, out isMinerDataChanged);
  567. this.MinerActiveOn = speedData.SpeedOn;
  568. }
  569. /// <summary>
  570. /// 不更新MinerActiveOn
  571. /// </summary>
  572. /// <param name="speedDto"></param>
  573. /// <param name="isMinerDataChanged"></param>
  574. public void Update(ISpeedDto speedDto, out bool isMinerDataChanged) {
  575. #region
  576. isMinerDataChanged = false;
  577. if (speedDto == null) {
  578. return;
  579. }
  580. #region MinerData
  581. if (!isMinerDataChanged) {
  582. isMinerDataChanged = this.ClientId != speedDto.ClientId;
  583. }
  584. this.ClientId = speedDto.ClientId;
  585. if (!isMinerDataChanged) {
  586. isMinerDataChanged = this.MACAddress != speedDto.MACAddress;
  587. }
  588. this.MACAddress = speedDto.MACAddress;
  589. if (!isMinerDataChanged) {
  590. isMinerDataChanged = this.LocalIp != speedDto.LocalIp;
  591. }
  592. this.LocalIp = speedDto.LocalIp;
  593. if (!isMinerDataChanged) {
  594. isMinerDataChanged = this.MinerName != speedDto.MinerName;
  595. }
  596. this.MinerName = speedDto.MinerName;
  597. if (!isMinerDataChanged) {
  598. isMinerDataChanged = this.IsOuterUserEnabled != speedDto.IsOuterUserEnabled;
  599. }
  600. this.IsOuterUserEnabled = speedDto.IsOuterUserEnabled;
  601. this.ReportOuterUserId = speedDto.ReportOuterUserId;
  602. #endregion
  603. this.MineContextId = speedDto.MineContextId;
  604. this.IsAutoBoot = speedDto.IsAutoBoot;
  605. this.IsAutoStart = speedDto.IsAutoStart;
  606. this.AutoStartDelaySeconds = speedDto.AutoStartDelaySeconds;
  607. this.IsAutoRestartKernel = speedDto.IsAutoRestartKernel;
  608. this.AutoRestartKernelTimes = speedDto.AutoRestartKernelTimes;
  609. this.IsNoShareRestartKernel = speedDto.IsNoShareRestartKernel;
  610. this.NoShareRestartKernelMinutes = speedDto.NoShareRestartKernelMinutes;
  611. this.IsNoShareRestartComputer = speedDto.IsNoShareRestartComputer;
  612. this.NoShareRestartComputerMinutes = speedDto.NoShareRestartComputerMinutes;
  613. this.IsPeriodicRestartKernel = speedDto.IsPeriodicRestartKernel;
  614. this.PeriodicRestartKernelHours = speedDto.PeriodicRestartKernelHours;
  615. this.IsPeriodicRestartComputer = speedDto.IsPeriodicRestartComputer;
  616. this.PeriodicRestartComputerHours = speedDto.PeriodicRestartComputerHours;
  617. this.PeriodicRestartComputerMinutes = speedDto.PeriodicRestartComputerMinutes;
  618. this.PeriodicRestartKernelMinutes = speedDto.PeriodicRestartKernelMinutes;
  619. this.IsAutoStopByCpu = speedDto.IsAutoStopByCpu;
  620. this.IsAutoStartByCpu = speedDto.IsAutoStartByCpu;
  621. this.CpuStopTemperature = speedDto.CpuStopTemperature;
  622. this.CpuStartTemperature = speedDto.CpuStartTemperature;
  623. this.CpuLETemperatureSeconds = speedDto.CpuLETemperatureSeconds;
  624. this.CpuGETemperatureSeconds = speedDto.CpuGETemperatureSeconds;
  625. this.CpuPerformance = speedDto.CpuPerformance;
  626. this.CpuTemperature = speedDto.CpuTemperature;
  627. this.IsRaiseHighCpuEvent = speedDto.IsRaiseHighCpuEvent;
  628. this.HighCpuPercent = speedDto.HighCpuPercent;
  629. this.HighCpuSeconds = speedDto.HighCpuSeconds;
  630. this.GpuDriver = speedDto.GpuDriver;
  631. this.GpuType = speedDto.GpuType;
  632. this.OSName = speedDto.OSName;
  633. this.OSVirtualMemoryMb = speedDto.OSVirtualMemoryMb;
  634. this.GpuInfo = speedDto.GpuInfo;
  635. this.CpuId = speedDto.CpuId;
  636. this.Version = speedDto.Version;
  637. this.IsMining = speedDto.IsMining;
  638. this.BootOn = speedDto.BootOn;
  639. this.MineStartedOn = speedDto.MineStartedOn;
  640. this.DiskSpace = speedDto.DiskSpace;
  641. this.MainCoinCode = speedDto.MainCoinCode;
  642. this.MainCoinTotalShare = speedDto.MainCoinTotalShare;
  643. this.MainCoinRejectShare = speedDto.MainCoinRejectShare;
  644. this.MainCoinSpeed = speedDto.MainCoinSpeed;
  645. this.MainCoinPool = speedDto.MainCoinPool;
  646. this.MainCoinWallet = speedDto.MainCoinWallet;
  647. this.Kernel = speedDto.Kernel;
  648. this.IsDualCoinEnabled = speedDto.IsDualCoinEnabled;
  649. this.DualCoinPool = speedDto.DualCoinPool;
  650. this.DualCoinWallet = speedDto.DualCoinWallet;
  651. this.DualCoinCode = speedDto.DualCoinCode;
  652. this.DualCoinTotalShare = speedDto.DualCoinTotalShare;
  653. this.DualCoinRejectShare = speedDto.DualCoinRejectShare;
  654. this.DualCoinSpeed = speedDto.DualCoinSpeed;
  655. this.KernelCommandLine = speedDto.KernelCommandLine;
  656. this.MainCoinSpeedOn = speedDto.MainCoinSpeedOn;
  657. this.DualCoinSpeedOn = speedDto.DualCoinSpeedOn;
  658. this.GpuTable = speedDto.GpuTable;
  659. this.MainCoinPoolDelay = speedDto.MainCoinPoolDelay;
  660. this.DualCoinPoolDelay = speedDto.DualCoinPoolDelay;
  661. this.IsFoundOneGpuShare = speedDto.IsFoundOneGpuShare;
  662. this.IsRejectOneGpuShare = speedDto.IsRejectOneGpuShare;
  663. this.IsGotOneIncorrectGpuShare = speedDto.IsGotOneIncorrectGpuShare;
  664. this.MineWorkId = speedDto.MineWorkId;
  665. this.MineWorkName = speedDto.MineWorkName;
  666. this.KernelSelfRestartCount = speedDto.KernelSelfRestartCount - 1;// 需要减1
  667. this.LocalServerMessageTimestamp = speedDto.LocalServerMessageTimestamp;
  668. this.TotalPhysicalMemoryMb = speedDto.TotalPhysicalMemoryMb;
  669. this.IsAutoDisableWindowsFirewall = speedDto.IsAutoDisableWindowsFirewall;
  670. this.IsDisableAntiSpyware = speedDto.IsDisableAntiSpyware;
  671. this.IsDisableUAC = speedDto.IsDisableUAC;
  672. this.IsDisableWAU = speedDto.IsDisableWAU;
  673. Extract(
  674. speedDto,
  675. out int mainCoinPoolDelayNumber,
  676. out int dualCoinPoolDelayNumber,
  677. out double mainCoinRejectPercent,
  678. out double dualCoinRejectPercent,
  679. out int diskSpaceMb);
  680. this.MainCoinPoolDelayNumber = mainCoinPoolDelayNumber;
  681. this.DualCoinPoolDelayNumber = dualCoinPoolDelayNumber;
  682. this.MainCoinRejectPercent = mainCoinRejectPercent;
  683. this.DualCoinRejectPercent = dualCoinRejectPercent;
  684. this.DiskSpaceMb = diskSpaceMb;
  685. #endregion
  686. }
  687. public string Id { get; set; }
  688. /// <summary>
  689. /// 服务的指定的作业
  690. /// </summary>
  691. public Guid WorkId { get; set; }
  692. public string WorkerName { get; set; }
  693. public string WindowsLoginName { get; set; }
  694. private string _windowsPassword;
  695. public string WindowsPassword {
  696. get {
  697. return _windowsPassword;
  698. }
  699. set {
  700. if (!Base64Util.IsBase64OrEmpty(value)) {
  701. value = string.Empty;
  702. }
  703. _windowsPassword = value;
  704. }
  705. }
  706. public DateTime CreatedOn { get; set; }
  707. public DateTime MinerActiveOn { get; set; }
  708. public Guid GroupId { get; set; }
  709. public DateTime NetActiveOn { get; set; }
  710. public bool IsOnline { get; set; }
  711. public bool GetIsOnline(bool isOuterNet) {
  712. if (!IsOnline) {
  713. return false;
  714. }
  715. if (isOuterNet) {
  716. if (this.IsOuterUserEnabled) {
  717. if (NetActiveOn.AddSeconds(60) < DateTime.Now) {
  718. return false;
  719. }
  720. }
  721. else if (NetActiveOn.AddSeconds(180) < DateTime.Now) {
  722. return false;
  723. }
  724. return true;
  725. }
  726. if (NetActiveOn.AddSeconds(20) < DateTime.Now) {
  727. return false;
  728. }
  729. return true;
  730. }
  731. public string LoginName { get; set; }
  732. public string OuterUserId { get; set; }
  733. // 不会传到客户端
  734. [JsonIgnore]
  735. public string AESPassword { get; set; }
  736. public DateTime AESPasswordOn { get; set; }
  737. // 因为服务端需要根据如下几个字段排序所以会有这几个字段
  738. public int MainCoinPoolDelayNumber { get; set; }
  739. public int DualCoinPoolDelayNumber { get; set; }
  740. public double MainCoinRejectPercent { get; set; }
  741. public double DualCoinRejectPercent { get; set; }
  742. public int DiskSpaceMb { get; set; }
  743. }
  744. }