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}