Skip to content

Commit 2fd6a8e

Browse files
authored
Merge pull request #868 from iceljc/master
refine global stats
2 parents 0aa1420 + e208d1d commit 2fd6a8e

File tree

11 files changed

+31
-38
lines changed

11 files changed

+31
-38
lines changed

src/Infrastructure/BotSharp.Abstraction/Repositories/IBotSharpRepository.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ List<ConversationStateLogModel> GetConversationStateLogs(string conversationId)
200200
#endregion
201201

202202
#region Statistics
203-
BotSharpStats? GetGlobalStats(string metric, string dimension, string value, DateTime recordTime, StatsInterval interval)
203+
BotSharpStats? GetGlobalStats(string metric, string dimension, string dimRefVal, DateTime recordTime, StatsInterval interval)
204204
=> throw new NotImplementedException();
205205
bool SaveGlobalStats(BotSharpStats body)
206206
=> throw new NotImplementedException();

src/Infrastructure/BotSharp.Abstraction/Statistics/Enums/StatsInterval.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@ namespace BotSharp.Abstraction.Statistics.Enums;
22

33
public enum StatsInterval
44
{
5-
Hour = 1,
6-
Day = 2,
7-
Week = 3,
8-
Month = 4
5+
Minute = 1,
6+
Hour = 2,
7+
Day = 3
98
}

src/Infrastructure/BotSharp.Abstraction/Statistics/Enums/StatsCategory.cs renamed to src/Infrastructure/BotSharp.Abstraction/Statistics/Enums/StatsMetric.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
namespace BotSharp.Abstraction.Statistics.Enums;
22

3-
public static class StatsCategory
3+
public static class StatsMetric
44
{
55
public static string AgentLlmCost = "agent-llm-cost";
66
public static string AgentCall = "agent-call";

src/Infrastructure/BotSharp.Abstraction/Statistics/Models/BotSharpStats.cs

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ public class BotSharpStats
1010
[JsonPropertyName("dimension")]
1111
public string Dimension { get; set; } = null!;
1212

13-
[JsonPropertyName("value")]
14-
public string Value { get; set; } = null!;
13+
[JsonPropertyName("dim_ref_val")]
14+
public string DimRefVal { get; set; } = null!;
1515

1616
[JsonPropertyName("data")]
1717
public IDictionary<string, double> Data { get; set; } = new Dictionary<string, double>();
@@ -46,7 +46,7 @@ public string Interval
4646

4747
public override string ToString()
4848
{
49-
return $"{Metric}-{Dimension}-{Value} ({Interval}): {Data?.Count ?? 0}";
49+
return $"{Metric}-{Dimension}-{DimRefVal} ({Interval}): {Data?.Count ?? 0}";
5050
}
5151

5252
public static (DateTime, DateTime) BuildTimeInterval(DateTime recordTime, StatsInterval interval)
@@ -56,20 +56,14 @@ public static (DateTime, DateTime) BuildTimeInterval(DateTime recordTime, StatsI
5656

5757
switch (interval)
5858
{
59+
case StatsInterval.Minute:
60+
startTime = new DateTime(recordTime.Year, recordTime.Month, recordTime.Day, recordTime.Hour, recordTime.Minute, 0);
61+
endTime = startTime.AddMinutes(1);
62+
break;
5963
case StatsInterval.Hour:
6064
startTime = new DateTime(recordTime.Year, recordTime.Month, recordTime.Day, recordTime.Hour, 0, 0);
6165
endTime = startTime.AddHours(1);
6266
break;
63-
case StatsInterval.Week:
64-
var dayOfWeek = startTime.DayOfWeek;
65-
var firstDayOfWeek = startTime.AddDays(-(int)dayOfWeek);
66-
startTime = new DateTime(firstDayOfWeek.Year, firstDayOfWeek.Month, firstDayOfWeek.Day, 0, 0, 0);
67-
endTime = startTime.AddDays(7);
68-
break;
69-
case StatsInterval.Month:
70-
startTime = new DateTime(recordTime.Year, recordTime.Month, 1);
71-
endTime = startTime.AddMonths(1);
72-
break;
7367
default:
7468
startTime = new DateTime(recordTime.Year, recordTime.Month, recordTime.Day, 0, 0, 0);
7569
endTime = startTime.AddDays(1);

src/Infrastructure/BotSharp.Abstraction/Statistics/Models/BotSharpStatsInput.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ public class BotSharpStatsInput
66
{
77
public string Metric { get; set; }
88
public string Dimension { get; set; }
9-
public string Value { get; set; }
9+
public string DimRefVal { get; set; }
1010
public List<StatsKeyValuePair> Data { get; set; } = [];
1111
public DateTime RecordTime { get; set; } = DateTime.UtcNow;
1212
public StatsInterval IntervalType { get; set; } = StatsInterval.Day;

src/Infrastructure/BotSharp.Core/Conversations/Services/TokenStatistics.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,9 @@ public void AddToken(TokenStatsModel stats, RoleDialogModel message)
6363
var globalStats = _services.GetRequiredService<IBotSharpStatsService>();
6464
var body = new BotSharpStatsInput
6565
{
66-
Metric = StatsCategory.AgentLlmCost,
66+
Metric = StatsMetric.AgentLlmCost,
6767
Dimension = "agent",
68-
Value = message.CurrentAgentId,
68+
DimRefVal = message.CurrentAgentId,
6969
RecordTime = DateTime.UtcNow,
7070
IntervalType = StatsInterval.Day,
7171
Data = [

src/Infrastructure/BotSharp.Core/Repository/FileRepository/FileRepository.Stats.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ namespace BotSharp.Core.Repository;
44

55
public partial class FileRepository
66
{
7-
public BotSharpStats? GetGlobalStats(string metric, string dimension, string value, DateTime recordTime, StatsInterval interval)
7+
public BotSharpStats? GetGlobalStats(string metric, string dimension, string dimRefVal, DateTime recordTime, StatsInterval interval)
88
{
99
var baseDir = Path.Combine(_dbSettings.FileRepository, STATS_FOLDER);
1010
var (startTime, endTime) = BotSharpStats.BuildTimeInterval(recordTime, interval);
@@ -18,7 +18,7 @@ public partial class FileRepository
1818
var list = JsonSerializer.Deserialize<List<BotSharpStats>>(text, _options);
1919
var found = list?.FirstOrDefault(x => x.Metric.IsEqualTo(metric)
2020
&& x.Dimension.IsEqualTo(dimension)
21-
&& x.Value.IsEqualTo(value)
21+
&& x.DimRefVal.IsEqualTo(dimRefVal)
2222
&& x.StartTime == startTime
2323
&& x.EndTime == endTime);
2424

@@ -50,15 +50,15 @@ public bool SaveGlobalStats(BotSharpStats body)
5050
var list = JsonSerializer.Deserialize<List<BotSharpStats>>(text, _options);
5151
var found = list?.FirstOrDefault(x => x.Metric.IsEqualTo(body.Metric)
5252
&& x.Dimension.IsEqualTo(body.Dimension)
53-
&& x.Value.IsEqualTo(body.Value)
53+
&& x.DimRefVal.IsEqualTo(body.DimRefVal)
5454
&& x.StartTime == startTime
5555
&& x.EndTime == endTime);
5656

5757
if (found != null)
5858
{
5959
found.Metric = body.Metric;
6060
found.Dimension = body.Dimension;
61-
found.Value = body.Value;
61+
found.DimRefVal = body.DimRefVal;
6262
found.Data = body.Data;
6363
found.RecordTime = body.RecordTime;
6464
found.StartTime = body.StartTime;

src/Infrastructure/BotSharp.Core/Statistics/Services/BotSharpStatsService.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public bool UpdateStats(string resourceKey, BotSharpStatsInput input)
3131
|| input == null
3232
|| string.IsNullOrEmpty(input.Metric)
3333
|| string.IsNullOrEmpty(input.Dimension)
34-
|| string.IsNullOrEmpty(input.Value)
34+
|| string.IsNullOrEmpty(input.DimRefVal)
3535
|| input.Data.IsNullOrEmpty())
3636
{
3737
return false;
@@ -41,14 +41,14 @@ public bool UpdateStats(string resourceKey, BotSharpStatsInput input)
4141
var res = locker.Lock(resourceKey, () =>
4242
{
4343
var db = _services.GetRequiredService<IBotSharpRepository>();
44-
var body = db.GetGlobalStats(input.Metric, input.Dimension, input.Value, input.RecordTime, input.IntervalType);
44+
var body = db.GetGlobalStats(input.Metric, input.Dimension, input.DimRefVal, input.RecordTime, input.IntervalType);
4545
if (body == null)
4646
{
4747
var stats = new BotSharpStats
4848
{
4949
Metric = input.Metric,
5050
Dimension = input.Dimension,
51-
Value = input.Value,
51+
DimRefVal = input.DimRefVal,
5252
RecordTime = input.RecordTime,
5353
IntervalType = input.IntervalType,
5454
Data = input.Data.ToDictionary(x => x.Key, x => x.Value)
@@ -89,7 +89,7 @@ public bool UpdateStats(string resourceKey, BotSharpStatsInput input)
8989
}
9090
catch (Exception ex)
9191
{
92-
_logger.LogError($"Error when updating global stats {input.Metric}-{input.Dimension}-{input.Value}. {ex.Message}\r\n{ex.InnerException}");
92+
_logger.LogError($"Error when updating global stats {input.Metric}-{input.Dimension}-{input.DimRefVal}. {ex.Message}\r\n{ex.InnerException}");
9393
return false;
9494
}
9595
}

src/Infrastructure/BotSharp.Logger/Hooks/GlobalStatsConversationHook.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@ private void UpdateAgentCall(RoleDialogModel message)
3131

3232
var body = new BotSharpStatsInput
3333
{
34-
Metric = StatsCategory.AgentCall,
34+
Metric = StatsMetric.AgentCall,
3535
Dimension = "agent",
36-
Value = message.CurrentAgentId,
36+
DimRefVal = message.CurrentAgentId,
3737
RecordTime = DateTime.UtcNow,
3838
IntervalType = StatsInterval.Day,
3939
Data = [

src/Plugins/BotSharp.Plugin.MongoStorage/Collections/GlobalStatisticsDocument.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ public class GlobalStatisticsDocument : MongoBase
44
{
55
public string Metric { get; set; }
66
public string Dimension { get; set; }
7-
public string Value { get; set; }
7+
public string DimRefVal { get; set; }
88
public IDictionary<string, double> Data { get; set; } = new Dictionary<string, double>();
99
public DateTime RecordTime { get; set; }
1010
public DateTime StartTime { get; set; }

src/Plugins/BotSharp.Plugin.MongoStorage/Repository/MongoRepository.Stats.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ namespace BotSharp.Plugin.MongoStorage.Repository;
55

66
public partial class MongoRepository
77
{
8-
public BotSharpStats? GetGlobalStats(string metric, string dimension, string value, DateTime recordTime, StatsInterval interval)
8+
public BotSharpStats? GetGlobalStats(string metric, string dimension, string dimRefVal, DateTime recordTime, StatsInterval interval)
99
{
1010
var (startTime, endTime) = BotSharpStats.BuildTimeInterval(recordTime, interval);
1111

@@ -14,7 +14,7 @@ public partial class MongoRepository
1414
{
1515
builder.Eq(x => x.Metric, metric),
1616
builder.Eq(x => x.Dimension, dimension),
17-
builder.Eq(x => x.Value, value),
17+
builder.Eq(x => x.DimRefVal, dimRefVal),
1818
builder.Eq(x => x.StartTime, startTime),
1919
builder.Eq(x => x.EndTime, endTime)
2020
};
@@ -27,7 +27,7 @@ public partial class MongoRepository
2727
{
2828
Metric = found.Metric,
2929
Dimension = found.Dimension,
30-
Value = found.Value,
30+
DimRefVal = found.DimRefVal,
3131
Data = found.Data,
3232
RecordTime = found.RecordTime,
3333
StartTime = startTime,
@@ -48,7 +48,7 @@ public bool SaveGlobalStats(BotSharpStats body)
4848
{
4949
builder.Eq(x => x.Metric, body.Metric),
5050
builder.Eq(x => x.Dimension, body.Dimension),
51-
builder.Eq(x => x.Value, body.Value),
51+
builder.Eq(x => x.DimRefVal, body.DimRefVal),
5252
builder.Eq(x => x.StartTime, startTime),
5353
builder.Eq(x => x.EndTime, endTime)
5454
};
@@ -58,7 +58,7 @@ public bool SaveGlobalStats(BotSharpStats body)
5858
.SetOnInsert(x => x.Id, Guid.NewGuid().ToString())
5959
.Set(x => x.Metric, body.Metric)
6060
.Set(x => x.Dimension, body.Dimension)
61-
.Set(x => x.Value, body.Value)
61+
.Set(x => x.DimRefVal, body.DimRefVal)
6262
.Set(x => x.Data, body.Data)
6363
.Set(x => x.StartTime, body.StartTime)
6464
.Set(x => x.EndTime, body.EndTime)

0 commit comments

Comments
 (0)