1+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+ // SPDX-License-Identifier: Apache-2.0
3+
4+ // snippet-start:[CloudWatchLogs.dotnetv4.CloudWatchLogsWrapper]
5+ using Amazon . CloudWatchLogs ;
6+ using Amazon . CloudWatchLogs . Model ;
7+ using Microsoft . Extensions . Logging ;
8+
9+ namespace CloudWatchLogsActions ;
10+
11+ /// <summary>
12+ /// Wrapper class for Amazon CloudWatch Logs operations.
13+ /// </summary>
14+ public class CloudWatchLogsWrapper
15+ {
16+ private readonly IAmazonCloudWatchLogs _amazonCloudWatchLogs ;
17+ private readonly ILogger < CloudWatchLogsWrapper > _logger ;
18+
19+ /// <summary>
20+ /// Constructor for the CloudWatchLogsWrapper class.
21+ /// </summary>
22+ /// <param name="amazonCloudWatchLogs">The injected CloudWatch Logs client.</param>
23+ /// <param name="logger">The injected logger.</param>
24+ public CloudWatchLogsWrapper ( IAmazonCloudWatchLogs amazonCloudWatchLogs , ILogger < CloudWatchLogsWrapper > logger )
25+ {
26+ _amazonCloudWatchLogs = amazonCloudWatchLogs ;
27+ _logger = logger ;
28+ }
29+
30+ // snippet-start:[CloudWatchLogs.dotnetv4.StartQuery]
31+ /// <summary>
32+ /// Starts a CloudWatch Logs Insights query.
33+ /// </summary>
34+ /// <param name="logGroupName">The name of the log group to query.</param>
35+ /// <param name="queryString">The CloudWatch Logs Insights query string.</param>
36+ /// <param name="startTime">The start time for the query (seconds since epoch).</param>
37+ /// <param name="endTime">The end time for the query (seconds since epoch).</param>
38+ /// <param name="limit">The maximum number of results to return.</param>
39+ /// <returns>The query ID if successful, null otherwise.</returns>
40+ public async Task < string ? > StartQueryAsync (
41+ string logGroupName ,
42+ string queryString ,
43+ long startTime ,
44+ long endTime ,
45+ int limit = 10000 )
46+ {
47+ try
48+ {
49+ var request = new StartQueryRequest
50+ {
51+ LogGroupName = logGroupName ,
52+ QueryString = queryString ,
53+ StartTime = startTime ,
54+ EndTime = endTime ,
55+ Limit = limit
56+ } ;
57+
58+ var response = await _amazonCloudWatchLogs . StartQueryAsync ( request ) ;
59+ return response . QueryId ;
60+ }
61+ catch ( InvalidParameterException ex )
62+ {
63+ _logger . LogError ( $ "Invalid parameter for query: { ex . Message } ") ;
64+ return null ;
65+ }
66+ catch ( ResourceNotFoundException ex )
67+ {
68+ _logger . LogError ( $ "Log group not found: { ex . Message } ") ;
69+ return null ;
70+ }
71+ catch ( Exception ex )
72+ {
73+ _logger . LogError ( $ "An error occurred while starting query: { ex . Message } ") ;
74+ return null ;
75+ }
76+ }
77+ // snippet-end:[CloudWatchLogs.dotnetv4.StartQuery]
78+
79+ // snippet-start:[CloudWatchLogs.dotnetv4.GetQueryResults]
80+ /// <summary>
81+ /// Gets the results of a CloudWatch Logs Insights query.
82+ /// </summary>
83+ /// <param name="queryId">The ID of the query.</param>
84+ /// <returns>The query results response.</returns>
85+ public async Task < GetQueryResultsResponse ? > GetQueryResultsAsync ( string queryId )
86+ {
87+ try
88+ {
89+ var request = new GetQueryResultsRequest
90+ {
91+ QueryId = queryId
92+ } ;
93+
94+ var response = await _amazonCloudWatchLogs . GetQueryResultsAsync ( request ) ;
95+ return response ;
96+ }
97+ catch ( ResourceNotFoundException ex )
98+ {
99+ _logger . LogError ( $ "Query not found: { ex . Message } ") ;
100+ return null ;
101+ }
102+ catch ( Exception ex )
103+ {
104+ _logger . LogError ( $ "An error occurred while getting query results: { ex . Message } ") ;
105+ return null ;
106+ }
107+ }
108+ // snippet-end:[CloudWatchLogs.dotnetv4.GetQueryResults]
109+
110+ // snippet-start:[CloudWatchLogs.dotnetv4.PutLogEvents]
111+ /// <summary>
112+ /// Puts log events to a CloudWatch Logs log stream.
113+ /// </summary>
114+ /// <param name="logGroupName">The name of the log group.</param>
115+ /// <param name="logStreamName">The name of the log stream.</param>
116+ /// <param name="logEvents">The list of log events to put.</param>
117+ /// <returns>True if successful, false otherwise.</returns>
118+ public async Task < bool > PutLogEventsAsync (
119+ string logGroupName ,
120+ string logStreamName ,
121+ List < InputLogEvent > logEvents )
122+ {
123+ try
124+ {
125+ var request = new PutLogEventsRequest
126+ {
127+ LogGroupName = logGroupName ,
128+ LogStreamName = logStreamName ,
129+ LogEvents = logEvents
130+ } ;
131+
132+ await _amazonCloudWatchLogs . PutLogEventsAsync ( request ) ;
133+ return true ;
134+ }
135+ catch ( ResourceNotFoundException ex )
136+ {
137+ _logger . LogError ( $ "Log group or stream not found: { ex . Message } ") ;
138+ return false ;
139+ }
140+ catch ( Exception ex )
141+ {
142+ _logger . LogError ( $ "An error occurred while putting log events: { ex . Message } ") ;
143+ return false ;
144+ }
145+ }
146+ // snippet-end:[CloudWatchLogs.dotnetv4.PutLogEvents]
147+ }
148+ // snippet-end:[CloudWatchLogs.dotnetv4.CloudWatchLogsWrapper]
0 commit comments