@@ -13,6 +13,7 @@ namespace ServiceControl.Audit.Persistence.PostgreSQL;
1313using ServiceControl . Audit . Infrastructure ;
1414using ServiceControl . Audit . Monitoring ;
1515using ServiceControl . Audit . Persistence ;
16+ using ServiceControl . Audit . Persistence . Infrastructure ;
1617using ServiceControl . SagaAudit ;
1718
1819
@@ -46,8 +47,75 @@ public Task<QueryResult<IList<MessagesView>>> GetMessages(bool includeSystemMess
4647 return ExecuteMessagesQuery ( builder , cancellationToken ) ;
4748 }
4849
49- public Task < QueryResult < IList < AuditCount > > > QueryAuditCounts ( string endpointName , CancellationToken cancellationToken ) => throw new NotImplementedException ( ) ;
50- public Task < QueryResult < IList < KnownEndpointsView > > > QueryKnownEndpoints ( CancellationToken cancellationToken ) => throw new NotImplementedException ( ) ;
50+ public async Task < QueryResult < IList < AuditCount > > > QueryAuditCounts ( string endpointName , CancellationToken cancellationToken )
51+ {
52+ var startDate = DateTime . UtcNow . AddDays ( - 30 ) ;
53+ var endDate = DateTime . UtcNow ;
54+ using var connection = await connectionFactory . OpenConnection ( cancellationToken ) ;
55+ using var cmd = new NpgsqlCommand ( @"
56+ SELECT
57+ DATE_TRUNC('day', processed_at) AS day,
58+ COUNT(*) AS count
59+ FROM processed_messages
60+ WHERE receiving_endpoint_name = @endpoint_name
61+ AND processed_at BETWEEN @start_date AND @end_date
62+ GROUP BY day
63+ ORDER BY day;" , connection ) ;
64+ cmd . Parameters . AddWithValue ( "endpoint_name" , endpointName ) ;
65+ cmd . Parameters . AddWithValue ( "start_date" , startDate ) ;
66+ cmd . Parameters . AddWithValue ( "end_date" , endDate ) ;
67+
68+ using var reader = await cmd . ExecuteReaderAsync ( cancellationToken ) ;
69+ var results = new List < AuditCount > ( ) ;
70+ while ( await reader . ReadAsync ( cancellationToken ) )
71+ {
72+ results . Add ( new AuditCount
73+ {
74+ UtcDate = reader . GetDateTime ( reader . GetOrdinal ( "day" ) ) ,
75+ Count = reader . GetInt32 ( reader . GetOrdinal ( "count" ) )
76+ } ) ;
77+ }
78+
79+ return new QueryResult < IList < AuditCount > > ( results , new QueryStatsInfo ( string . Empty , results . Count ) ) ;
80+ }
81+
82+ public async Task < QueryResult < IList < KnownEndpointsView > > > QueryKnownEndpoints ( CancellationToken cancellationToken )
83+ {
84+ // We need to return all the data from known_endpoints table in postgress
85+ using var connection = await connectionFactory . OpenConnection ( cancellationToken ) ;
86+ using var cmd = new NpgsqlCommand ( @"
87+ SELECT
88+ id,
89+ name,
90+ host_id,
91+ host,
92+ last_seen
93+ FROM known_endpoints;" , connection ) ;
94+
95+ using var reader = await cmd . ExecuteReaderAsync ( cancellationToken ) ;
96+ var results = new List < KnownEndpointsView > ( ) ;
97+ while ( await reader . ReadAsync ( cancellationToken ) )
98+ {
99+ var name = reader . GetString ( reader . GetOrdinal ( "name" ) ) ;
100+ var hostId = reader . GetGuid ( reader . GetOrdinal ( "host_id" ) ) ;
101+ var host = reader . GetString ( reader . GetOrdinal ( "host" ) ) ;
102+ var lastSeen = reader . GetDateTime ( reader . GetOrdinal ( "last_seen" ) ) ;
103+ results . Add ( new KnownEndpointsView
104+ {
105+ Id = DeterministicGuid . MakeId ( name , hostId . ToString ( ) ) ,
106+ EndpointDetails = new EndpointDetails
107+ {
108+ Host = host ,
109+ HostId = hostId ,
110+ Name = name
111+ } ,
112+ HostDisplayName = host
113+ } ) ;
114+ }
115+
116+ return new QueryResult < IList < KnownEndpointsView > > ( results , new QueryStatsInfo ( string . Empty , results . Count ) ) ;
117+ }
118+
51119 public Task < QueryResult < IList < MessagesView > > > QueryMessages ( string searchParam , PagingInfo pagingInfo , SortInfo sortInfo , DateTimeRange ? timeSentRange = null , CancellationToken cancellationToken = default )
52120 {
53121 var builder = new PostgresqlMessagesQueryBuilder ( )
0 commit comments