001/*
002 * Copyright © 2025 CUI-OpenSource-Software (info@cuioss.de)
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *     http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016package de.cuioss.benchmarking.common.util;
017
018import de.cuioss.tools.logging.LogRecord;
019import de.cuioss.tools.logging.LogRecordModel;
020
021/**
022 * Provides structured logging messages for the cui-benchmarking-common module.
023 * All messages follow the format: Benchmarking-[identifier]: [message]
024 * <p>
025 * Message identifier ranges:
026 * <ul>
027 *   <li>001-099: INFO messages</li>
028 *   <li>100-199: WARN messages</li>
029 *   <li>200-299: ERROR messages</li>
030 *   <li>500-599: DEBUG messages</li>
031 * </ul>
032 *
033 */
034public final class BenchmarkingLogMessages {
035
036    private static final String PREFIX = "Benchmarking";
037
038    /** Private constructor to prevent instantiation. */
039    private BenchmarkingLogMessages() {
040        // utility class
041    }
042
043    /**
044     * INFO level messages for normal benchmark operations.
045     */
046    public static final class INFO {
047
048        /** Private constructor to prevent instantiation. */
049        private INFO() {
050            // utility class
051        }
052
053        /** Message when starting benchmark runner. */
054        public static final LogRecord BENCHMARK_RUNNER_STARTING = LogRecordModel.builder()
055                .prefix(PREFIX)
056                .identifier(1)
057                .template("Starting CUI benchmark runner...")
058                .build();
059
060        /** Message when benchmarks complete successfully. */
061        public static final LogRecord BENCHMARKS_COMPLETED = LogRecordModel.builder()
062                .prefix(PREFIX)
063                .identifier(3)
064                .template("Benchmarks completed successfully with %s results")
065                .build();
066
067        /** Message when all artifacts are generated. */
068        public static final LogRecord ARTIFACTS_GENERATED = LogRecordModel.builder()
069                .prefix(PREFIX)
070                .identifier(4)
071                .template("All artifacts generated successfully")
072                .build();
073
074        /** Message when processing benchmark results. */
075        public static final LogRecord PROCESSING_RESULTS = LogRecordModel.builder()
076                .prefix(PREFIX)
077                .identifier(5)
078                .template("Processing %s benchmark results to generate artifacts")
079                .build();
080
081        /** Message showing detected benchmark type. */
082        public static final LogRecord BENCHMARK_TYPE_DETECTED = LogRecordModel.builder()
083                .prefix(PREFIX)
084                .identifier(6)
085                .template("Detected benchmark type: %s")
086                .build();
087
088        /** Message when generating performance badges. */
089        public static final LogRecord GENERATING_BADGES = LogRecordModel.builder()
090                .prefix(PREFIX)
091                .identifier(7)
092                .template("Generating performance badges for %s benchmarks")
093                .build();
094
095        /** Message when generating metrics. */
096        public static final LogRecord GENERATING_METRICS = LogRecordModel.builder()
097                .prefix(PREFIX)
098                .identifier(8)
099                .template("Generating performance metrics")
100                .build();
101
102        /** Message when generating HTML reports. */
103        public static final LogRecord GENERATING_REPORTS = LogRecordModel.builder()
104                .prefix(PREFIX)
105                .identifier(9)
106                .template("Generating HTML reports")
107                .build();
108
109        /** Message when generating GitHub Pages structure. */
110        public static final LogRecord GENERATING_GITHUB_PAGES = LogRecordModel.builder()
111                .prefix(PREFIX)
112                .identifier(10)
113                .template("Generating GitHub Pages deployment structure")
114                .build();
115
116        /** Message when writing benchmark summary. */
117        public static final LogRecord WRITING_SUMMARY = LogRecordModel.builder()
118                .prefix(PREFIX)
119                .identifier(11)
120                .template("Writing benchmark summary file")
121                .build();
122
123        /** Message when generating metrics JSON. */
124        public static final LogRecord GENERATING_METRICS_JSON = LogRecordModel.builder()
125                .prefix(PREFIX)
126                .identifier(12)
127                .template("Generating metrics JSON for %s benchmark results")
128                .build();
129
130        /** Message when metrics file is generated. */
131        public static final LogRecord METRICS_FILE_GENERATED = LogRecordModel.builder()
132                .prefix(PREFIX)
133                .identifier(13)
134                .template("Generated metrics file: %s")
135                .build();
136
137        /** Message when individual metric files are generated. */
138        public static final LogRecord INDIVIDUAL_METRICS_GENERATED = LogRecordModel.builder()
139                .prefix(PREFIX)
140                .identifier(14)
141                .template("Generated %s individual metric files")
142                .build();
143
144        /** Message when performance badge is generated. */
145        public static final LogRecord BADGE_GENERATED = LogRecordModel.builder()
146                .prefix(PREFIX)
147                .identifier(15)
148                .template("Generated %s badge: %s")
149                .build();
150
151        /** Message when GitHub Pages is being prepared. */
152        public static final LogRecord PREPARING_GITHUB_PAGES = LogRecordModel.builder()
153                .prefix(PREFIX)
154                .identifier(16)
155                .template("Preparing GitHub Pages deployment structure")
156                .build();
157
158        /** Message showing source directory. */
159        public static final LogRecord SOURCE_DIRECTORY = LogRecordModel.builder()
160                .prefix(PREFIX)
161                .identifier(17)
162                .template("Source: %s")
163                .build();
164
165        /** Message showing deploy directory. */
166        public static final LogRecord DEPLOY_DIRECTORY = LogRecordModel.builder()
167                .prefix(PREFIX)
168                .identifier(18)
169                .template("Deploy: %s")
170                .build();
171
172        /** Message when GitHub Pages is ready. */
173        public static final LogRecord GITHUB_PAGES_READY = LogRecordModel.builder()
174                .prefix(PREFIX)
175                .identifier(19)
176                .template("GitHub Pages deployment structure ready")
177                .build();
178
179        /** Message when generating index page. */
180        public static final LogRecord GENERATING_INDEX_PAGE = LogRecordModel.builder()
181                .prefix(PREFIX)
182                .identifier(20)
183                .template("Generating index page for %s benchmark results")
184                .build();
185
186        /** Message when index page is generated. */
187        public static final LogRecord INDEX_PAGE_GENERATED = LogRecordModel.builder()
188                .prefix(PREFIX)
189                .identifier(21)
190                .template("Generated index page: %s")
191                .build();
192
193        /** Message when generating trends page. */
194        public static final LogRecord GENERATING_TRENDS_PAGE = LogRecordModel.builder()
195                .prefix(PREFIX)
196                .identifier(22)
197                .template("Generating trends page")
198                .build();
199
200        /** Message when trends page is generated. */
201        public static final LogRecord TRENDS_PAGE_GENERATED = LogRecordModel.builder()
202                .prefix(PREFIX)
203                .identifier(23)
204                .template("Generated trends page: %s")
205                .build();
206
207        /** Message when detailed page is generated. */
208        public static final LogRecord DETAILED_PAGE_GENERATED = LogRecordModel.builder()
209                .prefix(PREFIX)
210                .identifier(2)
211                .template("Generated detailed page: %s")
212                .build();
213
214        /** Message when writing benchmark summary. */
215        public static final LogRecord WRITING_BENCHMARK_SUMMARY = LogRecordModel.builder()
216                .prefix(PREFIX)
217                .identifier(24)
218                .template("Writing benchmark summary for %s %s results")
219                .build();
220
221        /** Message when summary file is generated. */
222        public static final LogRecord SUMMARY_FILE_GENERATED = LogRecordModel.builder()
223                .prefix(PREFIX)
224                .identifier(25)
225                .template("Generated summary file: %s")
226                .build();
227
228        /** Message when JMH result file is copied to data directory. */
229        public static final LogRecord JMH_RESULT_COPIED = LogRecordModel.builder()
230                .prefix(PREFIX)
231                .identifier(26)
232                .template("Copied JMH result to data directory: %s")
233                .build();
234
235        /** Message when JWT validation micro benchmarks start with key cache initialized. */
236        public static final LogRecord JWT_BENCHMARKS_STARTING = LogRecordModel.builder()
237                .prefix(PREFIX)
238                .identifier(27)
239                .template("JWT validation micro benchmarks starting - Key cache initialized")
240                .build();
241
242        /** Message when RSA key pre-generation starts. */
243        public static final LogRecord KEY_PREGENERATION_STARTING = LogRecordModel.builder()
244                .prefix(PREFIX)
245                .identifier(28)
246                .template("BenchmarkKeyCache: Starting RSA key pre-generation...")
247                .build();
248
249        /** Message when RSA key pre-generation completes. */
250        public static final LogRecord KEY_PREGENERATION_COMPLETED = LogRecordModel.builder()
251                .prefix(PREFIX)
252                .identifier(29)
253                .template("BenchmarkKeyCache: Pre-generated keys for %s issuer configurations in %s ms")
254                .build();
255
256        /** Message when unified report generation starts. */
257        public static final LogRecord UNIFIED_REPORT_GENERATION_START = LogRecordModel.builder()
258                .prefix(PREFIX)
259                .identifier(30)
260                .template("Starting unified report generation")
261                .build();
262
263        /** Message when unified report generation completes. */
264        public static final LogRecord UNIFIED_REPORT_GENERATION_COMPLETE = LogRecordModel.builder()
265                .prefix(PREFIX)
266                .identifier(31)
267                .template("Unified report generation completed")
268                .build();
269
270        /** Message when generating data file. */
271        public static final LogRecord GENERATING_DATA_FILE = LogRecordModel.builder()
272                .prefix(PREFIX)
273                .identifier(32)
274                .template("Generating benchmark data JSON file")
275                .build();
276
277        /** Message when data file is generated. */
278        public static final LogRecord DATA_FILE_GENERATED = LogRecordModel.builder()
279                .prefix(PREFIX)
280                .identifier(33)
281                .template("Generated data file: %s")
282                .build();
283
284        /** Message when generating HTML files. */
285        public static final LogRecord GENERATING_HTML_FILES = LogRecordModel.builder()
286                .prefix(PREFIX)
287                .identifier(34)
288                .template("Generating HTML report files")
289                .build();
290
291        /** Message when HTML files are generated. */
292        public static final LogRecord HTML_FILES_GENERATED = LogRecordModel.builder()
293                .prefix(PREFIX)
294                .identifier(35)
295                .template("Generated HTML files in: %s")
296                .build();
297
298        /** Message when generating badges (unified). */
299        public static final LogRecord GENERATING_BADGES_UNIFIED = LogRecordModel.builder()
300                .prefix(PREFIX)
301                .identifier(36)
302                .template("Generating performance badges")
303                .build();
304
305        /** Message when badges are generated. */
306        public static final LogRecord BADGES_GENERATED = LogRecordModel.builder()
307                .prefix(PREFIX)
308                .identifier(37)
309                .template("Generated badges in: %s")
310                .build();
311
312        /** Message when generating API endpoints. */
313        public static final LogRecord GENERATING_API_ENDPOINTS = LogRecordModel.builder()
314                .prefix(PREFIX)
315                .identifier(38)
316                .template("Generating API endpoint files")
317                .build();
318
319        /** Message when API endpoints are generated. */
320        public static final LogRecord API_ENDPOINTS_GENERATED = LogRecordModel.builder()
321                .prefix(PREFIX)
322                .identifier(39)
323                .template("Generated API endpoints in: %s")
324                .build();
325
326        /** Message when copying Prometheus metrics. */
327        public static final LogRecord COPYING_PROMETHEUS_METRICS = LogRecordModel.builder()
328                .prefix(PREFIX)
329                .identifier(40)
330                .template("Copying Prometheus metrics to deployment directory")
331                .build();
332
333        /** Message when Prometheus metrics are copied. */
334        public static final LogRecord PROMETHEUS_METRICS_COPIED = LogRecordModel.builder()
335                .prefix(PREFIX)
336                .identifier(41)
337                .template("Copied Prometheus metrics to: %s")
338                .build();
339
340        /** Message when copying support files. */
341        public static final LogRecord COPYING_SUPPORT_FILES = LogRecordModel.builder()
342                .prefix(PREFIX)
343                .identifier(42)
344                .template("Copying support files (CSS, JS)")
345                .build();
346
347        /** Message when support files are copied. */
348        public static final LogRecord SUPPORT_FILES_COPIED = LogRecordModel.builder()
349                .prefix(PREFIX)
350                .identifier(43)
351                .template("Copied support files to: %s")
352                .build();
353
354        /** Message when key cache is initialized. */
355        public static final LogRecord KEY_CACHE_INITIALIZED = LogRecordModel.builder()
356                .prefix(PREFIX)
357                .identifier(44)
358                .template("BenchmarkKeyCache: Initialized with %s configurations")
359                .build();
360
361        /** Message when Quarkus JWT integration benchmarks start. */
362        public static final LogRecord QUARKUS_BENCHMARKS_STARTING = LogRecordModel.builder()
363                .prefix(PREFIX)
364                .identifier(45)
365                .template("Quarkus JWT integration benchmarks starting - Service: %s, Keycloak: %s")
366                .build();
367
368        /** Message when processing results starts. */
369        public static final LogRecord PROCESSING_RESULTS_STARTING = LogRecordModel.builder()
370                .prefix(PREFIX)
371                .identifier(46)
372                .template("QuarkusIntegrationRunner.processResults() - Starting with %s results")
373                .build();
374
375        /** Message when results are available. */
376        public static final LogRecord RESULTS_AVAILABLE = LogRecordModel.builder()
377                .prefix(PREFIX)
378                .identifier(47)
379                .template("Results available at: %s")
380                .build();
381
382        /** Message when starting to process WRK results. */
383        public static final LogRecord WRK_PROCESSING_START = LogRecordModel.builder()
384                .prefix(PREFIX)
385                .identifier(48)
386                .template("Start processing WRK results")
387                .build();
388
389        /** Message when JFR instrumented benchmarks start. */
390        public static final LogRecord JFR_BENCHMARKS_STARTING = LogRecordModel.builder()
391                .prefix(PREFIX)
392                .identifier(49)
393                .template("JFR-instrumented benchmarks starting - Key cache initialized")
394                .build();
395
396        /** Message when JFR recording will be saved. */
397        public static final LogRecord JFR_RECORDING_PATH = LogRecordModel.builder()
398                .prefix(PREFIX)
399                .identifier(50)
400                .template("JFR recording will be saved to: %s")
401                .build();
402
403        /** Message when JFR benchmark completed. */
404        public static final LogRecord JFR_BENCHMARK_COMPLETED = LogRecordModel.builder()
405                .prefix(PREFIX)
406                .identifier(51)
407                .template("JFR benchmark completed. To analyze variance:")
408                .build();
409
410        /** Message showing how to run variance analysis. */
411        public static final LogRecord JFR_VARIANCE_COMMAND = LogRecordModel.builder()
412                .prefix(PREFIX)
413                .identifier(52)
414                .template("java -cp \"target/classes:target/dependency/*\" de.cuioss.sheriff.oauth.core.benchmark.jfr.JfrVarianceAnalyzer %s")
415                .build();
416
417        /** Message when iteration windows are parsed from timestamp file. */
418        public static final LogRecord ITERATION_WINDOWS_PARSED = LogRecordModel.builder()
419                .prefix(PREFIX)
420                .identifier(53)
421                .template("Parsed %s iteration windows from %s")
422                .build();
423
424        /** Message when using precise timestamps for benchmark. */
425        public static final LogRecord USING_PRECISE_TIMESTAMPS = LogRecordModel.builder()
426                .prefix(PREFIX)
427                .identifier(54)
428                .template("Using precise timestamps for benchmark '%s': %s to %s")
429                .build();
430
431        /** Message when starting benchmark runner with configuration details. */
432        public static final LogRecord BENCHMARK_RUNNER_STARTING_WITH_DETAILS = LogRecordModel.builder()
433                .prefix(PREFIX)
434                .identifier(55)
435                .template("Starting CUI benchmark runner - Type: %s, Output: %s")
436                .build();
437
438        /** Message when benchmarks complete with artifact location. */
439        public static final LogRecord BENCHMARKS_COMPLETED_WITH_ARTIFACTS = LogRecordModel.builder()
440                .prefix(PREFIX)
441                .identifier(56)
442                .template("Benchmarks completed successfully with %s results, artifacts in %s")
443                .build();
444
445        /** Message when Prometheus metrics collection is enabled. */
446        public static final LogRecord PROMETHEUS_ENABLED = LogRecordModel.builder()
447                .prefix(PREFIX)
448                .identifier(57)
449                .template("Prometheus metrics collection enabled - URL: %s")
450                .build();
451
452        /** Message when Prometheus metrics collection is disabled. */
453        public static final LogRecord PROMETHEUS_DISABLED = LogRecordModel.builder()
454                .prefix(PREFIX)
455                .identifier(58)
456                .template("Prometheus metrics collection disabled - Prometheus not available at: %s")
457                .build();
458
459        /** Message when collecting real-time metrics from Prometheus. */
460        public static final LogRecord COLLECTING_PROMETHEUS_METRICS = LogRecordModel.builder()
461                .prefix(PREFIX)
462                .identifier(59)
463                .template("Collecting real-time metrics from Prometheus at: %s")
464                .build();
465
466        /** Message when collecting real-time metrics for WRK benchmark. */
467        public static final LogRecord COLLECTING_WRK_PROMETHEUS_METRICS = LogRecordModel.builder()
468                .prefix(PREFIX)
469                .identifier(60)
470                .template("Collecting real-time metrics for WRK benchmark '%s' from Prometheus")
471                .build();
472
473        /** Message when Prometheus metrics are saved. */
474        public static final LogRecord PROMETHEUS_METRICS_SAVED = LogRecordModel.builder()
475                .prefix(PREFIX)
476                .identifier(61)
477                .template("Prometheus metrics saved to: %s/%s%s")
478                .build();
479
480        /** Message when using session timestamps for benchmark. */
481        public static final LogRecord USING_SESSION_TIMESTAMPS = LogRecordModel.builder()
482                .prefix(PREFIX)
483                .identifier(62)
484                .template("Using session timestamps for benchmark '%s': %s to %s")
485                .build();
486
487        /** Message when collecting Prometheus metrics for benchmark. */
488        public static final LogRecord COLLECTING_BENCHMARK_METRICS = LogRecordModel.builder()
489                .prefix(PREFIX)
490                .identifier(63)
491                .template("Collecting Prometheus metrics for benchmark '%s'")
492                .build();
493
494        /** Message when collecting real-time metrics for benchmark with time range. */
495        public static final LogRecord COLLECTING_REALTIME_METRICS = LogRecordModel.builder()
496                .prefix(PREFIX)
497                .identifier(64)
498                .template("Collecting real-time metrics for benchmark '%s' from %s to %s")
499                .build();
500
501        /** Message when real-time metrics are exported. */
502        public static final LogRecord REALTIME_METRICS_EXPORTED = LogRecordModel.builder()
503                .prefix(PREFIX)
504                .identifier(65)
505                .template("Exported real-time metrics for '%s' to: %s")
506                .build();
507
508        /** Message when HTTP client is created. */
509        public static final LogRecord HTTP_CLIENT_CREATED = LogRecordModel.builder()
510                .prefix(PREFIX)
511                .identifier(66)
512                .template("Created Java HttpClient with version: %s, timeout: %ss")
513                .build();
514
515        /** Message when using HTTP/1.1. */
516        public static final LogRecord USING_HTTP_1_1 = LogRecordModel.builder()
517                .prefix(PREFIX)
518                .identifier(67)
519                .template("Using HTTP/1.1 only (configured via -D%s=http1)")
520                .build();
521
522        /** Message when using HTTP/2. */
523        public static final LogRecord USING_HTTP_2 = LogRecordModel.builder()
524                .prefix(PREFIX)
525                .identifier(68)
526                .template("Using HTTP/2 (default or -D%s=http2)")
527                .build();
528
529        /** Message when Prometheus connectivity advice is given. */
530        public static final LogRecord PROMETHEUS_CONNECTIVITY_ADVICE = LogRecordModel.builder()
531                .prefix(PREFIX)
532                .identifier(69)
533                .template("Ensure Prometheus is running and accessible. You can verify with: curl %s/api/v1/query?query=up")
534                .build();
535
536        /** Message when using external history directory. */
537        public static final LogRecord USING_EXTERNAL_HISTORY_DIR = LogRecordModel.builder()
538                .prefix(PREFIX)
539                .identifier(70)
540                .template("Using external history directory: %s")
541                .build();
542
543        /** Message when history directory not found. */
544        public static final LogRecord HISTORY_DIR_NOT_FOUND = LogRecordModel.builder()
545                .prefix(PREFIX)
546                .identifier(71)
547                .template("History directory not found: %s")
548                .build();
549
550        /** Message when benchmark data is archived. */
551        public static final LogRecord ARCHIVED_BENCHMARK_DATA = LogRecordModel.builder()
552                .prefix(PREFIX)
553                .identifier(72)
554                .template("Archived benchmark data to %s")
555                .build();
556
557        /** Message when old history file is removed. */
558        public static final LogRecord REMOVED_HISTORY_FILE = LogRecordModel.builder()
559                .prefix(PREFIX)
560                .identifier(73)
561                .template("Removed old history file: %s")
562                .build();
563
564    }
565
566    /**
567     * WARN level messages for potential issues.
568     */
569    public static final class WARN {
570
571        /** Private constructor to prevent instantiation. */
572        private WARN() {
573            // utility class
574        }
575
576        /** Warning when failed to copy HTML file. */
577        public static final LogRecord FAILED_COPY_HTML = LogRecordModel.builder()
578                .prefix(PREFIX)
579                .identifier(100)
580                .template("Failed to copy HTML file: %s")
581                .build();
582
583        /** Warning when failed to copy badge file. */
584        public static final LogRecord FAILED_COPY_BADGE = LogRecordModel.builder()
585                .prefix(PREFIX)
586                .identifier(101)
587                .template("Failed to copy badge file: %s")
588                .build();
589
590        /** Warning when failed to copy data file. */
591        public static final LogRecord FAILED_COPY_DATA = LogRecordModel.builder()
592                .prefix(PREFIX)
593                .identifier(102)
594                .template("Failed to copy data file: %s")
595                .build();
596
597        /** Warning for issues during index generation or processing. */
598        public static final LogRecord ISSUE_DURING_INDEX_GENERATION = LogRecordModel.builder()
599                .prefix(PREFIX)
600                .identifier(103)
601                .template("Issue during %s")
602                .build();
603
604        /** Warning when key cache miss occurs during benchmark. */
605        public static final LogRecord KEY_CACHE_MISS = LogRecordModel.builder()
606                .prefix(PREFIX)
607                .identifier(104)
608                .template("BenchmarkKeyCache miss for count=%s. Generating keys during benchmark!")
609                .build();
610
611        /** Warning when invalid metrics data type. */
612        public static final LogRecord INVALID_METRICS_TYPE = LogRecordModel.builder()
613                .prefix(PREFIX)
614                .identifier(105)
615                .template("Invalid metrics data type: expected TokenValidatorMonitor, got %s")
616                .build();
617
618        /** Warning when timestamp file does not exist. */
619        public static final LogRecord TIMESTAMP_FILE_NOT_EXIST = LogRecordModel.builder()
620                .prefix(PREFIX)
621                .identifier(106)
622                .template("Timestamp file does not exist: %s")
623                .build();
624
625        /** Warning when failed to parse timestamp line. */
626        public static final LogRecord FAILED_PARSE_TIMESTAMP_LINE = LogRecordModel.builder()
627                .prefix(PREFIX)
628                .identifier(107)
629                .template("Failed to parse timestamp line: %s")
630                .build();
631
632        /** Warning when failed to parse timestamp file. */
633        public static final LogRecord FAILED_PARSE_TIMESTAMP_FILE = LogRecordModel.builder()
634                .prefix(PREFIX)
635                .identifier(108)
636                .template("Failed to parse timestamp file, using session-wide timestamps: %s")
637                .build();
638
639        /** Warning when no timestamp data found for benchmark. */
640        public static final LogRecord NO_TIMESTAMP_DATA = LogRecordModel.builder()
641                .prefix(PREFIX)
642                .identifier(109)
643                .template("No timestamp data found for benchmark '%s', using session timestamps")
644                .build();
645
646        /** Warning when no measurement windows found for benchmark. */
647        public static final LogRecord NO_MEASUREMENT_WINDOWS = LogRecordModel.builder()
648                .prefix(PREFIX)
649                .identifier(110)
650                .template("No measurement windows found for benchmark '%s', using session timestamps")
651                .build();
652
653        /** Warning when failed to query metric. */
654        public static final LogRecord FAILED_QUERY_METRIC = LogRecordModel.builder()
655                .prefix(PREFIX)
656                .identifier(111)
657                .template("Failed to query metric '%s': %s")
658                .build();
659
660        /** Warning when overwriting existing start time. */
661        public static final LogRecord OVERWRITING_START_TIME = LogRecordModel.builder()
662                .prefix(PREFIX)
663                .identifier(112)
664                .template("Overwriting existing start time for benchmark: %s")
665                .build();
666
667        /** Warning when invalid timestamps detected. */
668        public static final LogRecord INVALID_TIMESTAMPS = LogRecordModel.builder()
669                .prefix(PREFIX)
670                .identifier(113)
671                .template("Invalid timestamps for benchmark '%s': start=%s, end=%s")
672                .build();
673
674        /** Warning when failed to collect Prometheus metrics. */
675        public static final LogRecord FAILED_COLLECT_PROMETHEUS = LogRecordModel.builder()
676                .prefix(PREFIX)
677                .identifier(114)
678                .template("Failed to collect Prometheus metrics: %s")
679                .build();
680
681        /** Warning when skipping Prometheus metrics collection. */
682        public static final LogRecord SKIPPING_PROMETHEUS_COLLECTION = LogRecordModel.builder()
683                .prefix(PREFIX)
684                .identifier(115)
685                .template("Skipping Prometheus metrics collection - Prometheus not available at URL: %s")
686                .build();
687
688        /** Warning when cannot collect metrics due to missing timestamps. */
689        public static final LogRecord MISSING_TIMESTAMPS_FOR_COLLECTION = LogRecordModel.builder()
690                .prefix(PREFIX)
691                .identifier(116)
692                .template("Cannot collect metrics for benchmark '%s' - missing timestamps")
693                .build();
694
695        /** Warning when no valid timestamps found. */
696        public static final LogRecord NO_VALID_TIMESTAMPS = LogRecordModel.builder()
697                .prefix(PREFIX)
698                .identifier(117)
699                .template("No valid timestamps found for benchmark '%s', skipping metrics collection. Available timestamps: %s")
700                .build();
701
702        /** Warning when failed to collect metrics for benchmark. */
703        public static final LogRecord FAILED_COLLECT_BENCHMARK_METRICS = LogRecordModel.builder()
704                .prefix(PREFIX)
705                .identifier(118)
706                .template("Failed to collect metrics for benchmark '%s': %s")
707                .build();
708
709        /** Warning when failed to create target directory. */
710        public static final LogRecord FAILED_CREATE_TARGET_DIR = LogRecordModel.builder()
711                .prefix(PREFIX)
712                .identifier(119)
713                .template("Failed to create target directory: %s")
714                .build();
715
716        /** Warning when failed to read existing metrics file. */
717        public static final LogRecord FAILED_READ_METRICS_FILE = LogRecordModel.builder()
718                .prefix(PREFIX)
719                .identifier(120)
720                .template("Failed to read existing metrics file %s: %s")
721                .build();
722
723        /** Warning when failed to delete corrupted metrics file. */
724        public static final LogRecord FAILED_DELETE_CORRUPTED_FILE = LogRecordModel.builder()
725                .prefix(PREFIX)
726                .identifier(121)
727                .template("Failed to delete corrupted metrics file")
728                .build();
729
730        /** Warning when unknown result format detected. */
731        public static final LogRecord UNKNOWN_RESULT_FORMAT = LogRecordModel.builder()
732                .prefix(PREFIX)
733                .identifier(122)
734                .template("Unknown result format: %s, defaulting to JSON")
735                .build();
736
737        /** Warning when unknown time unit detected. */
738        public static final LogRecord UNKNOWN_TIME_UNIT = LogRecordModel.builder()
739                .prefix(PREFIX)
740                .identifier(123)
741                .template("Unknown time unit '%s' in '%s', defaulting to seconds")
742                .build();
743
744        /** Warning when token pool is empty. */
745        public static final LogRecord TOKEN_POOL_EMPTY = LogRecordModel.builder()
746                .prefix(PREFIX)
747                .identifier(124)
748                .template("Token pool is empty, fetching single token")
749                .build();
750
751        /** Warning when issue parsing history file. */
752        public static final LogRecord ISSUE_PARSING_HISTORY_FILE = LogRecordModel.builder()
753                .prefix(PREFIX)
754                .identifier(125)
755                .template("Issue during parsing history file: %s")
756                .build();
757    }
758
759    /**
760     * ERROR level messages for serious failures.
761     */
762    public static final class ERROR {
763
764        /** Private constructor to prevent instantiation. */
765        private ERROR() {
766            // utility class
767        }
768
769        /** Error when export of benchmark metrics fails. */
770        public static final LogRecord EXPORT_FAILED = LogRecordModel.builder()
771                .prefix(PREFIX)
772                .identifier(200)
773                .template("Failed to export benchmark metrics")
774                .build();
775
776        /** Error when WRK result processor fails. */
777        public static final LogRecord WRK_PROCESSOR_FAILED = LogRecordModel.builder()
778                .prefix(PREFIX)
779                .identifier(201)
780                .template("Failed to execute WRK result processor")
781                .build();
782
783        /** Error when WRK usage is incorrect. */
784        public static final LogRecord WRK_USAGE_ERROR = LogRecordModel.builder()
785                .prefix(PREFIX)
786                .identifier(202)
787                .template("Usage: WrkResultPostProcessor <input-dir> [output-dir]")
788                .build();
789
790        /** Error when no WRK output files found. */
791        public static final LogRecord NO_WRK_FILES = LogRecordModel.builder()
792                .prefix(PREFIX)
793                .identifier(203)
794                .template("No WRK output files found in: %s")
795                .build();
796
797        /** Error when WRK output directory does not exist. */
798        public static final LogRecord WRK_DIR_NOT_EXIST = LogRecordModel.builder()
799                .prefix(PREFIX)
800                .identifier(204)
801                .template("WRK output directory does not exist: %s")
802                .build();
803
804        /** Error when no benchmark data extracted. */
805        public static final LogRecord NO_BENCHMARK_DATA = LogRecordModel.builder()
806                .prefix(PREFIX)
807                .identifier(205)
808                .template("No benchmark data extracted from WRK output files")
809                .build();
810
811        /** Error when cannot collect Prometheus metrics. */
812        public static final LogRecord NO_PROMETHEUS_METADATA = LogRecordModel.builder()
813                .prefix(PREFIX)
814                .identifier(206)
815                .template("Cannot collect Prometheus metrics: no benchmark metadata available")
816                .build();
817
818        /** Error when no metadata found for benchmark. */
819        public static final LogRecord NO_METADATA_FOR_BENCHMARK = LogRecordModel.builder()
820                .prefix(PREFIX)
821                .identifier(207)
822                .template("No metadata found for benchmark: %s")
823                .build();
824
825        /** Error when failed to copy Prometheus metrics file. */
826        public static final LogRecord FAILED_COPY_PROMETHEUS = LogRecordModel.builder()
827                .prefix(PREFIX)
828                .identifier(208)
829                .template("Failed to copy Prometheus metrics file: %s")
830                .build();
831
832        /** Error when failed to copy Prometheus metrics to deployment directory. */
833        public static final LogRecord FAILED_COPY_PROMETHEUS_DIR = LogRecordModel.builder()
834                .prefix(PREFIX)
835                .identifier(209)
836                .template("Failed to copy Prometheus metrics to deployment directory")
837                .build();
838
839        /** Error when missing timestamps in results. */
840        public static final LogRecord MISSING_TIMESTAMPS = LogRecordModel.builder()
841                .prefix(PREFIX)
842                .identifier(210)
843                .template("Missing start or end timestamp in result file: %s")
844                .build();
845
846        /** Error when failed to parse metadata. */
847        public static final LogRecord FAILED_PARSE_METADATA = LogRecordModel.builder()
848                .prefix(PREFIX)
849                .identifier(211)
850                .template("Failed to parse metadata from %s: %s")
851                .build();
852
853        /** Error when incomplete metadata found. */
854        public static final LogRecord INCOMPLETE_METADATA = LogRecordModel.builder()
855                .prefix(PREFIX)
856                .identifier(212)
857                .template("Incomplete metadata in file %s (name=%s, start=%s, end=%s)")
858                .build();
859
860        /** Error when failed to collect Prometheus metrics for benchmark. */
861        public static final LogRecord FAILED_COLLECT_PROMETHEUS_BENCHMARK = LogRecordModel.builder()
862                .prefix(PREFIX)
863                .identifier(213)
864                .template("Failed to collect Prometheus metrics for benchmark '%s' from URL: %s")
865                .build();
866
867        /** Error when Prometheus connectivity check failed. */
868        public static final LogRecord PROMETHEUS_CONNECTIVITY_FAILED = LogRecordModel.builder()
869                .prefix(PREFIX)
870                .identifier(214)
871                .template("Prometheus connectivity check failed at URL: %s - Error: %s (%s)")
872                .build();
873
874        /** Error when failed to collect real-time Prometheus metrics. */
875        public static final LogRecord FAILED_COLLECT_REALTIME_PROMETHEUS = LogRecordModel.builder()
876                .prefix(PREFIX)
877                .identifier(215)
878                .template("Failed to collect Prometheus metrics for benchmark '%s': %s")
879                .build();
880
881        /** Error when failed to fetch token. */
882        public static final LogRecord FAILED_FETCH_TOKEN = LogRecordModel.builder()
883                .prefix(PREFIX)
884                .identifier(216)
885                .template("Failed to fetch token. Status: %s, Body: %s")
886                .build();
887
888        /** Error when failed to parse WRK file. */
889        public static final LogRecord FAILED_PARSE_WRK_FILE = LogRecordModel.builder()
890                .prefix(PREFIX)
891                .identifier(217)
892                .template("Failed to parse WRK file: %s")
893                .build();
894
895        /** Error for JfrVarianceAnalyzer usage. */
896        public static final LogRecord JFR_VARIANCE_USAGE = LogRecordModel.builder()
897                .prefix(PREFIX)
898                .identifier(218)
899                .template("Usage: JfrVarianceAnalyzer <path-to-jfr-file>")
900                .build();
901    }
902
903}