@@ -3,6 +3,7 @@ package input
33import (
44 "context"
55 "encoding/json"
6+ "errors"
67 "sync"
78 "time"
89
@@ -24,6 +25,7 @@ const (
2425 fieldMetrics = "metrics"
2526 fieldSchedule = "schedule"
2627 fieldMetricsOffset = "metrics_offset"
28+ fieldPageSize = "page_size"
2729 fieldHTTPConfig = "http"
2830 fieldHTTPTimeout = "timeout"
2931 fieldHTTPRetryCount = "retry_count"
@@ -45,6 +47,9 @@ func runAIInputConfig() *service.ConfigSpec {
4547 service .NewStringEnumField (fieldResourceType , resourceTypes ... ).
4648 Default ("workload" ).
4749 Description ("Run AI resource to collect metrics from." ),
50+ service .NewIntField (fieldPageSize ).
51+ Description ("Run AI page size." ).
52+ Default (500 ),
4853 service .NewStringListField (fieldMetrics ).
4954 Description ("Run AI metrics to collect." ).
5055 Default (lo .Map ([]runai.MetricType {
@@ -90,9 +95,10 @@ input:
9095 url: "${RUNAI_URL:}"
9196 app_id: "${RUNAI_APP_ID:}"
9297 app_secret: "${RUNAI_APP_SECRET:}"
93- schedule: "${RUNAI_SCRAPE_SCHEDULE:*/30 * * * * *}"
94- metrics_scrape_offset: "${RUNAI_METRICS_SCRAPE_OFFSET:30s}"
95- resource_type: "${RUNAI_RESOURCE_TYPE:workload}"
98+ schedule: "*/30 * * * * *"
99+ metrics_scrape_offset: "30s"
100+ resource_type: "workload"
101+ page_size: 500
96102 metrics:
97103 - CPU_LIMIT_CORES
98104 - CPU_MEMORY_LIMIT_BYTES
@@ -116,7 +122,15 @@ input:
116122
117123func init () {
118124 err := service .RegisterBatchInput ("run_ai" , runAIInputConfig (), func (conf * service.ParsedConfig , mgr * service.Resources ) (service.BatchInput , error ) {
119- return newRunAIInput (conf , mgr .Logger ())
125+ httpMetrics := mgr .Metrics ().NewTimer ("run_ai_http_request" , "url" )
126+ in , err := newRunAIInput (conf , mgr .Logger (), httpMetrics )
127+ if err != nil {
128+ return nil , err
129+ }
130+
131+ in .timingMetrics = httpMetrics
132+
133+ return in , nil
120134 })
121135 if err != nil {
122136 panic (err )
@@ -136,9 +150,11 @@ type runAIInput struct {
136150 scheduler gocron.Scheduler
137151 store map [time.Time ][]runai.ResourceWithMetrics
138152 mu sync.Mutex
153+
154+ timingMetrics * service.MetricTimer
139155}
140156
141- func newRunAIInput (conf * service.ParsedConfig , logger * service.Logger ) (* runAIInput , error ) {
157+ func newRunAIInput (conf * service.ParsedConfig , logger * service.Logger , httpMetrics * service. MetricTimer ) (* runAIInput , error ) {
142158 url , err := conf .FieldString (fieldURL )
143159 if err != nil {
144160 return nil , err
@@ -174,6 +190,15 @@ func newRunAIInput(conf *service.ParsedConfig, logger *service.Logger) (*runAIIn
174190 return nil , err
175191 }
176192
193+ pageSize , err := conf .FieldInt (fieldPageSize )
194+ if err != nil {
195+ return nil , err
196+ }
197+
198+ if pageSize < 100 || pageSize > 500 {
199+ return nil , errors .New ("page size must be between 100 and 500" )
200+ }
201+
177202 var interval time.Duration
178203 {
179204 // Create a cron scheduler
@@ -219,6 +244,8 @@ func newRunAIInput(conf *service.ParsedConfig, logger *service.Logger) (*runAIIn
219244 RetryCount : retryCount ,
220245 RetryWaitTime : retryWaitTime ,
221246 RetryMaxWaitTime : retryMaxWaitTime ,
247+ TimingMetrics : httpMetrics ,
248+ PageSize : pageSize ,
222249 })
223250 if err != nil {
224251 return nil , err
0 commit comments