|
|
@@ -17,8 +17,11 @@ namespace molilian.core
|
|
|
{
|
|
|
int flag = RedisHelper.Get<int>("turn:save_dailys_log");
|
|
|
if (flag == 1) save_dailys_log = true;
|
|
|
- }
|
|
|
- private static readonly SemaphoreSlim semaphore = new SemaphoreSlim(10, 10);
|
|
|
+ }
|
|
|
+ private static readonly SemaphoreSlim semaphore = new SemaphoreSlim(10, 10);
|
|
|
+ private const int StatsHourlyExpireSeconds = 7 * 86400;
|
|
|
+ private const int StatsDailyExpireSeconds = 90 * 86400;
|
|
|
+ private const int StatsMonthlyExpireSeconds = 366 * 86400;
|
|
|
|
|
|
public static async Task<int> BatchInsertLogDBAsync(int limit)
|
|
|
{
|
|
|
@@ -191,51 +194,10 @@ namespace molilian.core
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private static void saveAccountCache(string accountName, bool success, string message, string reason)
|
|
|
- {
|
|
|
- RedisHelper.IncrBy($":total:{accountName}:{DateTime.Now:yyyyMM}");
|
|
|
- RedisHelper.IncrBy($":total:{accountName}:{DateTime.Now:yyyyMMdd}");
|
|
|
- RedisHelper.IncrBy($":total:{accountName}:{DateTime.Now:yyyyMMddHH}");
|
|
|
-
|
|
|
-
|
|
|
- string result = success ? "success" : "fail";
|
|
|
- RedisHelper.IncrBy($":total:{accountName}:{result}:{DateTime.Now:yyyyMM}");
|
|
|
- RedisHelper.IncrBy($":total:{accountName}:{result}:{DateTime.Now:yyyyMMdd}");
|
|
|
- RedisHelper.IncrBy($":total:{accountName}:{result}:{DateTime.Now:yyyyMMddHH}");
|
|
|
-
|
|
|
-
|
|
|
- if (!string.IsNullOrEmpty(message))
|
|
|
- {
|
|
|
- RedisHelper.SAdd($":total:{accountName}:message:{DateTime.Now:yyyyMM}", message);
|
|
|
- RedisHelper.SAdd($":total:{accountName}:message:{DateTime.Now:yyyyMMdd}", message);
|
|
|
- RedisHelper.SAdd($":total:{accountName}:message:{DateTime.Now:yyyyMMddHH}", message);
|
|
|
-
|
|
|
- RedisHelper.IncrBy($":total:{accountName}:{message}:{DateTime.Now:yyyyMM}");
|
|
|
- RedisHelper.IncrBy($":total:{accountName}:{message}:{DateTime.Now:yyyyMMdd}");
|
|
|
- RedisHelper.IncrBy($":total:{accountName}:{message}:{DateTime.Now:yyyyMMddHH}");
|
|
|
-
|
|
|
- RedisHelper.IncrBy($":total:{accountName}:message:{message}:{DateTime.Now:yyyyMM}");
|
|
|
- RedisHelper.IncrBy($":total:{accountName}:message:{message}:{DateTime.Now:yyyyMMdd}");
|
|
|
- RedisHelper.IncrBy($":total:{accountName}:message:{message}:{DateTime.Now:yyyyMMddHH}");
|
|
|
- }
|
|
|
-
|
|
|
- if (!string.IsNullOrEmpty(reason))
|
|
|
- {
|
|
|
- RedisHelper.SAdd($":total:{accountName}:reason:{DateTime.Now:yyyyMM}", reason);
|
|
|
- RedisHelper.SAdd($":total:{accountName}:reason:{DateTime.Now:yyyyMMdd}", reason);
|
|
|
- RedisHelper.SAdd($":total:{accountName}:reason:{DateTime.Now:yyyyMMddHH}", reason);
|
|
|
-
|
|
|
- RedisHelper.IncrBy($":total:{accountName}:{reason}:{DateTime.Now:yyyyMM}");
|
|
|
- RedisHelper.IncrBy($":total:{accountName}:{reason}:{DateTime.Now:yyyyMMdd}");
|
|
|
- RedisHelper.IncrBy($":total:{accountName}:{reason}:{DateTime.Now:yyyyMMddHH}");
|
|
|
-
|
|
|
-
|
|
|
- RedisHelper.IncrBy($":total:{accountName}:reason:{reason}:{DateTime.Now:yyyyMM}");
|
|
|
- RedisHelper.IncrBy($":total:{accountName}:reason:{reason}:{DateTime.Now:yyyyMMdd}");
|
|
|
- RedisHelper.IncrBy($":total:{accountName}:reason:{reason}:{DateTime.Now:yyyyMMddHH}");
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
+ private static void saveAccountCache(string accountName, bool success, string message, string reason)
|
|
|
+ {
|
|
|
+ SaveStatsAccountCache("total", accountName, success, message, reason);
|
|
|
+ }
|
|
|
|
|
|
private static async Task saveUnionCouponParseCacheAsync(TkDataDTO data)
|
|
|
{
|
|
|
@@ -393,47 +355,11 @@ namespace molilian.core
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private static async Task SaveParseAccountCacheAsync(string accountName, bool success,
|
|
|
- string message, string reason)
|
|
|
- {
|
|
|
- await RedisKit.IncrByAsync($":parse_total:{accountName}:{DateTime.Now:yyyyMM}");
|
|
|
- await RedisKit.IncrByAsync($":parse_total:{accountName}:{DateTime.Now:yyyyMMdd}");
|
|
|
- await RedisKit.IncrByAsync($":parse_total:{accountName}:{DateTime.Now:yyyyMMddHH}");
|
|
|
-
|
|
|
- string result = success ? "success" : "fail";
|
|
|
- await RedisKit.IncrByAsync($":parse_total:{accountName}:{result}:{DateTime.Now:yyyyMM}");
|
|
|
- await RedisKit.IncrByAsync($":parse_total:{accountName}:{result}:{DateTime.Now:yyyyMMdd}");
|
|
|
- await RedisKit.IncrByAsync($":parse_total:{accountName}:{result}:{DateTime.Now:yyyyMMddHH}");
|
|
|
-
|
|
|
- if (!string.IsNullOrEmpty(message))
|
|
|
- {
|
|
|
- await RedisKit.SAddAsync($":parse_total:{accountName}:message:{DateTime.Now:yyyyMM}", message);
|
|
|
- await RedisKit.SAddAsync($":parse_total:{accountName}:message:{DateTime.Now:yyyyMMdd}", message);
|
|
|
- await RedisKit.SAddAsync($":parse_total:{accountName}:message:{DateTime.Now:yyyyMMddHH}", message);
|
|
|
-
|
|
|
- await RedisKit.IncrByAsync($":parse_total:{accountName}:{message}:{DateTime.Now:yyyyMM}");
|
|
|
- await RedisKit.IncrByAsync($":parse_total:{accountName}:{message}:{DateTime.Now:yyyyMMdd}");
|
|
|
- await RedisKit.IncrByAsync($":parse_total:{accountName}:{message}:{DateTime.Now:yyyyMMddHH}");
|
|
|
- await RedisKit.IncrByAsync($":parse_total:{accountName}:message:{message}:{DateTime.Now:yyyyMM}");
|
|
|
- await RedisKit.IncrByAsync($":parse_total:{accountName}:message:{message}:{DateTime.Now:yyyyMMdd}");
|
|
|
- await RedisKit.IncrByAsync($":parse_total:{accountName}:message:{message}:{DateTime.Now:yyyyMMddHH}");
|
|
|
- }
|
|
|
-
|
|
|
- if (!string.IsNullOrEmpty(reason))
|
|
|
- {
|
|
|
- await RedisKit.SAddAsync($":parse_total:{accountName}:reason:{DateTime.Now:yyyyMM}", reason);
|
|
|
- await RedisKit.SAddAsync($":parse_total:{accountName}:reason:{DateTime.Now:yyyyMMdd}", reason);
|
|
|
- await RedisKit.SAddAsync($":parse_total:{accountName}:reason:{DateTime.Now:yyyyMMddHH}", reason);
|
|
|
-
|
|
|
- await RedisKit.IncrByAsync($":parse_total:{accountName}:{reason}:{DateTime.Now:yyyyMM}");
|
|
|
- await RedisKit.IncrByAsync($":parse_total:{accountName}:{reason}:{DateTime.Now:yyyyMMdd}");
|
|
|
- await RedisKit.IncrByAsync($":parse_total:{accountName}:{reason}:{DateTime.Now:yyyyMMddHH}");
|
|
|
-
|
|
|
- await RedisKit.IncrByAsync($":parse_total:{accountName}:reason:{reason}:{DateTime.Now:yyyyMM}");
|
|
|
- await RedisKit.IncrByAsync($":parse_total:{accountName}:reason:{reason}:{DateTime.Now:yyyyMMdd}");
|
|
|
- await RedisKit.IncrByAsync($":parse_total:{accountName}:reason:{reason}:{DateTime.Now:yyyyMMddHH}");
|
|
|
- }
|
|
|
- }
|
|
|
+ private static async Task SaveParseAccountCacheAsync(string accountName, bool success,
|
|
|
+ string message, string reason)
|
|
|
+ {
|
|
|
+ await SaveStatsAccountCacheAsync("parse_total", accountName, success, message, reason);
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
|
|
@@ -469,52 +395,130 @@ namespace molilian.core
|
|
|
saveParseAccountCache($"{channel}_{accountId}", success, message, reason);
|
|
|
}
|
|
|
}
|
|
|
- private static void saveParseAccountCache(string accountName, bool success,
|
|
|
- string message, string reason)
|
|
|
- {
|
|
|
-
|
|
|
- RedisHelper.IncrBy($":parse_total:{accountName}:{DateTime.Now:yyyyMM}");
|
|
|
- RedisHelper.IncrBy($":parse_total:{accountName}:{DateTime.Now:yyyyMMdd}");
|
|
|
- RedisHelper.IncrBy($":parse_total:{accountName}:{DateTime.Now:yyyyMMddHH}");
|
|
|
-
|
|
|
-
|
|
|
- string result = success ? "success" : "fail";
|
|
|
- RedisHelper.IncrBy($":parse_total:{accountName}:{result}:{DateTime.Now:yyyyMM}");
|
|
|
- RedisHelper.IncrBy($":parse_total:{accountName}:{result}:{DateTime.Now:yyyyMMdd}");
|
|
|
- RedisHelper.IncrBy($":parse_total:{accountName}:{result}:{DateTime.Now:yyyyMMddHH}");
|
|
|
-
|
|
|
-
|
|
|
- if (!string.IsNullOrEmpty(message))
|
|
|
- {
|
|
|
- RedisHelper.SAdd($":parse_total:{accountName}:message:{DateTime.Now:yyyyMM}", message);
|
|
|
- RedisHelper.SAdd($":parse_total:{accountName}:message:{DateTime.Now:yyyyMMdd}", message);
|
|
|
- RedisHelper.SAdd($":parse_total:{accountName}:message:{DateTime.Now:yyyyMMddHH}", message);
|
|
|
-
|
|
|
- RedisHelper.IncrBy($":parse_total:{accountName}:{message}:{DateTime.Now:yyyyMM}");
|
|
|
- RedisHelper.IncrBy($":parse_total:{accountName}:{message}:{DateTime.Now:yyyyMMdd}");
|
|
|
- RedisHelper.IncrBy($":parse_total:{accountName}:{message}:{DateTime.Now:yyyyMMddHH}");
|
|
|
- RedisHelper.IncrBy($":parse_total:{accountName}:message:{message}:{DateTime.Now:yyyyMM}");
|
|
|
- RedisHelper.IncrBy($":parse_total:{accountName}:message:{message}:{DateTime.Now:yyyyMMdd}");
|
|
|
- RedisHelper.IncrBy($":parse_total:{accountName}:message:{message}:{DateTime.Now:yyyyMMddHH}");
|
|
|
- }
|
|
|
-
|
|
|
- if (!string.IsNullOrEmpty(reason))
|
|
|
- {
|
|
|
- RedisHelper.SAdd($":parse_total:{accountName}:reason:{DateTime.Now:yyyyMM}", reason);
|
|
|
- RedisHelper.SAdd($":parse_total:{accountName}:reason:{DateTime.Now:yyyyMMdd}", reason);
|
|
|
- RedisHelper.SAdd($":parse_total:{accountName}:reason:{DateTime.Now:yyyyMMddHH}", reason);
|
|
|
-
|
|
|
- RedisHelper.IncrBy($":parse_total:{accountName}:{reason}:{DateTime.Now:yyyyMM}");
|
|
|
- RedisHelper.IncrBy($":parse_total:{accountName}:{reason}:{DateTime.Now:yyyyMMdd}");
|
|
|
- RedisHelper.IncrBy($":parse_total:{accountName}:{reason}:{DateTime.Now:yyyyMMddHH}");
|
|
|
-
|
|
|
- RedisHelper.IncrBy($":parse_total:{accountName}:reason:{reason}:{DateTime.Now:yyyyMM}");
|
|
|
- RedisHelper.IncrBy($":parse_total:{accountName}:reason:{reason}:{DateTime.Now:yyyyMMdd}");
|
|
|
- RedisHelper.IncrBy($":parse_total:{accountName}:reason:{reason}:{DateTime.Now:yyyyMMddHH}");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public static async Task<int> GetTotalAsync(string keyname, bool all_node = true)
|
|
|
+ private static void saveParseAccountCache(string accountName, bool success,
|
|
|
+ string message, string reason)
|
|
|
+ {
|
|
|
+ SaveStatsAccountCache("parse_total", accountName, success, message, reason);
|
|
|
+ }
|
|
|
+
|
|
|
+ private static void SaveStatsAccountCache(string prefix, string accountName, bool success,
|
|
|
+ string message, string reason)
|
|
|
+ {
|
|
|
+ var now = DateTime.Now;
|
|
|
+ string month = now.ToString("yyyyMM");
|
|
|
+ string day = now.ToString("yyyyMMdd");
|
|
|
+ string hour = now.ToString("yyyyMMddHH");
|
|
|
+
|
|
|
+ SaveStatsCount(prefix, accountName, month);
|
|
|
+ SaveStatsCount(prefix, accountName, day);
|
|
|
+ SaveStatsCount(prefix, accountName, hour);
|
|
|
+
|
|
|
+ string result = success ? "success" : "fail";
|
|
|
+ SaveStatsCount(prefix, accountName, month, result);
|
|
|
+ SaveStatsCount(prefix, accountName, day, result);
|
|
|
+ SaveStatsCount(prefix, accountName, hour, result);
|
|
|
+
|
|
|
+ SaveStatsDimension(prefix, accountName, "message", message, month);
|
|
|
+ SaveStatsDimension(prefix, accountName, "message", message, day);
|
|
|
+ SaveStatsDimension(prefix, accountName, "message", message, hour);
|
|
|
+
|
|
|
+ SaveStatsDimension(prefix, accountName, "reason", reason, month);
|
|
|
+ SaveStatsDimension(prefix, accountName, "reason", reason, day);
|
|
|
+ SaveStatsDimension(prefix, accountName, "reason", reason, hour);
|
|
|
+ }
|
|
|
+
|
|
|
+ private static async Task SaveStatsAccountCacheAsync(string prefix, string accountName, bool success,
|
|
|
+ string message, string reason)
|
|
|
+ {
|
|
|
+ var now = DateTime.Now;
|
|
|
+ string month = now.ToString("yyyyMM");
|
|
|
+ string day = now.ToString("yyyyMMdd");
|
|
|
+ string hour = now.ToString("yyyyMMddHH");
|
|
|
+
|
|
|
+ await SaveStatsCountAsync(prefix, accountName, month);
|
|
|
+ await SaveStatsCountAsync(prefix, accountName, day);
|
|
|
+ await SaveStatsCountAsync(prefix, accountName, hour);
|
|
|
+
|
|
|
+ string result = success ? "success" : "fail";
|
|
|
+ await SaveStatsCountAsync(prefix, accountName, month, result);
|
|
|
+ await SaveStatsCountAsync(prefix, accountName, day, result);
|
|
|
+ await SaveStatsCountAsync(prefix, accountName, hour, result);
|
|
|
+
|
|
|
+ await SaveStatsDimensionAsync(prefix, accountName, "message", message, month);
|
|
|
+ await SaveStatsDimensionAsync(prefix, accountName, "message", message, day);
|
|
|
+ await SaveStatsDimensionAsync(prefix, accountName, "message", message, hour);
|
|
|
+
|
|
|
+ await SaveStatsDimensionAsync(prefix, accountName, "reason", reason, month);
|
|
|
+ await SaveStatsDimensionAsync(prefix, accountName, "reason", reason, day);
|
|
|
+ await SaveStatsDimensionAsync(prefix, accountName, "reason", reason, hour);
|
|
|
+ }
|
|
|
+
|
|
|
+ private static void SaveStatsCount(string prefix, string accountName, string timeKey, string? dimension = null)
|
|
|
+ {
|
|
|
+ string key = string.IsNullOrEmpty(dimension)
|
|
|
+ ? $":{prefix}:{accountName}:{timeKey}"
|
|
|
+ : $":{prefix}:{accountName}:{dimension}:{timeKey}";
|
|
|
+ RedisHelper.IncrBy(key);
|
|
|
+ RedisHelper.Expire(key, GetStatsExpireSeconds(timeKey));
|
|
|
+ }
|
|
|
+
|
|
|
+ private static async Task SaveStatsCountAsync(string prefix, string accountName, string timeKey, string? dimension = null)
|
|
|
+ {
|
|
|
+ string key = string.IsNullOrEmpty(dimension)
|
|
|
+ ? $":{prefix}:{accountName}:{timeKey}"
|
|
|
+ : $":{prefix}:{accountName}:{dimension}:{timeKey}";
|
|
|
+ await RedisKit.IncrByAsync(key);
|
|
|
+ await RedisKit.ExpireAsync(key, GetStatsExpireSeconds(timeKey));
|
|
|
+ }
|
|
|
+
|
|
|
+ private static void SaveStatsDimension(string prefix, string accountName, string name, string value, string timeKey)
|
|
|
+ {
|
|
|
+ if (string.IsNullOrEmpty(value)) return;
|
|
|
+
|
|
|
+ int expireSeconds = GetStatsExpireSeconds(timeKey);
|
|
|
+ string setKey = $":{prefix}:{accountName}:{name}:{timeKey}";
|
|
|
+ RedisHelper.SAdd(setKey, value);
|
|
|
+ RedisHelper.Expire(setKey, expireSeconds);
|
|
|
+
|
|
|
+ string valueKey = $":{prefix}:{accountName}:{value}:{timeKey}";
|
|
|
+ RedisHelper.IncrBy(valueKey);
|
|
|
+ RedisHelper.Expire(valueKey, expireSeconds);
|
|
|
+
|
|
|
+ string namedValueKey = $":{prefix}:{accountName}:{name}:{value}:{timeKey}";
|
|
|
+ RedisHelper.IncrBy(namedValueKey);
|
|
|
+ RedisHelper.Expire(namedValueKey, expireSeconds);
|
|
|
+ }
|
|
|
+
|
|
|
+ private static async Task SaveStatsDimensionAsync(string prefix, string accountName, string name, string value, string timeKey)
|
|
|
+ {
|
|
|
+ if (string.IsNullOrEmpty(value)) return;
|
|
|
+
|
|
|
+ int expireSeconds = GetStatsExpireSeconds(timeKey);
|
|
|
+ string setKey = $":{prefix}:{accountName}:{name}:{timeKey}";
|
|
|
+ await RedisKit.SAddAsync(setKey, value);
|
|
|
+ await RedisKit.ExpireAsync(setKey, expireSeconds);
|
|
|
+
|
|
|
+ string valueKey = $":{prefix}:{accountName}:{value}:{timeKey}";
|
|
|
+ await RedisKit.IncrByAsync(valueKey);
|
|
|
+ await RedisKit.ExpireAsync(valueKey, expireSeconds);
|
|
|
+
|
|
|
+ string namedValueKey = $":{prefix}:{accountName}:{name}:{value}:{timeKey}";
|
|
|
+ await RedisKit.IncrByAsync(namedValueKey);
|
|
|
+ await RedisKit.ExpireAsync(namedValueKey, expireSeconds);
|
|
|
+ }
|
|
|
+
|
|
|
+ private static int GetStatsExpireSeconds(string timeKey)
|
|
|
+ {
|
|
|
+ return timeKey.Length switch
|
|
|
+ {
|
|
|
+ 10 => StatsHourlyExpireSeconds,
|
|
|
+ 8 => StatsDailyExpireSeconds,
|
|
|
+ 6 => StatsMonthlyExpireSeconds,
|
|
|
+ _ => StatsDailyExpireSeconds,
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ public static async Task<int> GetTotalAsync(string keyname, bool all_node = true)
|
|
|
{
|
|
|
try
|
|
|
{
|