├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── feature_request.md │ └── question.md └── PULL_REQUEST_TEMPLATE.md ├── .gitignore ├── .vscode └── settings.json ├── API-proposed.yaml ├── API.yaml ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── SECURITY.md ├── VERSIONING_STRATEGY.md ├── openapi.license ├── openapi.py └── requirements.txt /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug Report (except security vulnerabilities) 3 | about: Create a report to help us improve 4 | --- 5 | 6 | 7 | 8 | 9 | 10 | 11 | ### Bug Description: 12 | 13 | 14 | ### Steps to Reproduce: 15 | 16 | 1. 17 | 2. 18 | 3. 19 | 20 | 21 | 22 | 23 | ### Additional Information 24 | 25 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature Request 3 | about: Propose an idea for the project 4 | --- 5 | 6 | 7 | 8 | 9 | ### Feature Description: 10 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/question.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Question 3 | about: Ask a question related to the content of this repository 4 | --- 5 | 6 | 7 | 8 | 9 | ### Your question: 10 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 11 | 12 | ### What it does 13 | 14 | 15 | 16 | ### How to test 17 | 18 | 19 | 20 | ### Follow-ups 21 | 22 | 23 | 24 | ### Review checklist 25 | 26 | - [ ] As an author, I have thoroughly tested my changes and carefully followed the instructions in this template 27 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /.venv/ 2 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "python.formatting.provider": "autopep8", 3 | "python.linting.enabled": true, 4 | "python.linting.pylintEnabled": true 5 | } -------------------------------------------------------------------------------- /API.yaml: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Copyright (c) 2018, 2024 Ericsson 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | ############################################################################### 16 | openapi: 3.0.1 17 | info: 18 | title: Trace Server Protocol 19 | description: "Open source REST API for viewing and analyzing any type of logs or\ 20 | \ traces. Its goal is to provide models to populate views, graphs, metrics, and\ 21 | \ more to help extract useful information from traces, in a way that is more user-friendly\ 22 | \ and informative than huge text dumps." 23 | termsOfService: https://www.eclipse.org/tracecompass/ 24 | contact: 25 | email: tracecompass-dev@eclipse.org 26 | license: 27 | name: Apache 2 28 | url: http://www.apache.org/licenses/ 29 | version: 0.3.1 30 | servers: 31 | - url: https://localhost:8080/tsp/api 32 | tags: 33 | - name: Annotations 34 | description: Retrieve annotations for different outputs. 35 | - name: Bookmarks 36 | description: Bookmark areas of interest in the experiment. 37 | - name: Configurations 38 | description: Manage configuration source types and configurations. 39 | - name: Diagnostic 40 | description: Retrieve the server's status. 41 | - name: Data Tree 42 | description: Query data tree models (e.g. for statistics). 43 | - name: Experiments 44 | description: "Manage experiments on your server; an experiment represents a collection\ 45 | \ of traces, which can produce output models." 46 | - name: Identifier 47 | description: Retrieve information about the server and the system it is running 48 | on. 49 | - name: Output Configurations 50 | description: Manage configuration source types and configurations for given outputs. 51 | - name: Styles 52 | description: Retrieve styles for different outputs. 53 | - name: TimeGraph 54 | description: Query Time Graph models. 55 | - name: Traces 56 | description: Manage physical traces on your server. 57 | - name: Virtual Tables 58 | description: Query virtual table models (e.g. Events Table). 59 | - name: XY 60 | description: Query XY chart models. 61 | paths: 62 | /experiments/{expUUID}/bookmarks: 63 | get: 64 | tags: 65 | - Bookmarks 66 | summary: Get all bookmarks for an experiment 67 | operationId: getBookmarks 68 | parameters: 69 | - name: expUUID 70 | in: path 71 | description: UUID of the experiment to query 72 | required: true 73 | schema: 74 | type: string 75 | format: uuid 76 | responses: 77 | "200": 78 | description: Returns the list of bookmarks 79 | content: 80 | application/json: 81 | schema: 82 | type: array 83 | items: 84 | $ref: '#/components/schemas/Bookmark' 85 | "404": 86 | description: No such experiment 87 | content: 88 | application/json: 89 | schema: 90 | type: string 91 | post: 92 | tags: 93 | - Bookmarks 94 | summary: Create a new bookmark in an experiment 95 | operationId: createBookmark 96 | parameters: 97 | - name: expUUID 98 | in: path 99 | description: UUID of the experiment to query 100 | required: true 101 | schema: 102 | type: string 103 | format: uuid 104 | requestBody: 105 | content: 106 | application/json: 107 | schema: 108 | $ref: '#/components/schemas/BookmarkQueryParameters' 109 | required: true 110 | responses: 111 | "200": 112 | description: Bookmark created successfully 113 | content: 114 | application/json: 115 | schema: 116 | $ref: '#/components/schemas/Bookmark' 117 | "400": 118 | description: Invalid query parameters 119 | content: 120 | application/json: 121 | schema: 122 | type: string 123 | "404": 124 | description: No such experiment 125 | content: 126 | application/json: 127 | schema: 128 | type: string 129 | /experiments/{expUUID}/bookmarks/{bookmarkUUID}: 130 | get: 131 | tags: 132 | - Bookmarks 133 | summary: Get a specific bookmark from an experiment 134 | operationId: getBookmark 135 | parameters: 136 | - name: expUUID 137 | in: path 138 | description: UUID of the experiment to query 139 | required: true 140 | schema: 141 | type: string 142 | format: uuid 143 | - name: bookmarkUUID 144 | in: path 145 | description: Bookmark UUID 146 | required: true 147 | schema: 148 | type: string 149 | format: uuid 150 | responses: 151 | "200": 152 | description: Returns the bookmark 153 | content: 154 | application/json: 155 | schema: 156 | $ref: '#/components/schemas/Bookmark' 157 | "404": 158 | description: Experiment or bookmark not found 159 | content: 160 | application/json: 161 | schema: 162 | type: string 163 | put: 164 | tags: 165 | - Bookmarks 166 | summary: Update an existing bookmark in an experiment 167 | operationId: updateBookmark 168 | parameters: 169 | - name: expUUID 170 | in: path 171 | description: UUID of the experiment to query 172 | required: true 173 | schema: 174 | type: string 175 | format: uuid 176 | - name: bookmarkUUID 177 | in: path 178 | description: Bookmark UUID 179 | required: true 180 | schema: 181 | type: string 182 | format: uuid 183 | requestBody: 184 | content: 185 | application/json: 186 | schema: 187 | $ref: '#/components/schemas/BookmarkQueryParameters' 188 | required: true 189 | responses: 190 | "200": 191 | description: Bookmark updated successfully 192 | content: 193 | application/json: 194 | schema: 195 | $ref: '#/components/schemas/Bookmark' 196 | "400": 197 | description: Invalid query parameters 198 | content: 199 | application/json: 200 | schema: 201 | type: string 202 | "404": 203 | description: Experiment or bookmark not found 204 | content: 205 | application/json: 206 | schema: 207 | type: string 208 | delete: 209 | tags: 210 | - Bookmarks 211 | summary: Delete a bookmark from an experiment 212 | operationId: deleteBookmark 213 | parameters: 214 | - name: expUUID 215 | in: path 216 | description: UUID of the experiment to query 217 | required: true 218 | schema: 219 | type: string 220 | format: uuid 221 | - name: bookmarkUUID 222 | in: path 223 | description: Bookmark UUID 224 | required: true 225 | schema: 226 | type: string 227 | format: uuid 228 | responses: 229 | "200": 230 | description: Bookmark deleted successfully 231 | content: 232 | application/json: 233 | schema: 234 | $ref: '#/components/schemas/Bookmark' 235 | "404": 236 | description: Experiment or bookmark not found 237 | content: 238 | application/json: 239 | schema: 240 | type: string 241 | /config/types/{typeId}/configs/{configId}: 242 | get: 243 | tags: 244 | - Configurations 245 | summary: Get a configuration instance of a given configuration source type 246 | operationId: getConfiguration 247 | parameters: 248 | - name: typeId 249 | in: path 250 | description: The configuration source type ID 251 | required: true 252 | schema: 253 | type: string 254 | - name: configId 255 | in: path 256 | description: The configuration instance ID 257 | required: true 258 | schema: 259 | type: string 260 | responses: 261 | "200": 262 | description: Get a configuration instance 263 | content: 264 | application/json: 265 | schema: 266 | $ref: '#/components/schemas/Configuration' 267 | "404": 268 | description: No such configuration source type or configuration instance 269 | content: 270 | application/json: 271 | schema: 272 | type: string 273 | put: 274 | tags: 275 | - Configurations 276 | summary: Update a configuration instance of a given configuration source type 277 | operationId: putConfiguration 278 | parameters: 279 | - name: typeId 280 | in: path 281 | description: The configuration source type ID 282 | required: true 283 | schema: 284 | type: string 285 | - name: configId 286 | in: path 287 | description: The configuration instance ID 288 | required: true 289 | schema: 290 | type: string 291 | requestBody: 292 | description: Query parameters to update a configuration instance. Provide 293 | all query parameter keys and values as specified in the corresponding configuration 294 | source type. 295 | content: 296 | application/json: 297 | schema: 298 | $ref: '#/components/schemas/ConfigurationQueryParameters' 299 | example: 300 | name: test.xml 301 | description: Configuration with test.xml 302 | parameters: 303 | path: /home/user/test.xml 304 | required: true 305 | responses: 306 | "200": 307 | description: The configuration instance was successfully updated 308 | content: 309 | application/json: 310 | schema: 311 | $ref: '#/components/schemas/Configuration' 312 | "400": 313 | description: Invalid query parameters 314 | content: 315 | application/json: 316 | schema: 317 | type: string 318 | "404": 319 | description: No such configuration source type or configuration instance 320 | content: 321 | application/json: 322 | schema: 323 | type: string 324 | "500": 325 | description: Internal trace-server error while trying to update configuration 326 | instance 327 | content: 328 | application/json: 329 | schema: 330 | type: string 331 | delete: 332 | tags: 333 | - Configurations 334 | summary: Delete a configuration instance of a given configuration source type 335 | operationId: deleteConfiguration 336 | parameters: 337 | - name: typeId 338 | in: path 339 | description: The configuration source type ID 340 | required: true 341 | schema: 342 | type: string 343 | - name: configId 344 | in: path 345 | description: The configuration instance ID 346 | required: true 347 | schema: 348 | type: string 349 | responses: 350 | "200": 351 | description: The configuration instance was successfully deleted 352 | content: 353 | application/json: 354 | schema: 355 | $ref: '#/components/schemas/Configuration' 356 | "404": 357 | description: No such configuration source type or configuration instance 358 | content: 359 | application/json: 360 | schema: 361 | type: string 362 | "500": 363 | description: Internal trace-server error while trying to delete configuration 364 | instance 365 | content: 366 | application/json: 367 | schema: 368 | type: string 369 | /config/types/{typeId}: 370 | get: 371 | tags: 372 | - Configurations 373 | summary: Get a single configuration source type defined on the server 374 | operationId: getConfigurationType 375 | parameters: 376 | - name: typeId 377 | in: path 378 | description: The configuration source type ID 379 | required: true 380 | schema: 381 | type: string 382 | responses: 383 | "200": 384 | description: Returns a single configuration source type 385 | content: 386 | application/json: 387 | schema: 388 | $ref: '#/components/schemas/ConfigurationSourceType' 389 | /config/types: 390 | get: 391 | tags: 392 | - Configurations 393 | summary: Get the list of configuration source types defined on the server 394 | operationId: getConfigurationTypes 395 | responses: 396 | "200": 397 | description: Returns a list of configuration source types 398 | content: 399 | application/json: 400 | schema: 401 | type: array 402 | items: 403 | $ref: '#/components/schemas/ConfigurationSourceType' 404 | /config/types/{typeId}/configs: 405 | get: 406 | tags: 407 | - Configurations 408 | summary: Get the list of configurations that are instantiated of a given configuration 409 | source type 410 | operationId: getConfigurations 411 | parameters: 412 | - name: typeId 413 | in: path 414 | description: The configuration source type ID 415 | required: true 416 | schema: 417 | type: string 418 | responses: 419 | "200": 420 | description: 'Get the list of configuration descriptors ' 421 | content: 422 | application/json: 423 | schema: 424 | type: array 425 | items: 426 | $ref: '#/components/schemas/Configuration' 427 | "404": 428 | description: No such configuration source type or configuration instance 429 | content: 430 | application/json: 431 | schema: 432 | type: string 433 | post: 434 | tags: 435 | - Configurations 436 | summary: Create a configuration instance for the given configuration source 437 | type 438 | operationId: postConfiguration 439 | parameters: 440 | - name: typeId 441 | in: path 442 | description: The configuration source type ID 443 | required: true 444 | schema: 445 | type: string 446 | requestBody: 447 | description: Query parameters to create a configuration instance. Provide 448 | all query parameter keys and values as specified in the corresponding configuration 449 | source type. 450 | content: 451 | application/json: 452 | schema: 453 | $ref: '#/components/schemas/ConfigurationQueryParameters' 454 | example: 455 | name: test.xml 456 | description: Configuration with test.xml 457 | parameters: 458 | path: /home/user/test.xml 459 | required: true 460 | responses: 461 | "200": 462 | description: The configuration instance was successfully created 463 | content: 464 | application/json: 465 | schema: 466 | $ref: '#/components/schemas/Configuration' 467 | "400": 468 | description: Invalid query parameters 469 | content: 470 | application/json: 471 | schema: 472 | type: string 473 | "404": 474 | description: No such configuration source type or configuration instance 475 | content: 476 | application/json: 477 | schema: 478 | type: string 479 | "500": 480 | description: Internal trace-server error while trying to create configuration 481 | instance 482 | content: 483 | application/json: 484 | schema: 485 | type: string 486 | /experiments/{expUUID}/outputs/{outputId}: 487 | get: 488 | tags: 489 | - Experiments 490 | summary: Get the output descriptor for this experiment and output 491 | operationId: getProvider 492 | parameters: 493 | - name: expUUID 494 | in: path 495 | description: UUID of the experiment to query 496 | required: true 497 | schema: 498 | type: string 499 | format: uuid 500 | - name: outputId 501 | in: path 502 | description: ID of the output provider to query 503 | required: true 504 | schema: 505 | type: string 506 | responses: 507 | "200": 508 | description: Returns the output provider descriptor 509 | content: 510 | application/json: 511 | schema: 512 | $ref: '#/components/schemas/DataProvider' 513 | "404": 514 | description: Experiment or output provider not found 515 | content: 516 | application/json: 517 | schema: 518 | type: string 519 | post: 520 | tags: 521 | - Output Configurations 522 | summary: Get a derived data provider from a input configuration 523 | operationId: createProvider 524 | parameters: 525 | - name: expUUID 526 | in: path 527 | description: UUID of the experiment to query 528 | required: true 529 | schema: 530 | type: string 531 | format: uuid 532 | - name: outputId 533 | in: path 534 | description: ID of the output provider to create a derived output from 535 | required: true 536 | schema: 537 | type: string 538 | requestBody: 539 | description: Query parameters to create a configuration instance. Provide 540 | all query parameter keys and values as specified in the corresponding configuration 541 | source type. 542 | content: 543 | application/json: 544 | schema: 545 | $ref: '#/components/schemas/OutputConfigurationQueryParameters' 546 | example: 547 | name: Follow My-thread 548 | description: My-thread on even CPUs 549 | typeId: my.config.source.type.id 550 | parameters: 551 | threads: My-thread 552 | cpus: 553 | - 0 554 | - 2 555 | - 4 556 | - 6 557 | required: true 558 | responses: 559 | "200": 560 | description: Returns the derived data provider descriptor. 561 | content: 562 | application/json: 563 | schema: 564 | $ref: '#/components/schemas/DataProvider' 565 | "400": 566 | description: Invalid query parameters 567 | content: 568 | application/json: 569 | schema: 570 | type: string 571 | "404": 572 | description: "Experiment, output provider or configuration type not found" 573 | content: 574 | application/json: 575 | schema: 576 | type: string 577 | /experiments/{expUUID}/outputs/{outputId}/{derivedOutputId}: 578 | delete: 579 | tags: 580 | - Output Configurations 581 | summary: Delete a derived output (and its configuration). 582 | operationId: deleteDerivedProvider 583 | parameters: 584 | - name: expUUID 585 | in: path 586 | description: UUID of the experiment to query 587 | required: true 588 | schema: 589 | type: string 590 | format: uuid 591 | - name: outputId 592 | in: path 593 | description: ID of the parent output provider 594 | required: true 595 | schema: 596 | type: string 597 | - name: derivedOutputId 598 | in: path 599 | description: ID of the derived output provider 600 | required: true 601 | schema: 602 | type: string 603 | responses: 604 | "200": 605 | description: Returns the deleted derived data provider descriptor. The derived 606 | data provider (and its configuration) was successfully deleted. 607 | content: 608 | application/json: 609 | schema: 610 | $ref: '#/components/schemas/DataProvider' 611 | "400": 612 | description: Invalid query parameters 613 | content: 614 | application/json: 615 | schema: 616 | type: string 617 | "404": 618 | description: "Experiment, output provider or configuration type not found" 619 | content: 620 | application/json: 621 | schema: 622 | type: string 623 | /experiments/{expUUID}/outputs/{outputId}/annotations: 624 | get: 625 | tags: 626 | - Annotations 627 | summary: API to get annotation categories associated to this experiment and 628 | output 629 | operationId: getAnnotationCategories 630 | parameters: 631 | - name: expUUID 632 | in: path 633 | description: UUID of the experiment to query 634 | required: true 635 | schema: 636 | type: string 637 | format: uuid 638 | - name: outputId 639 | in: path 640 | description: ID of the output provider to query 641 | required: true 642 | schema: 643 | type: string 644 | - name: markerSetId 645 | in: query 646 | description: The optional requested marker set's id 647 | schema: 648 | type: string 649 | responses: 650 | "200": 651 | description: Annotation categories 652 | content: 653 | application/json: 654 | schema: 655 | $ref: '#/components/schemas/AnnotationCategoriesResponse' 656 | "400": 657 | description: Missing parameter outputId 658 | content: 659 | application/json: 660 | schema: 661 | type: string 662 | "404": 663 | description: Experiment or output provider not found 664 | content: 665 | application/json: 666 | schema: 667 | type: string 668 | "405": 669 | description: Analysis cannot run 670 | content: 671 | application/json: 672 | schema: 673 | type: string 674 | post: 675 | tags: 676 | - Annotations 677 | summary: API to get the annotations associated to this experiment and output 678 | operationId: getAnnotations 679 | parameters: 680 | - name: expUUID 681 | in: path 682 | description: UUID of the experiment to query 683 | required: true 684 | schema: 685 | type: string 686 | format: uuid 687 | - name: outputId 688 | in: path 689 | description: ID of the output provider to query 690 | required: true 691 | schema: 692 | type: string 693 | requestBody: 694 | description: "Query parameters to fetch the annotations. The object 'requested_timerange'\ 695 | \ is the requested time range and number of samples. The array 'requested_items'\ 696 | \ is the list of entryId being requested. The string 'requested_marker_set'\ 697 | \ is the optional requested marker set's id. The array 'requested_marker_categories'\ 698 | \ is the list of requested annotation categories; if absent, all annotations\ 699 | \ are returned." 700 | content: 701 | application/json: 702 | schema: 703 | $ref: '#/components/schemas/AnnotationsQueryParameters' 704 | example: 705 | parameters: 706 | requested_timerange: 707 | start: 111111111 708 | end: 222222222 709 | nbTimes: 1920 710 | requested_items: 711 | - 1 712 | - 2 713 | requested_marker_set: markerSetId 714 | requested_marker_categories: 715 | - category1 716 | - category2 717 | required: true 718 | responses: 719 | "200": 720 | description: Annotation 721 | content: 722 | application/json: 723 | schema: 724 | $ref: '#/components/schemas/AnnotationResponse' 725 | "400": 726 | description: Missing query parameters 727 | content: 728 | application/json: 729 | schema: 730 | type: string 731 | "404": 732 | description: Experiment or output provider not found 733 | content: 734 | application/json: 735 | schema: 736 | type: string 737 | "405": 738 | description: Analysis cannot run 739 | content: 740 | application/json: 741 | schema: 742 | type: string 743 | /experiments/{expUUID}/outputs/timeGraph/{outputId}/arrows: 744 | post: 745 | tags: 746 | - TimeGraph 747 | summary: API to get the Time Graph arrows 748 | description: "Unique entry point for all TimeGraph models, ensures that the\ 749 | \ same template is followed for all models" 750 | operationId: getArrows 751 | parameters: 752 | - name: expUUID 753 | in: path 754 | description: UUID of the experiment to query 755 | required: true 756 | schema: 757 | type: string 758 | format: uuid 759 | - name: outputId 760 | in: path 761 | description: ID of the output provider to query 762 | required: true 763 | schema: 764 | type: string 765 | requestBody: 766 | description: Query parameters to fetch the timegraph arrows. The object 'requested_timerange' 767 | is the requested time range and number of samples. 768 | content: 769 | application/json: 770 | schema: 771 | $ref: '#/components/schemas/ArrowsQueryParameters' 772 | example: 773 | parameters: 774 | requested_timerange: 775 | start: 111111111 776 | end: 222222222 777 | nbTimes: 1920 778 | required: true 779 | responses: 780 | "200": 781 | description: Returns a sampled list of TimeGraph arrows 782 | content: 783 | application/json: 784 | schema: 785 | $ref: '#/components/schemas/TimeGraphArrowsResponse' 786 | "400": 787 | description: Missing query parameters 788 | content: 789 | application/json: 790 | schema: 791 | type: string 792 | "404": 793 | description: Experiment or output provider not found 794 | content: 795 | application/json: 796 | schema: 797 | type: string 798 | "405": 799 | description: Analysis cannot run 800 | content: 801 | application/json: 802 | schema: 803 | type: string 804 | /experiments/{expUUID}/outputs/table/{outputId}/columns: 805 | post: 806 | tags: 807 | - Virtual Tables 808 | summary: API to get table columns 809 | description: "Unique entry point for output providers, to get the column entries" 810 | operationId: getColumns 811 | parameters: 812 | - name: expUUID 813 | in: path 814 | description: UUID of the experiment to query 815 | required: true 816 | schema: 817 | type: string 818 | format: uuid 819 | - name: outputId 820 | in: path 821 | description: ID of the output provider to query 822 | required: true 823 | schema: 824 | type: string 825 | requestBody: 826 | description: Query parameters to fetch the table columns 827 | content: 828 | application/json: 829 | schema: 830 | $ref: '#/components/schemas/OptionalQueryParameters' 831 | example: 832 | parameters: {} 833 | required: true 834 | responses: 835 | "200": 836 | description: Returns a list of table headers 837 | content: 838 | application/json: 839 | schema: 840 | $ref: '#/components/schemas/TableColumnHeadersResponse' 841 | "400": 842 | description: Invalid query parameters 843 | content: 844 | application/json: 845 | schema: 846 | type: string 847 | "404": 848 | description: Experiment or output provider not found 849 | content: 850 | application/json: 851 | schema: 852 | type: string 853 | "405": 854 | description: Analysis cannot run 855 | content: 856 | application/json: 857 | schema: 858 | type: string 859 | /experiments/{expUUID}/outputs/{outputId}/configTypes/{typeId}: 860 | get: 861 | tags: 862 | - Output Configurations 863 | summary: Get a single configuration source type defined on the server for a 864 | given data provider and experiment. 865 | operationId: getConfigurationType_1 866 | parameters: 867 | - name: expUUID 868 | in: path 869 | description: UUID of the experiment to query 870 | required: true 871 | schema: 872 | type: string 873 | format: uuid 874 | - name: outputId 875 | in: path 876 | description: ID of the output provider to query 877 | required: true 878 | schema: 879 | type: string 880 | - name: typeId 881 | in: path 882 | description: The configuration source type ID 883 | required: true 884 | schema: 885 | type: string 886 | responses: 887 | "200": 888 | description: Returns a single configuration source type 889 | content: 890 | application/json: 891 | schema: 892 | $ref: '#/components/schemas/ConfigurationSourceType' 893 | "400": 894 | description: Invalid query parameters 895 | content: 896 | application/json: 897 | schema: 898 | type: string 899 | "404": 900 | description: "Experiment, output provider or configuration type not found" 901 | content: 902 | application/json: 903 | schema: 904 | type: string 905 | /experiments/{expUUID}/outputs/{outputId}/configTypes: 906 | get: 907 | tags: 908 | - Output Configurations 909 | summary: Get the list of configuration types defined on the server for a given 910 | output and experiment 911 | operationId: getConfigurationTypes_1 912 | parameters: 913 | - name: expUUID 914 | in: path 915 | description: UUID of the experiment to query 916 | required: true 917 | schema: 918 | type: string 919 | format: uuid 920 | - name: outputId 921 | in: path 922 | description: ID of the output provider to query 923 | required: true 924 | schema: 925 | type: string 926 | responses: 927 | "200": 928 | description: Returns a list of configuration types that this output supports. 929 | content: 930 | application/json: 931 | schema: 932 | type: array 933 | items: 934 | $ref: '#/components/schemas/ConfigurationSourceType' 935 | "404": 936 | description: "Experiment, output provider or configuration type not found" 937 | content: 938 | application/json: 939 | schema: 940 | type: string 941 | /experiments/{expUUID}/outputs/data/{outputId}/tree: 942 | post: 943 | tags: 944 | - Data Tree 945 | summary: API to get the data tree 946 | description: "Unique entry point for output providers, to get the tree of visible\ 947 | \ entries" 948 | operationId: getDataTree 949 | parameters: 950 | - name: expUUID 951 | in: path 952 | description: UUID of the experiment to query 953 | required: true 954 | schema: 955 | type: string 956 | format: uuid 957 | - name: outputId 958 | in: path 959 | description: ID of the output provider to query 960 | required: true 961 | schema: 962 | type: string 963 | requestBody: 964 | description: Query parameters to fetch the data tree entries. The object 'requested_timerange' 965 | specifies the requested time range. When absent the tree for the full range 966 | is returned. 967 | content: 968 | application/json: 969 | schema: 970 | $ref: '#/components/schemas/TreeQueryParameters' 971 | example: 972 | parameters: 973 | requested_timerange: 974 | start: 111111111 975 | end: 222222222 976 | required: true 977 | responses: 978 | "200": 979 | description: "Returns a list of data tree entries. The returned model must\ 980 | \ be consistent, parentIds must refer to a parent which exists in the\ 981 | \ model." 982 | content: 983 | application/json: 984 | schema: 985 | $ref: '#/components/schemas/XYTreeResponse' 986 | "400": 987 | description: Invalid query parameters 988 | content: 989 | application/json: 990 | schema: 991 | type: string 992 | "404": 993 | description: Experiment or output provider not found 994 | content: 995 | application/json: 996 | schema: 997 | type: string 998 | "405": 999 | description: Analysis cannot run 1000 | content: 1001 | application/json: 1002 | schema: 1003 | type: string 1004 | /experiments/{expUUID}/outputs/table/{outputId}/lines: 1005 | post: 1006 | tags: 1007 | - Virtual Tables 1008 | summary: API to get virtual table lines 1009 | operationId: getLines 1010 | parameters: 1011 | - name: expUUID 1012 | in: path 1013 | description: UUID of the experiment to query 1014 | required: true 1015 | schema: 1016 | type: string 1017 | format: uuid 1018 | - name: outputId 1019 | in: path 1020 | description: ID of the output provider to query 1021 | required: true 1022 | schema: 1023 | type: string 1024 | requestBody: 1025 | description: "Query parameters to fetch the table lines. One of 'requested_table_index'\ 1026 | \ or 'requested_times' should be present. If 'requested_table_index' is\ 1027 | \ used it is the starting index of the lines to be returned. If 'requested_times'\ 1028 | \ is used it should contain an array with a single timestamp. The returned\ 1029 | \ lines starting at the given timestamp (or the nearest following) will\ 1030 | \ be returned. The 'requested_table_count' is the number of lines that should\ 1031 | \ be returned. When 'requested_table_column_ids' is absent all columns are\ 1032 | \ returned. When present it is the array of requested columnIds. Use 'table_search_expressions'\ 1033 | \ for search providing a map of . Returned\ 1034 | \ lines that match the search expression will be tagged. Use 'table_search_direction'\ 1035 | \ to specify search direction [NEXT, PREVIOUS]. If present, 'requested_table_count'\ 1036 | \ events are returned starting from the first matching event. Matching and\ 1037 | \ not matching events are returned. Matching events will be tagged. If no\ 1038 | \ matches are found, an empty list will be returned." 1039 | content: 1040 | application/json: 1041 | schema: 1042 | $ref: '#/components/schemas/LinesQueryParameters' 1043 | example: 1044 | parameters: 1045 | requested_table_index: 0 1046 | requested_table_count: 100 1047 | requested_table_column_ids: 1048 | - 0 1049 | - 1 1050 | - 2 1051 | table_search_expressions: 1052 | "1": cpu.* 1053 | table_search_direction: NEXT 1054 | required: true 1055 | responses: 1056 | "200": 1057 | description: Returns a table model with a 2D array of strings and metadata 1058 | content: 1059 | application/json: 1060 | schema: 1061 | $ref: '#/components/schemas/VirtualTableResponse' 1062 | "400": 1063 | description: Invalid query parameters 1064 | content: 1065 | application/json: 1066 | schema: 1067 | type: string 1068 | "404": 1069 | description: Experiment or output provider not found 1070 | content: 1071 | application/json: 1072 | schema: 1073 | type: string 1074 | "405": 1075 | description: Analysis cannot run 1076 | content: 1077 | application/json: 1078 | schema: 1079 | type: string 1080 | "500": 1081 | description: Error reading the experiment 1082 | content: 1083 | application/json: 1084 | schema: 1085 | type: string 1086 | /experiments/{expUUID}/outputs/markerSets: 1087 | get: 1088 | tags: 1089 | - Annotations 1090 | summary: API to get marker sets available for this experiment 1091 | operationId: getMarkerSets 1092 | parameters: 1093 | - name: expUUID 1094 | in: path 1095 | description: UUID of the experiment to query 1096 | required: true 1097 | schema: 1098 | type: string 1099 | format: uuid 1100 | responses: 1101 | "200": 1102 | description: List of marker sets 1103 | content: 1104 | application/json: 1105 | schema: 1106 | $ref: '#/components/schemas/MarkerSetsResponse' 1107 | "404": 1108 | description: Experiment or output provider not found 1109 | content: 1110 | application/json: 1111 | schema: 1112 | type: string 1113 | /experiments/{expUUID}/outputs: 1114 | get: 1115 | tags: 1116 | - Experiments 1117 | summary: Get the list of outputs for this experiment 1118 | operationId: getProviders 1119 | parameters: 1120 | - name: expUUID 1121 | in: path 1122 | description: UUID of the experiment to query 1123 | required: true 1124 | schema: 1125 | type: string 1126 | format: uuid 1127 | responses: 1128 | "200": 1129 | description: Returns a list of output provider descriptors 1130 | content: 1131 | application/json: 1132 | schema: 1133 | type: array 1134 | items: 1135 | $ref: '#/components/schemas/DataProvider' 1136 | "404": 1137 | description: Experiment or output provider not found 1138 | content: 1139 | application/json: 1140 | schema: 1141 | type: string 1142 | /experiments/{expUUID}/outputs/timeGraph/{outputId}/states: 1143 | post: 1144 | tags: 1145 | - TimeGraph 1146 | summary: API to get the Time Graph states 1147 | description: "Unique entry point for all TimeGraph states, ensures that the\ 1148 | \ same template is followed for all views" 1149 | operationId: getStates 1150 | parameters: 1151 | - name: expUUID 1152 | in: path 1153 | description: UUID of the experiment to query 1154 | required: true 1155 | schema: 1156 | type: string 1157 | format: uuid 1158 | - name: outputId 1159 | in: path 1160 | description: ID of the output provider to query 1161 | required: true 1162 | schema: 1163 | type: string 1164 | requestBody: 1165 | description: "Query parameters to fetch the timegraph states. The object 'requested_timerange'\ 1166 | \ is the requested time range and number of samples. The array 'requested_items'\ 1167 | \ is the list of entryId being requested. The object 'filter_query_parameters'\ 1168 | \ contains requests for search/filter queries. The object 'filter_expressions_map'\ 1169 | \ is the list of query requests, where the key 1 is DIMMED and 4 is EXCLUDED,\ 1170 | \ and the value is an array of the desired search query ('thread=1' or 'process=ls'\ 1171 | \ or 'duration>10ms'). The 'strategy' flag is an optional parameter within\ 1172 | \ 'filter_query_parameters', and if omitted then 'SAMPLED' search would\ 1173 | \ be the default value. If 'strategy' is set to 'DEEP' then the full time\ 1174 | \ range between the first and last requested timestamp should be searched\ 1175 | \ for filter matches. For timegraphs, only one matching state per gap in\ 1176 | \ requested timestamps needs to be returned in the response. If matches\ 1177 | \ to the queries from the 'filter_expressions_map' are found there'll be\ 1178 | \ a field 'tags' in 'states'. The TimeGraphState class has a bit-mask called\ 1179 | \ tags. If a state is supposed to be dimmed the tag will be the corresponding\ 1180 | \ bit set." 1181 | content: 1182 | application/json: 1183 | schema: 1184 | $ref: '#/components/schemas/RequestedQueryParameters' 1185 | example: 1186 | parameters: 1187 | requested_timerange: 1188 | start: 111111111 1189 | end: 222222222 1190 | nbTimes: 1920 1191 | requested_items: 1192 | - 1 1193 | - 2 1194 | filter_query_parameters: 1195 | strategy: SAMPLED 1196 | filter_expressions_map: 1197 | "1": 1198 | - openat 1199 | - duration>10ms 1200 | required: true 1201 | responses: 1202 | "200": 1203 | description: Returns a list of time graph rows 1204 | content: 1205 | application/json: 1206 | schema: 1207 | $ref: '#/components/schemas/TimeGraphStatesResponse' 1208 | "400": 1209 | description: Missing query parameters 1210 | content: 1211 | application/json: 1212 | schema: 1213 | type: string 1214 | "404": 1215 | description: Experiment or output provider not found 1216 | content: 1217 | application/json: 1218 | schema: 1219 | type: string 1220 | "405": 1221 | description: Analysis cannot run 1222 | content: 1223 | application/json: 1224 | schema: 1225 | type: string 1226 | /experiments/{expUUID}/outputs/{outputId}/style: 1227 | post: 1228 | tags: 1229 | - Styles 1230 | summary: API to get the style map associated to this experiment and output 1231 | operationId: getStyles 1232 | parameters: 1233 | - name: expUUID 1234 | in: path 1235 | description: UUID of the experiment to query 1236 | required: true 1237 | schema: 1238 | type: string 1239 | format: uuid 1240 | - name: outputId 1241 | in: path 1242 | description: ID of the output provider to query 1243 | required: true 1244 | schema: 1245 | type: string 1246 | requestBody: 1247 | description: Query parameters to fetch the style map 1248 | content: 1249 | application/json: 1250 | schema: 1251 | $ref: '#/components/schemas/OptionalQueryParameters' 1252 | example: 1253 | parameters: {} 1254 | required: true 1255 | responses: 1256 | "200": 1257 | description: Style model that can be used jointly with OutputElementStyle 1258 | to retrieve specific style values 1259 | content: 1260 | application/json: 1261 | schema: 1262 | $ref: '#/components/schemas/StylesResponse' 1263 | "400": 1264 | description: Missing query parameters 1265 | content: 1266 | application/json: 1267 | schema: 1268 | type: string 1269 | "404": 1270 | description: Experiment or output provider not found 1271 | content: 1272 | application/json: 1273 | schema: 1274 | type: string 1275 | "405": 1276 | description: Analysis cannot run 1277 | content: 1278 | application/json: 1279 | schema: 1280 | type: string 1281 | /experiments/{expUUID}/outputs/timeGraph/{outputId}/tooltip: 1282 | post: 1283 | tags: 1284 | - TimeGraph 1285 | summary: API to get a Time Graph tooltip 1286 | description: Endpoint to retrieve tooltips for time graph 1287 | operationId: getTimeGraphTooltip 1288 | parameters: 1289 | - name: expUUID 1290 | in: path 1291 | description: UUID of the experiment to query 1292 | required: true 1293 | schema: 1294 | type: string 1295 | format: uuid 1296 | - name: outputId 1297 | in: path 1298 | description: ID of the output provider to query 1299 | required: true 1300 | schema: 1301 | type: string 1302 | requestBody: 1303 | description: Query parameters to fetch the timegraph tooltip. The array 'requested_times' 1304 | is an array with a single timestamp. The array 'requested_items' is an array 1305 | with a single entryId being requested. The object 'requested_element' is 1306 | the element for which the tooltip is requested. 1307 | content: 1308 | application/json: 1309 | schema: 1310 | $ref: '#/components/schemas/TooltipQueryParameters' 1311 | example: 1312 | parameters: 1313 | requested_times: 1314 | - 111200000 1315 | requested_items: 1316 | - 1 1317 | requested_element: 1318 | elementType: state 1319 | time: 111100000 1320 | duration: 100000 1321 | required: true 1322 | responses: 1323 | "200": 1324 | description: Returns a list of tooltip keys to values 1325 | content: 1326 | application/json: 1327 | schema: 1328 | $ref: '#/components/schemas/TimeGraphTooltipResponse' 1329 | "400": 1330 | description: Missing query parameters 1331 | content: 1332 | application/json: 1333 | schema: 1334 | type: string 1335 | "404": 1336 | description: Experiment or output provider not found 1337 | content: 1338 | application/json: 1339 | schema: 1340 | type: string 1341 | "405": 1342 | description: Analysis cannot run 1343 | content: 1344 | application/json: 1345 | schema: 1346 | type: string 1347 | /experiments/{expUUID}/outputs/timeGraph/{outputId}/tree: 1348 | post: 1349 | tags: 1350 | - TimeGraph 1351 | summary: API to get the Time Graph tree 1352 | description: "Unique entry point for output providers, to get the tree of visible\ 1353 | \ entries" 1354 | operationId: getTimeGraphTree 1355 | parameters: 1356 | - name: expUUID 1357 | in: path 1358 | description: UUID of the experiment to query 1359 | required: true 1360 | schema: 1361 | type: string 1362 | format: uuid 1363 | - name: outputId 1364 | in: path 1365 | description: ID of the output provider to query 1366 | required: true 1367 | schema: 1368 | type: string 1369 | requestBody: 1370 | description: Query parameters to fetch the timegraph tree. The object 'requested_timerange' 1371 | specifies the requested time range. When absent the tree for the full range 1372 | is returned. 1373 | content: 1374 | application/json: 1375 | schema: 1376 | $ref: '#/components/schemas/TreeQueryParameters' 1377 | example: 1378 | parameters: 1379 | requested_timerange: 1380 | start: 111111111 1381 | end: 222222222 1382 | required: true 1383 | responses: 1384 | "200": 1385 | description: "Returns a list of Time Graph entries. The returned model must\ 1386 | \ be consistent, parentIds must refer to a parent which exists in the\ 1387 | \ model." 1388 | content: 1389 | application/json: 1390 | schema: 1391 | $ref: '#/components/schemas/TimeGraphTreeResponse' 1392 | "400": 1393 | description: Invalid query parameters 1394 | content: 1395 | application/json: 1396 | schema: 1397 | type: string 1398 | "404": 1399 | description: Experiment or output provider not found 1400 | content: 1401 | application/json: 1402 | schema: 1403 | type: string 1404 | "405": 1405 | description: Analysis cannot run 1406 | content: 1407 | application/json: 1408 | schema: 1409 | type: string 1410 | /experiments/{expUUID}/outputs/XY/{outputId}/xy: 1411 | post: 1412 | tags: 1413 | - XY 1414 | summary: API to get the XY model 1415 | description: "Unique endpoint for all xy models, ensures that the same template\ 1416 | \ is followed for all endpoints." 1417 | operationId: getXY 1418 | parameters: 1419 | - name: expUUID 1420 | in: path 1421 | description: UUID of the experiment to query 1422 | required: true 1423 | schema: 1424 | type: string 1425 | format: uuid 1426 | - name: outputId 1427 | in: path 1428 | description: ID of the output provider to query 1429 | required: true 1430 | schema: 1431 | type: string 1432 | requestBody: 1433 | description: Query parameters to fetch the XY model. The object 'requested_timerange' 1434 | is the requested time range and number of samples. The array 'requested_items' 1435 | is the list of entryId or seriesId being requested. 1436 | content: 1437 | application/json: 1438 | schema: 1439 | $ref: '#/components/schemas/RequestedQueryParameters' 1440 | example: 1441 | parameters: 1442 | requested_timerange: 1443 | start: 111111111 1444 | end: 222222222 1445 | nbTimes: 1920 1446 | requested_items: 1447 | - 1 1448 | - 2 1449 | required: true 1450 | responses: 1451 | "200": 1452 | description: Return the queried XYResponse 1453 | content: 1454 | application/json: 1455 | schema: 1456 | $ref: '#/components/schemas/XYResponse' 1457 | "400": 1458 | description: Missing query parameters 1459 | content: 1460 | application/json: 1461 | schema: 1462 | type: string 1463 | "404": 1464 | description: Experiment or output provider not found 1465 | content: 1466 | application/json: 1467 | schema: 1468 | type: string 1469 | "405": 1470 | description: Analysis cannot run 1471 | content: 1472 | application/json: 1473 | schema: 1474 | type: string 1475 | /experiments/{expUUID}/outputs/XY/{outputId}/tree: 1476 | post: 1477 | tags: 1478 | - XY 1479 | summary: API to get the XY tree 1480 | description: "Unique entry point for output providers, to get the tree of visible\ 1481 | \ entries" 1482 | operationId: getXYTree 1483 | parameters: 1484 | - name: expUUID 1485 | in: path 1486 | description: UUID of the experiment to query 1487 | required: true 1488 | schema: 1489 | type: string 1490 | format: uuid 1491 | - name: outputId 1492 | in: path 1493 | description: ID of the output provider to query 1494 | required: true 1495 | schema: 1496 | type: string 1497 | requestBody: 1498 | description: Query parameters to fetch the XY tree. The object 'requested_timerange' 1499 | specifies the requested time range. When absent the tree for the full range 1500 | is returned. 1501 | content: 1502 | application/json: 1503 | schema: 1504 | $ref: '#/components/schemas/TreeQueryParameters' 1505 | example: 1506 | parameters: 1507 | requested_timerange: 1508 | start: 111111111 1509 | end: 222222222 1510 | required: true 1511 | responses: 1512 | "200": 1513 | description: "Returns a list of XY entries. The returned model must be consistent,\ 1514 | \ parentIds must refer to a parent which exists in the model." 1515 | content: 1516 | application/json: 1517 | schema: 1518 | $ref: '#/components/schemas/XYTreeResponse' 1519 | "400": 1520 | description: Invalid query parameters 1521 | content: 1522 | application/json: 1523 | schema: 1524 | type: string 1525 | "404": 1526 | description: Experiment or output provider not found 1527 | content: 1528 | application/json: 1529 | schema: 1530 | type: string 1531 | "405": 1532 | description: Analysis cannot run 1533 | content: 1534 | application/json: 1535 | schema: 1536 | type: string 1537 | /experiments/{expUUID}: 1538 | get: 1539 | tags: 1540 | - Experiments 1541 | summary: Get the model object for an experiment 1542 | operationId: getExperiment 1543 | parameters: 1544 | - name: expUUID 1545 | in: path 1546 | description: UUID of the experiment to query 1547 | required: true 1548 | schema: 1549 | type: string 1550 | format: uuid 1551 | responses: 1552 | "200": 1553 | description: Return the experiment model 1554 | content: 1555 | application/json: 1556 | schema: 1557 | $ref: '#/components/schemas/Experiment' 1558 | "404": 1559 | description: No such experiment 1560 | content: 1561 | application/json: 1562 | schema: 1563 | type: string 1564 | delete: 1565 | tags: 1566 | - Experiments 1567 | summary: Remove an experiment from the server 1568 | operationId: deleteExperiment 1569 | parameters: 1570 | - name: expUUID 1571 | in: path 1572 | description: UUID of the experiment to query 1573 | required: true 1574 | schema: 1575 | type: string 1576 | format: uuid 1577 | responses: 1578 | "200": 1579 | description: "The trace was successfully deleted, return the deleted experiment." 1580 | content: 1581 | application/json: 1582 | schema: 1583 | $ref: '#/components/schemas/Experiment' 1584 | "404": 1585 | description: No such experiment 1586 | content: 1587 | application/json: 1588 | schema: 1589 | type: string 1590 | /experiments: 1591 | get: 1592 | tags: 1593 | - Experiments 1594 | summary: Get the list of experiments on the server 1595 | operationId: getExperiments 1596 | responses: 1597 | "200": 1598 | description: Returns a list of experiments 1599 | content: 1600 | application/json: 1601 | schema: 1602 | type: array 1603 | items: 1604 | $ref: '#/components/schemas/Experiment' 1605 | post: 1606 | tags: 1607 | - Experiments 1608 | summary: Create a new experiment on the server 1609 | operationId: postExperiment 1610 | requestBody: 1611 | content: 1612 | application/json: 1613 | schema: 1614 | $ref: '#/components/schemas/ExperimentQueryParameters' 1615 | required: true 1616 | responses: 1617 | "200": 1618 | description: The experiment was successfully created 1619 | content: 1620 | application/json: 1621 | schema: 1622 | $ref: '#/components/schemas/Experiment' 1623 | "204": 1624 | description: The experiment has at least one trace which hasn't been created 1625 | yet 1626 | content: 1627 | application/json: 1628 | schema: 1629 | type: string 1630 | "400": 1631 | description: Invalid query parameters 1632 | content: 1633 | application/json: 1634 | schema: 1635 | type: string 1636 | "409": 1637 | description: The experiment (name) already exists and both differ 1638 | content: 1639 | application/json: 1640 | schema: 1641 | type: string 1642 | "500": 1643 | description: Internal trace-server error while trying to post experiment 1644 | content: 1645 | application/json: 1646 | schema: 1647 | type: string 1648 | /health: 1649 | get: 1650 | tags: 1651 | - Diagnostic 1652 | summary: Get the health status of this server 1653 | operationId: getHealthStatus 1654 | responses: 1655 | "200": 1656 | description: The trace server is running and ready to receive requests 1657 | content: 1658 | application/json: 1659 | schema: 1660 | $ref: '#/components/schemas/ServerStatus' 1661 | "503": 1662 | description: The trace server is unavailable or in maintenance and cannot 1663 | receive requests 1664 | /identifier: 1665 | get: 1666 | tags: 1667 | - Identifier 1668 | summary: Retrieves system and server information 1669 | operationId: getSystemInfo 1670 | responses: 1671 | "200": 1672 | description: Successfully retrieved the system and server information 1673 | content: 1674 | application/json: 1675 | schema: 1676 | $ref: '#/components/schemas/ServerInfoResponse' 1677 | /traces/{uuid}: 1678 | get: 1679 | tags: 1680 | - Traces 1681 | summary: Get the model object for a trace 1682 | operationId: getTrace 1683 | parameters: 1684 | - name: uuid 1685 | in: path 1686 | description: UUID of the trace to query 1687 | required: true 1688 | schema: 1689 | type: string 1690 | format: uuid 1691 | responses: 1692 | "200": 1693 | description: Return the trace model 1694 | content: 1695 | application/json: 1696 | schema: 1697 | $ref: '#/components/schemas/Trace' 1698 | "404": 1699 | description: No such trace 1700 | content: 1701 | application/json: 1702 | schema: 1703 | type: string 1704 | delete: 1705 | tags: 1706 | - Traces 1707 | summary: Remove a trace from the server and disk 1708 | operationId: deleteTrace 1709 | parameters: 1710 | - name: uuid 1711 | in: path 1712 | description: UUID of the trace to query 1713 | required: true 1714 | schema: 1715 | type: string 1716 | format: uuid 1717 | responses: 1718 | "200": 1719 | description: The trace was successfully deleted 1720 | content: 1721 | application/json: 1722 | schema: 1723 | $ref: '#/components/schemas/Trace' 1724 | "404": 1725 | description: No such trace 1726 | content: 1727 | application/json: 1728 | schema: 1729 | type: string 1730 | "409": 1731 | description: The trace is in use by at least one experiment thus cannot 1732 | be deleted 1733 | content: 1734 | application/json: 1735 | schema: 1736 | type: string 1737 | /traces: 1738 | get: 1739 | tags: 1740 | - Traces 1741 | summary: Get the list of physical traces imported on the server 1742 | operationId: getTraces 1743 | responses: 1744 | "200": 1745 | description: Returns a list of traces 1746 | content: 1747 | application/json: 1748 | schema: 1749 | type: array 1750 | items: 1751 | $ref: '#/components/schemas/Trace' 1752 | post: 1753 | tags: 1754 | - Traces 1755 | summary: Import a trace 1756 | description: Import a trace to the trace server. Return some base information 1757 | once imported. 1758 | operationId: putTrace 1759 | requestBody: 1760 | content: 1761 | application/json: 1762 | schema: 1763 | $ref: '#/components/schemas/TraceQueryParameters' 1764 | required: true 1765 | responses: 1766 | "200": 1767 | description: The trace has been successfully added to the trace server 1768 | content: 1769 | application/json: 1770 | schema: 1771 | $ref: '#/components/schemas/Trace' 1772 | "400": 1773 | description: Missing query parameters 1774 | content: 1775 | application/json: 1776 | schema: 1777 | type: string 1778 | "404": 1779 | description: No such trace 1780 | content: 1781 | application/json: 1782 | schema: 1783 | type: string 1784 | "406": 1785 | description: Cannot read this trace type 1786 | content: 1787 | application/json: 1788 | schema: 1789 | type: string 1790 | "409": 1791 | description: There was already a trace with this name 1792 | content: 1793 | application/json: 1794 | schema: 1795 | type: string 1796 | "500": 1797 | description: Trace resource creation failed 1798 | content: 1799 | application/json: 1800 | schema: 1801 | type: string 1802 | "501": 1803 | description: Trace type not supported 1804 | content: 1805 | application/json: 1806 | schema: 1807 | type: string 1808 | components: 1809 | schemas: 1810 | Bookmark: 1811 | type: object 1812 | properties: 1813 | name: 1814 | type: string 1815 | description: User defined name for the bookmark 1816 | end: 1817 | type: integer 1818 | description: The bookmark's end time 1819 | format: int64 1820 | start: 1821 | type: integer 1822 | description: The bookmark's start time 1823 | format: int64 1824 | uuid: 1825 | type: string 1826 | description: The bookmark's unique identifier 1827 | format: uuid 1828 | BookmarkParameters: 1829 | required: 1830 | - end 1831 | - name 1832 | - start 1833 | type: object 1834 | properties: 1835 | name: 1836 | type: string 1837 | description: The name to give this bookmark 1838 | end: 1839 | type: integer 1840 | description: The bookmark's end time 1841 | format: int64 1842 | start: 1843 | type: integer 1844 | description: The bookmark's start time 1845 | format: int64 1846 | description: The bookmark parameters 1847 | BookmarkQueryParameters: 1848 | required: 1849 | - parameters 1850 | type: object 1851 | properties: 1852 | parameters: 1853 | $ref: '#/components/schemas/BookmarkParameters' 1854 | Configuration: 1855 | type: object 1856 | properties: 1857 | sourceTypeId: 1858 | type: string 1859 | description: The ID of the configuration source type 1860 | description: 1861 | type: string 1862 | description: Describes the configuration instance 1863 | name: 1864 | type: string 1865 | description: The human readable name 1866 | id: 1867 | type: string 1868 | description: The unique ID of the configuration instance 1869 | parameters: 1870 | type: object 1871 | additionalProperties: 1872 | type: object 1873 | description: Optional parameters representing the configuration parameters 1874 | used to create this configuration. 1875 | description: Optional parameters representing the configuration parameters 1876 | used to create this configuration. 1877 | description: Configuration instance describing user provided configuration parameters. 1878 | ConfigurationParameterDescriptor: 1879 | type: object 1880 | properties: 1881 | dataType: 1882 | type: string 1883 | description: The data type hint of the configuration parameter 1884 | keyName: 1885 | type: string 1886 | description: The unique key name of the configuration parameter 1887 | required: 1888 | type: boolean 1889 | description: A flag indicating whether the configuration parameter is required 1890 | or not 1891 | description: 1892 | type: string 1893 | description: Describes the configuration parameter 1894 | description: A list of configuration parameter descriptors to be passed when 1895 | creating or updating a configuration instance of this type. Use this instead 1896 | of schema. Omit if not used. 1897 | ConfigurationSourceType: 1898 | type: object 1899 | properties: 1900 | parameterDescriptors: 1901 | type: array 1902 | description: A list of configuration parameter descriptors to be passed 1903 | when creating or updating a configuration instance of this type. Use this 1904 | instead of schema. Omit if not used. 1905 | items: 1906 | $ref: '#/components/schemas/ConfigurationParameterDescriptor' 1907 | description: 1908 | type: string 1909 | description: Describes the configuration source type 1910 | schema: 1911 | $ref: '#/components/schemas/OptionalSchema' 1912 | name: 1913 | type: string 1914 | description: The human readable name 1915 | id: 1916 | type: string 1917 | description: The unique ID of the configuration source type 1918 | OptionalSchema: 1919 | type: object 1920 | description: A JSON object that describes a JSON schema for parameters that 1921 | the front-end needs to provide with corresponding values. The schema has to 1922 | adhere to JSON schema specification (see https://json-schema.org/). Use this 1923 | for complex parameter descriptions instead of parameterDescriptors. Omit if 1924 | not used. 1925 | ConfigurationQueryParameters: 1926 | required: 1927 | - name 1928 | - parameters 1929 | type: object 1930 | properties: 1931 | description: 1932 | type: string 1933 | description: Optional description of the configuration. 1934 | name: 1935 | type: string 1936 | description: Unique name of the configuration. 1937 | parameters: 1938 | type: object 1939 | additionalProperties: 1940 | type: object 1941 | description: Parameters as specified in the schema or list of ConfigurationParameterDescriptor 1942 | of the corresponding ConfigurationTypeDescriptor. 1943 | description: Parameters as specified in the schema or list of ConfigurationParameterDescriptor 1944 | of the corresponding ConfigurationTypeDescriptor. 1945 | DataProvider: 1946 | type: object 1947 | properties: 1948 | parentId: 1949 | type: string 1950 | description: Optional parent Id for grouping purposes for example of derived 1951 | data providers. 1952 | description: 1953 | type: string 1954 | description: Describes the output provider's features 1955 | name: 1956 | type: string 1957 | description: The human readable name 1958 | id: 1959 | type: string 1960 | description: The output provider's ID 1961 | type: 1962 | type: string 1963 | description: "Type of data returned by this output. Serves as a hint to\ 1964 | \ determine what kind of view should be used for this output (ex. XY,\ 1965 | \ Time Graph, Table, etc..). Providers of type TREE_TIME_XY and TIME_GRAPH\ 1966 | \ can be grouped under the same time axis. Providers of type DATA_TREE\ 1967 | \ only provide a tree with columns and don't have any XY nor time graph\ 1968 | \ data associated with it. Providers of type NONE have no data to visualize.\ 1969 | \ Can be used for grouping purposes and/or as data provider configurator." 1970 | enum: 1971 | - TABLE 1972 | - TREE_TIME_XY 1973 | - TIME_GRAPH 1974 | - DATA_TREE 1975 | - NONE 1976 | configuration: 1977 | $ref: '#/components/schemas/Configuration' 1978 | capabilities: 1979 | $ref: '#/components/schemas/OutputCapabilities' 1980 | OutputCapabilities: 1981 | type: object 1982 | properties: 1983 | canDelete: 1984 | type: boolean 1985 | description: "Optional, whether this output (data provider) can be deleted.\ 1986 | \ 'false' if absent." 1987 | canCreate: 1988 | type: boolean 1989 | description: "Optional, whether this output (data provider) can create derived\ 1990 | \ outputs (data providers). 'false' if absent." 1991 | description: "Optional output capabilities, such as 'canCreate' and 'canDelete'.\ 1992 | \ If absent, all capabilities are 'false'." 1993 | OutputConfigurationQueryParameters: 1994 | required: 1995 | - sourceTypeId 1996 | type: object 1997 | allOf: 1998 | - $ref: '#/components/schemas/ConfigurationQueryParameters' 1999 | - type: object 2000 | properties: 2001 | sourceTypeId: 2002 | type: string 2003 | description: The type ID of the corresponding ConfigurationSourceType 2004 | defined by this output. 2005 | AnnotationCategoriesModel: 2006 | type: object 2007 | properties: 2008 | annotationCategories: 2009 | type: array 2010 | description: Array of all the categories 2011 | items: 2012 | type: string 2013 | description: Model returned by outputs that contains annotation categories available 2014 | for this output 2015 | AnnotationCategoriesResponse: 2016 | type: object 2017 | allOf: 2018 | - $ref: '#/components/schemas/GenericResponse' 2019 | - type: object 2020 | properties: 2021 | model: 2022 | $ref: '#/components/schemas/AnnotationCategoriesModel' 2023 | GenericResponse: 2024 | type: object 2025 | properties: 2026 | statusMessage: 2027 | type: string 2028 | status: 2029 | type: string 2030 | description: All possible statuses for a server response 2031 | enum: 2032 | - RUNNING 2033 | - COMPLETED 2034 | - FAILED 2035 | - CANCELLED 2036 | description: Response that includes the status and a status message 2037 | Annotation: 2038 | required: 2039 | - duration 2040 | - entryId 2041 | - time 2042 | - type 2043 | type: object 2044 | properties: 2045 | style: 2046 | $ref: '#/components/schemas/OutputElementStyle' 2047 | entryId: 2048 | type: integer 2049 | description: Entry's unique ID or -1 if annotation not associated with an 2050 | entry 2051 | format: int64 2052 | type: 2053 | type: string 2054 | description: Type of annotation indicating its location 2055 | enum: 2056 | - CHART 2057 | - TREE 2058 | time: 2059 | type: integer 2060 | description: Time of this annotation 2061 | format: int64 2062 | duration: 2063 | type: integer 2064 | description: Duration of this annotation 2065 | format: int64 2066 | label: 2067 | type: string 2068 | description: Text label of this annotation 2069 | description: An annotation is used to mark an interesting area at a given time 2070 | or time range 2071 | AnnotationModel: 2072 | type: object 2073 | properties: 2074 | annotations: 2075 | type: object 2076 | additionalProperties: 2077 | type: array 2078 | description: Map of annotations where the keys are categories 2079 | items: 2080 | $ref: '#/components/schemas/Annotation' 2081 | description: Map of annotations where the keys are categories 2082 | description: Model returned by outputs that contains annotations per category 2083 | AnnotationResponse: 2084 | type: object 2085 | allOf: 2086 | - $ref: '#/components/schemas/GenericResponse' 2087 | - type: object 2088 | properties: 2089 | model: 2090 | $ref: '#/components/schemas/AnnotationModel' 2091 | OutputElementStyle: 2092 | type: object 2093 | properties: 2094 | parentKey: 2095 | type: string 2096 | description: "Parent style key or empty if there is no parent. The parent\ 2097 | \ key should match a style key defined in the style model and is used\ 2098 | \ for style inheritance. A comma-delimited list of parent style keys can\ 2099 | \ be used for style composition, the last one taking precedence." 2100 | values: 2101 | type: object 2102 | additionalProperties: 2103 | $ref: '#/components/schemas/StyleValue' 2104 | description: Style values or empty map if there are no values. Keys and 2105 | values are defined in https://github.com/eclipse-tracecompass/org.eclipse.tracecompass/blob/master/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/model/StyleProperties.java 2106 | description: "Represents the style on an element (ex. Entry, TimeGraphState,\ 2107 | \ ...) returned by any output. Supports style inheritance. To avoid having\ 2108 | \ too many styles, the element style can have a parent style and will have\ 2109 | \ all the same style property values as the parent, and can add or override\ 2110 | \ style properties." 2111 | StyleValue: 2112 | type: object 2113 | description: Supported types of a style value. 2114 | oneOf: 2115 | - type: string 2116 | - type: number 2117 | format: double 2118 | - type: integer 2119 | format: int32 2120 | AnnotationsParameters: 2121 | required: 2122 | - requested_timerange 2123 | type: object 2124 | properties: 2125 | requested_marker_categories: 2126 | type: array 2127 | items: 2128 | type: string 2129 | requested_marker_set: 2130 | type: string 2131 | requested_timerange: 2132 | $ref: '#/components/schemas/TimeRange' 2133 | requested_items: 2134 | type: array 2135 | items: 2136 | type: integer 2137 | format: int32 2138 | AnnotationsQueryParameters: 2139 | required: 2140 | - parameters 2141 | type: object 2142 | properties: 2143 | parameters: 2144 | $ref: '#/components/schemas/AnnotationsParameters' 2145 | TimeRange: 2146 | required: 2147 | - end 2148 | - start 2149 | type: object 2150 | properties: 2151 | nbTimes: 2152 | type: integer 2153 | description: The number of timestamps to be sampled (1-65536) in the given 2154 | range 2155 | format: int32 2156 | end: 2157 | type: integer 2158 | description: The end of the time range 2159 | format: int64 2160 | start: 2161 | type: integer 2162 | description: The start of the time range 2163 | format: int64 2164 | description: A time range with optional number of timestamps to be sampled 2165 | TimeGraphArrow: 2166 | required: 2167 | - end 2168 | - sourceId 2169 | - start 2170 | - targetId 2171 | type: object 2172 | properties: 2173 | targetId: 2174 | type: integer 2175 | description: Target entry's unique ID 2176 | format: int64 2177 | end: 2178 | type: integer 2179 | description: End time for this arrow 2180 | format: int64 2181 | start: 2182 | type: integer 2183 | description: Start time for this arrow 2184 | format: int64 2185 | style: 2186 | $ref: '#/components/schemas/OutputElementStyle' 2187 | sourceId: 2188 | type: integer 2189 | description: Source entry's unique ID 2190 | format: int64 2191 | TimeGraphArrowsResponse: 2192 | type: object 2193 | allOf: 2194 | - $ref: '#/components/schemas/GenericResponse' 2195 | - type: object 2196 | properties: 2197 | model: 2198 | type: array 2199 | items: 2200 | $ref: '#/components/schemas/TimeGraphArrow' 2201 | ArrowsParameters: 2202 | required: 2203 | - requested_timerange 2204 | type: object 2205 | properties: 2206 | requested_timerange: 2207 | $ref: '#/components/schemas/TimeRange' 2208 | ArrowsQueryParameters: 2209 | required: 2210 | - parameters 2211 | type: object 2212 | properties: 2213 | parameters: 2214 | $ref: '#/components/schemas/ArrowsParameters' 2215 | TableColumnHeader: 2216 | type: object 2217 | properties: 2218 | description: 2219 | type: string 2220 | description: Description of the column 2221 | name: 2222 | type: string 2223 | description: Displayed name for this column 2224 | id: 2225 | type: integer 2226 | description: Unique id to identify this column in the backend 2227 | format: int64 2228 | type: 2229 | type: string 2230 | description: Type of data associated to this column 2231 | TableColumnHeadersResponse: 2232 | type: object 2233 | allOf: 2234 | - $ref: '#/components/schemas/GenericResponse' 2235 | - type: object 2236 | properties: 2237 | model: 2238 | type: array 2239 | items: 2240 | $ref: '#/components/schemas/TableColumnHeader' 2241 | OptionalParameters: 2242 | type: object 2243 | OptionalQueryParameters: 2244 | required: 2245 | - parameters 2246 | type: object 2247 | properties: 2248 | parameters: 2249 | $ref: '#/components/schemas/OptionalParameters' 2250 | TreeColumnHeader: 2251 | required: 2252 | - name 2253 | type: object 2254 | properties: 2255 | dataType: 2256 | type: string 2257 | description: "Data type of column. Optional, data type STRING is applied\ 2258 | \ if absent." 2259 | enum: 2260 | - NUMBER 2261 | - BINARY_NUMBER 2262 | - TIMESTAMP 2263 | - DURATION 2264 | - STRING 2265 | - TIME_RANGE 2266 | tooltip: 2267 | type: string 2268 | description: "Displayed tooltip for this header. Optional, no tooltip is\ 2269 | \ applied if absent." 2270 | name: 2271 | type: string 2272 | description: Displayed name for this header 2273 | TreeDataModel: 2274 | required: 2275 | - id 2276 | - labels 2277 | type: object 2278 | properties: 2279 | hasData: 2280 | type: boolean 2281 | description: Whether or not this entry has data 2282 | parentId: 2283 | type: integer 2284 | description: "Optional unique ID to identify this entry's parent. If the\ 2285 | \ parent ID is -1 or omitted, this entry has no parent." 2286 | format: int64 2287 | style: 2288 | $ref: '#/components/schemas/OutputElementStyle' 2289 | id: 2290 | type: integer 2291 | description: Unique ID to identify this entry in the backend 2292 | format: int64 2293 | labels: 2294 | type: array 2295 | description: Array of cell labels to be displayed. The length of the array 2296 | and the index of each column need to correspond to the header array returned 2297 | in the tree model. 2298 | items: 2299 | type: string 2300 | description: Base entry returned by tree endpoints 2301 | TreeEntryModel: 2302 | required: 2303 | - entries 2304 | type: object 2305 | properties: 2306 | entries: 2307 | type: array 2308 | items: 2309 | $ref: '#/components/schemas/TreeDataModel' 2310 | headers: 2311 | type: array 2312 | items: 2313 | $ref: '#/components/schemas/TreeColumnHeader' 2314 | XYTreeEntry: 2315 | type: object 2316 | allOf: 2317 | - $ref: '#/components/schemas/TreeDataModel' 2318 | - type: object 2319 | properties: 2320 | isDefault: 2321 | type: boolean 2322 | description: Optional flag to indicate whether or not the entry is a default 2323 | entry and its xy data should be fetched by default. 2324 | XYTreeEntryModel: 2325 | type: object 2326 | allOf: 2327 | - $ref: '#/components/schemas/TreeEntryModel' 2328 | - type: object 2329 | properties: 2330 | entries: 2331 | type: array 2332 | items: 2333 | $ref: '#/components/schemas/XYTreeEntry' 2334 | XYTreeResponse: 2335 | type: object 2336 | allOf: 2337 | - $ref: '#/components/schemas/GenericResponse' 2338 | - type: object 2339 | properties: 2340 | model: 2341 | $ref: '#/components/schemas/XYTreeEntryModel' 2342 | TreeParameters: 2343 | type: object 2344 | properties: 2345 | requested_timerange: 2346 | $ref: '#/components/schemas/TimeRange' 2347 | TreeQueryParameters: 2348 | required: 2349 | - parameters 2350 | type: object 2351 | properties: 2352 | parameters: 2353 | $ref: '#/components/schemas/TreeParameters' 2354 | VirtualTableCell: 2355 | type: object 2356 | properties: 2357 | tags: 2358 | type: integer 2359 | description: Specific tags for this cell. A value of 0 should be handled 2360 | as none (no tags) 2361 | format: int32 2362 | content: 2363 | type: string 2364 | description: Content of the cell for this line 2365 | VirtualTableLine: 2366 | type: object 2367 | properties: 2368 | tags: 2369 | type: integer 2370 | description: "Tags for the entire line. A bit mask to apply for tagging\ 2371 | \ elements (e.g. table lines, states). This can be used by the server\ 2372 | \ to indicate if a filter matches and what action to apply. Use 0 for\ 2373 | \ no tags, 1 and 2 are reserved, 4 for 'BORDER' and 8 for 'HIGHLIGHT'." 2374 | format: int32 2375 | cells: 2376 | type: array 2377 | description: The content of the cells for this line. This array matches 2378 | the column ids returned above 2379 | items: 2380 | $ref: '#/components/schemas/VirtualTableCell' 2381 | index: 2382 | type: integer 2383 | description: The index of this line in the virtual table 2384 | format: int64 2385 | VirtualTableModel: 2386 | type: object 2387 | properties: 2388 | columnIds: 2389 | type: array 2390 | description: The array of column ids that are returned. They should match 2391 | the content of the lines' content 2392 | items: 2393 | type: integer 2394 | format: int64 2395 | lowIndex: 2396 | type: integer 2397 | description: Index in the virtual table of the first returned event 2398 | format: int64 2399 | lines: 2400 | type: array 2401 | items: 2402 | $ref: '#/components/schemas/VirtualTableLine' 2403 | size: 2404 | type: integer 2405 | description: "Number of events. If filtered, the size will be the number\ 2406 | \ of events that match the filters" 2407 | format: int64 2408 | VirtualTableResponse: 2409 | type: object 2410 | allOf: 2411 | - $ref: '#/components/schemas/GenericResponse' 2412 | - type: object 2413 | properties: 2414 | model: 2415 | $ref: '#/components/schemas/VirtualTableModel' 2416 | LinesParameters: 2417 | required: 2418 | - requested_table_count 2419 | type: object 2420 | properties: 2421 | requested_times: 2422 | type: array 2423 | items: 2424 | type: integer 2425 | format: int64 2426 | requested_table_index: 2427 | type: integer 2428 | format: int64 2429 | requested_table_count: 2430 | type: integer 2431 | format: int32 2432 | requested_table_column_ids: 2433 | type: array 2434 | items: 2435 | type: integer 2436 | format: int64 2437 | table_search_expressions: 2438 | type: object 2439 | additionalProperties: 2440 | type: string 2441 | table_search_direction: 2442 | type: string 2443 | description: "Search next or previous item (e.g. event, state etc.)" 2444 | enum: 2445 | - NEXT 2446 | - PREVIOUS 2447 | LinesQueryParameters: 2448 | required: 2449 | - parameters 2450 | type: object 2451 | properties: 2452 | parameters: 2453 | $ref: '#/components/schemas/LinesParameters' 2454 | MarkerSet: 2455 | type: object 2456 | properties: 2457 | name: 2458 | type: string 2459 | description: Name of this marker set 2460 | id: 2461 | type: string 2462 | description: ID of this marker set 2463 | description: A marker set is used to represent a set of annotations that can 2464 | be fetched 2465 | MarkerSetsResponse: 2466 | type: object 2467 | allOf: 2468 | - $ref: '#/components/schemas/GenericResponse' 2469 | - type: object 2470 | properties: 2471 | model: 2472 | type: array 2473 | items: 2474 | $ref: '#/components/schemas/MarkerSet' 2475 | TimeGraphModel: 2476 | type: object 2477 | properties: 2478 | rows: 2479 | type: array 2480 | items: 2481 | $ref: '#/components/schemas/TimeGraphRowModel' 2482 | TimeGraphRowModel: 2483 | required: 2484 | - entryId 2485 | - states 2486 | type: object 2487 | properties: 2488 | states: 2489 | type: array 2490 | description: List of the time graph entry states associated to this entry 2491 | and zoom level 2492 | items: 2493 | $ref: '#/components/schemas/TimeGraphState' 2494 | entryId: 2495 | type: integer 2496 | description: The entry to map this state list to 2497 | format: int64 2498 | TimeGraphState: 2499 | required: 2500 | - end 2501 | - start 2502 | type: object 2503 | properties: 2504 | tags: 2505 | type: integer 2506 | description: Tags to apply on this state. A value of 0 should be handled 2507 | as none (no tags) 2508 | format: int32 2509 | end: 2510 | type: integer 2511 | description: End time for this state 2512 | format: int64 2513 | start: 2514 | type: integer 2515 | description: Start time for this state 2516 | format: int64 2517 | style: 2518 | $ref: '#/components/schemas/OutputElementStyle' 2519 | label: 2520 | type: string 2521 | description: "Text label to apply to this TimeGraphState if resolution permits.\ 2522 | \ Optional, no label is applied if absent" 2523 | TimeGraphStatesResponse: 2524 | type: object 2525 | allOf: 2526 | - $ref: '#/components/schemas/GenericResponse' 2527 | - type: object 2528 | properties: 2529 | model: 2530 | $ref: '#/components/schemas/TimeGraphModel' 2531 | RequestedFilterQueryParameters: 2532 | required: 2533 | - filter_expressions_map 2534 | type: object 2535 | properties: 2536 | filter_expressions_map: 2537 | type: object 2538 | additionalProperties: 2539 | type: array 2540 | description: "The key of this map can be \"1\" (means DIMMED) or \"4\"\ 2541 | \ (means EXCLUDED) and the value is an array of the desired search query\ 2542 | \ (e.g. {\"1\": [\"openat\", \"duration>10ms\"]})" 2543 | items: 2544 | type: string 2545 | description: "The key of this map can be \"1\" (means DIMMED) or \"\ 2546 | 4\" (means EXCLUDED) and the value is an array of the desired search\ 2547 | \ query (e.g. {\"1\": [\"openat\", \"duration>10ms\"]})" 2548 | description: "The key of this map can be \"1\" (means DIMMED) or \"4\" (means\ 2549 | \ EXCLUDED) and the value is an array of the desired search query (e.g.\ 2550 | \ {\"1\": [\"openat\", \"duration>10ms\"]})" 2551 | strategy: 2552 | type: string 2553 | description: Optional parameter that enables the full search (deep search) 2554 | or not 2555 | enum: 2556 | - SAMPLED 2557 | - DEEP 2558 | description: FilterQueryParameters is used to support search and filter expressions 2559 | for timegraph views 2560 | RequestedParameters: 2561 | required: 2562 | - requested_items 2563 | - requested_timerange 2564 | type: object 2565 | properties: 2566 | requested_timerange: 2567 | $ref: '#/components/schemas/TimeRange' 2568 | requested_items: 2569 | type: array 2570 | items: 2571 | type: integer 2572 | format: int32 2573 | filter_query_parameters: 2574 | $ref: '#/components/schemas/RequestedFilterQueryParameters' 2575 | RequestedQueryParameters: 2576 | required: 2577 | - parameters 2578 | type: object 2579 | properties: 2580 | parameters: 2581 | $ref: '#/components/schemas/RequestedParameters' 2582 | OutputStyleModel: 2583 | type: object 2584 | properties: 2585 | styles: 2586 | type: object 2587 | additionalProperties: 2588 | $ref: '#/components/schemas/OutputElementStyle' 2589 | description: Map of styles specific to an output where values give hints on 2590 | the style. The keys are strings that can be used in OutputElementStyle 2591 | StylesResponse: 2592 | type: object 2593 | allOf: 2594 | - $ref: '#/components/schemas/GenericResponse' 2595 | - type: object 2596 | properties: 2597 | model: 2598 | $ref: '#/components/schemas/OutputStyleModel' 2599 | TimeGraphTooltip: 2600 | type: object 2601 | properties: 2602 | value: 2603 | type: string 2604 | key: 2605 | type: string 2606 | TimeGraphTooltipResponse: 2607 | type: object 2608 | allOf: 2609 | - $ref: '#/components/schemas/GenericResponse' 2610 | - type: object 2611 | properties: 2612 | model: 2613 | type: array 2614 | items: 2615 | $ref: '#/components/schemas/TimeGraphTooltip' 2616 | Element: 2617 | required: 2618 | - duration 2619 | - elementType 2620 | - time 2621 | type: object 2622 | properties: 2623 | entryId: 2624 | type: integer 2625 | description: "Entry's unique ID (annotation, arrow)" 2626 | format: int64 2627 | destinationId: 2628 | type: integer 2629 | description: Destination entry's unique ID (arrow) 2630 | format: int64 2631 | time: 2632 | type: integer 2633 | description: Element's start time 2634 | format: int64 2635 | duration: 2636 | type: integer 2637 | description: Element's duration 2638 | format: int64 2639 | elementType: 2640 | type: string 2641 | description: The type of element 2642 | enum: 2643 | - STATE 2644 | - ANNOTATION 2645 | - ARROW 2646 | description: An element model to be identified 2647 | TooltipParameters: 2648 | required: 2649 | - requested_element 2650 | - requested_items 2651 | - requested_times 2652 | type: object 2653 | properties: 2654 | requested_items: 2655 | type: array 2656 | items: 2657 | type: integer 2658 | format: int32 2659 | requested_times: 2660 | type: array 2661 | items: 2662 | type: integer 2663 | format: int64 2664 | requested_element: 2665 | $ref: '#/components/schemas/Element' 2666 | TooltipQueryParameters: 2667 | required: 2668 | - parameters 2669 | type: object 2670 | properties: 2671 | parameters: 2672 | $ref: '#/components/schemas/TooltipParameters' 2673 | TimeGraphEntry: 2674 | type: object 2675 | allOf: 2676 | - $ref: '#/components/schemas/TreeDataModel' 2677 | - type: object 2678 | properties: 2679 | end: 2680 | type: integer 2681 | description: End of the range for which this entry exists 2682 | format: int64 2683 | start: 2684 | type: integer 2685 | description: Beginning of the range for which this entry exists 2686 | format: int64 2687 | metadata: 2688 | type: object 2689 | additionalProperties: 2690 | type: array 2691 | description: Optional metadata map for domain specific data for matching 2692 | data across data providers. Keys for the same data shall be the same 2693 | across data providers. Only values of type Number or String are allowed. 2694 | For each key all values shall have the same type. 2695 | items: 2696 | type: object 2697 | description: Optional metadata map for domain specific data for matching 2698 | data across data providers. Keys for the same data shall be the 2699 | same across data providers. Only values of type Number or String 2700 | are allowed. For each key all values shall have the same type. 2701 | description: Optional metadata map for domain specific data for matching 2702 | data across data providers. Keys for the same data shall be the same 2703 | across data providers. Only values of type Number or String are allowed. 2704 | For each key all values shall have the same type. 2705 | TimeGraphTreeModel: 2706 | type: object 2707 | allOf: 2708 | - $ref: '#/components/schemas/TreeEntryModel' 2709 | - type: object 2710 | properties: 2711 | entries: 2712 | type: array 2713 | items: 2714 | $ref: '#/components/schemas/TimeGraphEntry' 2715 | TimeGraphTreeResponse: 2716 | type: object 2717 | allOf: 2718 | - $ref: '#/components/schemas/GenericResponse' 2719 | - type: object 2720 | properties: 2721 | model: 2722 | $ref: '#/components/schemas/TimeGraphTreeModel' 2723 | SeriesModel: 2724 | required: 2725 | - seriesId 2726 | - seriesName 2727 | - style 2728 | - xValues 2729 | - yValues 2730 | type: object 2731 | properties: 2732 | seriesId: 2733 | type: integer 2734 | description: Series' ID 2735 | format: int64 2736 | seriesName: 2737 | type: string 2738 | description: Series' name 2739 | style: 2740 | $ref: '#/components/schemas/OutputElementStyle' 2741 | xValues: 2742 | type: array 2743 | description: Series' X values 2744 | items: 2745 | type: integer 2746 | format: int64 2747 | yValues: 2748 | type: array 2749 | description: Series' Y values 2750 | items: 2751 | type: number 2752 | format: double 2753 | description: This model includes the series output style values. 2754 | XYModel: 2755 | required: 2756 | - series 2757 | - title 2758 | type: object 2759 | properties: 2760 | series: 2761 | type: array 2762 | description: The collection of series 2763 | items: 2764 | $ref: '#/components/schemas/SeriesModel' 2765 | title: 2766 | type: string 2767 | description: Title of the model 2768 | XYResponse: 2769 | type: object 2770 | allOf: 2771 | - $ref: '#/components/schemas/GenericResponse' 2772 | - type: object 2773 | properties: 2774 | model: 2775 | $ref: '#/components/schemas/XYModel' 2776 | Experiment: 2777 | type: object 2778 | properties: 2779 | traces: 2780 | type: array 2781 | description: The traces encapsulated by this experiment 2782 | items: 2783 | $ref: '#/components/schemas/Trace' 2784 | end: 2785 | type: integer 2786 | description: The experiment's end time 2787 | format: int64 2788 | nbEvents: 2789 | type: integer 2790 | description: Current number of indexed events in the experiment 2791 | format: int64 2792 | start: 2793 | type: integer 2794 | description: The experiment's start time 2795 | format: int64 2796 | indexingStatus: 2797 | type: string 2798 | description: Status of the experiment indexing 2799 | enum: 2800 | - RUNNING 2801 | - COMPLETED 2802 | - CLOSED 2803 | name: 2804 | type: string 2805 | description: User defined name for the experiment 2806 | UUID: 2807 | type: string 2808 | description: The experiment's unique identifier 2809 | format: uuid 2810 | Trace: 2811 | type: object 2812 | properties: 2813 | end: 2814 | type: integer 2815 | description: The trace's end time 2816 | format: int64 2817 | nbEvents: 2818 | type: integer 2819 | description: Current number of indexed events in the trace 2820 | format: int64 2821 | start: 2822 | type: integer 2823 | description: The trace's start time 2824 | format: int64 2825 | indexingStatus: 2826 | type: string 2827 | description: Status of the trace indexing 2828 | enum: 2829 | - RUNNING 2830 | - COMPLETED 2831 | - CLOSED 2832 | name: 2833 | type: string 2834 | description: User defined name for the trace 2835 | properties: 2836 | type: object 2837 | additionalProperties: 2838 | type: string 2839 | description: The trace's properties 2840 | description: The trace's properties 2841 | path: 2842 | type: string 2843 | description: Path to the trace on the server's file system 2844 | UUID: 2845 | type: string 2846 | description: The trace's unique identifier 2847 | format: uuid 2848 | ExperimentParameters: 2849 | required: 2850 | - name 2851 | - traces 2852 | type: object 2853 | properties: 2854 | traces: 2855 | type: array 2856 | description: The unique identifiers of the traces to encapsulate in this 2857 | experiment 2858 | items: 2859 | type: string 2860 | format: uuid 2861 | name: 2862 | type: string 2863 | description: The name to give this experiment 2864 | ExperimentQueryParameters: 2865 | required: 2866 | - parameters 2867 | type: object 2868 | properties: 2869 | parameters: 2870 | $ref: '#/components/schemas/ExperimentParameters' 2871 | ServerStatus: 2872 | type: object 2873 | properties: 2874 | status: 2875 | type: string 2876 | description: The status of the server 2877 | enum: 2878 | - UP 2879 | ServerInfoResponse: 2880 | required: 2881 | - os 2882 | - productId 2883 | - tspVersion 2884 | - version 2885 | type: object 2886 | properties: 2887 | osArch: 2888 | type: string 2889 | description: Architecture of the operating system 2890 | buildTime: 2891 | type: string 2892 | description: "Build time or qualifier of the server version, if available" 2893 | os: 2894 | type: string 2895 | description: Operating system name 2896 | osVersion: 2897 | type: string 2898 | description: Operating system version 2899 | cpuCount: 2900 | type: integer 2901 | description: Number of CPUs available 2902 | format: int32 2903 | maxMemory: 2904 | type: integer 2905 | description: Maximum memory available to the JVM in bytes 2906 | format: int64 2907 | launcherName: 2908 | type: string 2909 | description: "Name of the launcher used, if available" 2910 | productId: 2911 | type: string 2912 | description: Product identifier for the trace server 2913 | tspVersion: 2914 | type: string 2915 | description: The TSP version that the trace server supports 2916 | version: 2917 | type: string 2918 | description: Version in the format Major.Minor.Micro 2919 | description: System Information Response 2920 | TraceParameters: 2921 | required: 2922 | - uri 2923 | type: object 2924 | properties: 2925 | typeID: 2926 | type: string 2927 | description: "The trace type's ID, to force the use of a parser / disambiguate\ 2928 | \ the trace type" 2929 | name: 2930 | type: string 2931 | description: "The name of the trace in the server, to override the default\ 2932 | \ name" 2933 | uri: 2934 | type: string 2935 | description: URI of the trace 2936 | TraceQueryParameters: 2937 | required: 2938 | - parameters 2939 | type: object 2940 | properties: 2941 | parameters: 2942 | $ref: '#/components/schemas/TraceParameters' 2943 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Community Code of Conduct 2 | 3 | **Version 2.0 4 | January 1, 2023** 5 | 6 | ## Our Pledge 7 | 8 | In the interest of fostering an open and welcoming environment, we as community members, contributors, Committers[^1], and Project Leads (collectively "Contributors") pledge to make participation in our projects and our community a harassment-free and inclusive experience for everyone. 9 | 10 | This Community Code of Conduct ("Code") outlines our behavior expectations as members of our community in all Eclipse Foundation activities, both offline and online. It is not intended to govern scenarios or behaviors outside of the scope of Eclipse Foundation activities. Nor is it intended to replace or supersede the protections offered to all our community members under the law. Please follow both the spirit and letter of this Code and encourage other Contributors to follow these principles into our work. Failure to read or acknowledge this Code does not excuse a Contributor from compliance with the Code. 11 | 12 | ## Our Standards 13 | 14 | Examples of behavior that contribute to creating a positive and professional environment include: 15 | 16 | - Using welcoming and inclusive language; 17 | - Actively encouraging all voices; 18 | - Helping others bring their perspectives and listening actively. If you find yourself dominating a discussion, it is especially important to encourage other voices to join in; 19 | - Being respectful of differing viewpoints and experiences; 20 | - Gracefully accepting constructive criticism; 21 | - Focusing on what is best for the community; 22 | - Showing empathy towards other community members; 23 | - Being direct but professional; and 24 | - Leading by example by holding yourself and others accountable 25 | 26 | Examples of unacceptable behavior by Contributors include: 27 | 28 | - The use of sexualized language or imagery; 29 | - Unwelcome sexual attention or advances; 30 | - Trolling, insulting/derogatory comments, and personal or political attacks; 31 | - Public or private harassment, repeated harassment; 32 | - Publishing others' private information, such as a physical or electronic address, without explicit permission; 33 | - Violent threats or language directed against another person; 34 | - Sexist, racist, or otherwise discriminatory jokes and language; 35 | - Posting sexually explicit or violent material; 36 | - Sharing private content, such as emails sent privately or non-publicly, or unlogged forums such as IRC channel history; 37 | - Personal insults, especially those using racist or sexist terms; 38 | - Excessive or unnecessary profanity; 39 | - Advocating for, or encouraging, any of the above behavior; and 40 | - Other conduct which could reasonably be considered inappropriate in a professional setting 41 | 42 | ## Our Responsibilities 43 | 44 | With the support of the Eclipse Foundation employees, consultants, officers, and directors (collectively, the "Staff"), Committers, and Project Leads, the Eclipse Foundation Conduct Committee (the "Conduct Committee") is responsible for clarifying the standards of acceptable behavior. The Conduct Committee takes appropriate and fair corrective action in response to any instances of unacceptable behavior. 45 | 46 | ## Scope 47 | 48 | This Code applies within all Project, Working Group, and Interest Group spaces and communication channels of the Eclipse Foundation (collectively, "Eclipse spaces"), within any Eclipse-organized event or meeting, and in public spaces when an individual is representing an Eclipse Foundation Project, Working Group, Interest Group, or their communities. Examples of representing a Project or community include posting via an official social media account, personal accounts, or acting as an appointed representative at an online or offline event. Representation of Projects, Working Groups, and Interest Groups may be further defined and clarified by Committers, Project Leads, or the Staff. 49 | 50 | ## Enforcement 51 | 52 | Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the Conduct Committee via conduct@eclipse-foundation.org. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. Without the explicit consent of the reporter, the Conduct Committee is obligated to maintain confidentiality with regard to the reporter of an incident. The Conduct Committee is further obligated to ensure that the respondent is provided with sufficient information about the complaint to reply. If such details cannot be provided while maintaining confidentiality, the Conduct Committee will take the respondent‘s inability to provide a defense into account in its deliberations and decisions. Further details of enforcement guidelines may be posted separately. 53 | 54 | Staff, Committers and Project Leads have the right to report, remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code, or to block temporarily or permanently any Contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. Any such actions will be reported to the Conduct Committee for transparency and record keeping. 55 | 56 | Any Staff (including officers and directors of the Eclipse Foundation), Committers, Project Leads, or Conduct Committee members who are the subject of a complaint to the Conduct Committee will be recused from the process of resolving any such complaint. 57 | 58 | ## Responsibility 59 | 60 | The responsibility for administering this Code rests with the Conduct Committee, with oversight by the Executive Director and the Board of Directors. For additional information on the Conduct Committee and its process, please write to . 61 | 62 | ## Investigation of Potential Code Violations 63 | 64 | All conflict is not bad as a healthy debate may sometimes be necessary to push us to do our best. It is, however, unacceptable to be disrespectful or offensive, or violate this Code. If you see someone engaging in objectionable behavior violating this Code, we encourage you to address the behavior directly with those involved. If for some reason, you are unable to resolve the matter or feel uncomfortable doing so, or if the behavior is threatening or harassing, please report it following the procedure laid out below. 65 | 66 | Reports should be directed to . It is the Conduct Committee’s role to receive and address reported violations of this Code and to ensure a fair and speedy resolution. 67 | 68 | The Eclipse Foundation takes all reports of potential Code violations seriously and is committed to confidentiality and a full investigation of all allegations. The identity of the reporter will be omitted from the details of the report supplied to the accused. Contributors who are being investigated for a potential Code violation will have an opportunity to be heard prior to any final determination. Those found to have violated the Code can seek reconsideration of the violation and disciplinary action decisions. Every effort will be made to have all matters disposed of within 60 days of the receipt of the complaint. 69 | 70 | ## Actions 71 | Contributors who do not follow this Code in good faith may face temporary or permanent repercussions as determined by the Conduct Committee. 72 | 73 | This Code does not address all conduct. It works in conjunction with our [Communication Channel Guidelines](https://www.eclipse.org/org/documents/communication-channel-guidelines/), [Social Media Guidelines](https://www.eclipse.org/org/documents/social_media_guidelines.php), [Bylaws](https://www.eclipse.org/org/documents/eclipse-foundation-be-bylaws-en.pdf), and [Internal Rules](https://www.eclipse.org/org/documents/ef-be-internal-rules.pdf) which set out additional protections for, and obligations of, all contributors. The Foundation has additional policies that provide further guidance on other matters. 74 | 75 | It’s impossible to spell out every possible scenario that might be deemed a violation of this Code. Instead, we rely on one another’s good judgment to uphold a high standard of integrity within all Eclipse Spaces. Sometimes, identifying the right thing to do isn’t an easy call. In such a scenario, raise the issue as early as possible. 76 | 77 | ## No Retaliation 78 | 79 | The Eclipse community relies upon and values the help of Contributors who identify potential problems that may need to be addressed within an Eclipse Space. Any retaliation against a Contributor who raises an issue honestly is a violation of this Code. That a Contributor has raised a concern honestly or participated in an investigation, cannot be the basis for any adverse action, including threats, harassment, or discrimination. If you work with someone who has raised a concern or provided information in an investigation, you should continue to treat the person with courtesy and respect. If you believe someone has retaliated against you, report the matter as described by this Code. Honest reporting does not mean that you have to be right when you raise a concern; you just have to believe that the information you are providing is accurate. 80 | 81 | False reporting, especially when intended to retaliate or exclude, is itself a violation of this Code and will not be accepted or tolerated. 82 | 83 | Everyone is encouraged to ask questions about this Code. Your feedback is welcome, and you will get a response within three business days. Write to . 84 | 85 | ## Amendments 86 | 87 | The Eclipse Foundation Board of Directors may amend this Code from time to time and may vary the procedures it sets out where appropriate in a particular case. 88 | 89 | ### Attribution 90 | 91 | This Code was inspired by the [Contributor Covenant](https://www.contributor-covenant.org/), version 1.4, available [here](https://www.contributor-covenant.org/version/1/4/code-of-conduct/). 92 | 93 | [^1]: Capitalized terms used herein without definition shall have the meanings assigned to them in the Bylaws. -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to Trace Server Protocol 2 | 3 | Thanks for your interest in the [Trace Server Protocol][protocol]! 4 | The following is a set of guidelines for contributing to the protocol. 5 | 6 | ## How to Contribute 7 | 8 | In order to contribute, please first [open an issue][issues] that clearly describes the bug you 9 | intend to fix or the feature you would like to add. Make sure you provide a way to reproduce 10 | the bug or test the proposed feature. 11 | 12 | Once you have your code ready for review, please open a [pull request][pr]. 13 | 14 | A committer will then review your contribution and help to get it merged. 15 | 16 | ## Code of Conduct 17 | 18 | This project is governed by the [Eclipse Community Code of Conduct](CODE_OF_CONDUCT.md). 19 | By participating, you are expected to uphold this code. 20 | 21 | ## Eclipse Development Process 22 | 23 | This Eclipse Foundation open project is governed by the [Eclipse Foundation 24 | Development Process][dev-process] and operates under the terms of the [Eclipse IP Policy][ip-policy]. 25 | 26 | ## Eclipse Contributor Agreement 27 | 28 | In order to be able to contribute to Eclipse Foundation projects you must 29 | electronically sign the [Eclipse Contributor Agreement (ECA)][eca]. 30 | 31 | The ECA provides the Eclipse Foundation with a permanent record that you agree 32 | that each of your contributions will comply with the commitments documented in 33 | the Developer Certificate of Origin (DCO). Having an ECA on file associated with 34 | the email address matching the "Author" field of your contribution's Git commits 35 | fulfills the DCO's requirement that you sign-off on your contributions. 36 | 37 | For more information, please see the [Eclipse Committer Handbook][handbook]. 38 | 39 | ## Contact 40 | 41 | For questions related to the Trace Server Protocol, please open a GitHub [issue tracker][issues]. 42 | 43 | The Trace Server Protocol is part of `eclipse-cdt-cloud`. If you have any questions regarding CDT Cloud, 44 | please refer to the contact options listed on the [CDT.Cloud website][cdt]. 45 | 46 | [cdt]: https://cdt-cloud.io/contact/ 47 | [dev-process]: https://eclipse.org/projects/dev_process 48 | [eca]: https://www.eclipse.org/legal/ECA.php 49 | [handbook]: https://www.eclipse.org/projects/handbook/#resources-commit 50 | [ip-policy]: https://www.eclipse.org/org/documents/Eclipse_IP_Policy.pdf 51 | [issues]: https://github.com/eclipse-cdt-cloud/trace-server-protocol/issues 52 | [pr]: https://github.com/eclipse-cdt-cloud/trace-server-protocol/pulls 53 | [protocol]: https://github.com/eclipse-cdt-cloud/trace-server-protocol 54 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # trace-server-protocol 2 | 3 | Specification of the Trace Server Protocol 4 | 5 | This protocol is built to decouple the backend and frontend of trace analysers, allowing traces to reside and be analysed on the backend, and visual models to be exchanged with a variety of clients. 6 | 7 | The protocol is meant to be RESTful, over HTTP. 8 | 9 | The specification is currently written in **OpenAPI 3.0** and can be pretty-visualized in the [github pages][tspGhPages]. 10 | 11 | **👋 Want to help?** Read our [contributor guide][contributing]. 12 | 13 | ## Current version 14 | 15 | The current version of the specification is currently implemented and supported in the [Trace Compass trace-server][tcServer] (reference implementation) and what is currently supported by the [tsp-typescript-client][tspClient]. 16 | 17 | Swagger can be used to generate the API version implemented in Trace Compass trace-server (see [here](#generate-the-specification)). 18 | 19 | ## Future version 20 | 21 | Some proposal for additional endpoints and features are documented in the `./API-proposed.yaml`. All the proposed changes are still not confirmed and can change. The pretty-visualized file can be found [here][apiProposed]. A diff of the current version and future version will show the differences. 22 | 23 | Once an update has been approved it will be migrated to the main `./API.yaml` file. 24 | 25 | ## Update manually 26 | 27 | The specification should be edited with the [OpenAPI (Swagger) Editor extension][vscodeOpenapi] for VS Code. 28 | 29 | The latter extension is assumed for consistent formatting of the `./API-proposed.yaml` file over time. 30 | 31 | ## Generate the specification 32 | 33 | ### Setup 34 | 35 | To initialize a local virtual environment, type the following commands in the root directory: 36 | 37 | ```shell 38 | python3 -m venv .venv 39 | source .venv/bin/activate 40 | pip install -r requirements.txt 41 | ``` 42 | 43 | The virtual environment can be replaced with another local setup. 44 | 45 | ### Generate the API 46 | 47 | Swagger has recently been added to the Trace Compass trace-server (reference implementation). 48 | 49 | * Below is how to generate the TSP version, according to Swagger in trace-server. 50 | * The generated TSP should match the current supported version of the TSP. Any differences may be pushed for review. 51 | * `API.yaml` shows now the current supported version of the TSP. 52 | 53 | 1. Import all [TC][tracecompass] and [incubator][incubator] projects in Eclipse; branch, Target Platform and API Baseline set to `master`. 54 | 1. Open `traceserver.product` file in plug-in `org.eclipse.tracecompass.incubator.trace.server.product`. 55 | 1. Click on the `Run` button on the top right corner of the opened `traceserver.product`. 56 | 1. Browse [to here][apiyaml] ([swagger][swagger]) or so to generate server's TSP. 57 | 1. The resulting file is stored in the user's Downloads directory; e.g.: `~/Downloads/openapi.yaml` 58 | 1. Copy `~/Downloads/openapi.yaml` to this directory. 59 | 1. Update the latter with its license information and remove extra information: `./openapi.py` 60 | 1. The resulting diff between `API.yaml` and `openapi.yaml` can then be pushed for review. 61 | * Note, that the order of fields, components etc. might be different everytime the API is generated using swagger-core. This is due to how swagger-core is implemented. 62 | 1. Make sure to transfer the diffs to `API-proposed.yaml` as well. 63 | 1. `openapi.yaml` should not be merged to the repository and can be deleted when not needed anymore. 64 | 65 | [apiProposed]: https://eclipse-cdt-cloud.github.io/trace-server-protocol/proposed/ 66 | [apiyaml]: http://localhost:8080/tsp/api/openapi.yaml 67 | [contributing]: CONTRIBUTING.md 68 | [incubator]: https://projects.eclipse.org/projects/tools.tracecompass.incubator/developer 69 | [swagger]: https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-configuration#openapiresource 70 | [tcServer]: https://download.eclipse.org/tracecompass.incubator/trace-server/rcp/ 71 | [tracecompass]: https://projects.eclipse.org/projects/tools.tracecompass/developer 72 | [tspClient]: https://github.com/eclipse-cdt-cloud/tsp-typescript-client 73 | [tspGhPages]: https://eclipse-cdt-cloud.github.io/trace-server-protocol/ 74 | [vscodeOpenapi]: https://marketplace.visualstudio.com/items?itemName=42Crunch.vscode-openapi 75 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Vulnerability Reporting Policy 2 | 3 | If you think or suspect that you have discovered a new security vulnerability in this project, please __do not__ disclose it on GitHub, e.g. in an issue, a PR, or a discussion. Any such disclosure will be removed/deleted on sight, to promote orderly disclosure, as per the [Eclipse Foundation Vulnerability Reporting Policy][policy]. 4 | 5 | Instead, please report any potential vulnerability to the Eclipse Foundation [Security Team][security]. Make sure to provide a concise description of the issue, a CWE, and other supporting information. 6 | 7 | [policy]: https://www.eclipse.org/security/policy.php 8 | [security]: https://www.eclipse.org/security -------------------------------------------------------------------------------- /VERSIONING_STRATEGY.md: -------------------------------------------------------------------------------- 1 | # TSP Versioning Strategy 2 | 3 | At the moment, TSP is not yet at version 1.0.0. 4 | APIs will be added and updated until we reach that version, which might include making some breaking changes. 5 | 6 | Once we do achieve such a milestone, a versioning and deprecation strategy will need to be implemented to maintain and update the TSP. This document will outline this strategy and why certain choices where made regarding the versioning of the TSP. 7 | 8 | There are generally 3 main ways of versioning a REST API: 9 | 10 | - [URL / URI Versioning](#url--uri-versioning) 11 | - [Query Parameters Versioning](#query-parameters-versioning) 12 | - [Custom Headers Versioning](#custom-headers-versioning) 13 | 14 | ## URL / URI Versioning 15 | 16 | The URL could look something like this: `/tsp/api/v2/experiments/...` 17 | 18 | Pros: 19 | 20 | - Most visible for users. 21 | - Easiest to understand and implement. 22 | - Industry standard. 23 | 24 | Cons: 25 | 26 | - Can lead to URL pollution. 27 | - In our current implementation of the TSP, it can lead to duplicated code to support multiple versions. As such, a deprecation startegy must be devised to avoid supporting multiple versions for too long. 28 | 29 | Best use: versioning the whole API instead of versioning specific endpoints. 30 | 31 | ## Query Parameters Versioning 32 | 33 | The URL could look something like this: `/tsp/api/v2/experiments?version=2/...` 34 | 35 | Pros: 36 | 37 | - Good user visibility. 38 | - Easy to understand and implement. 39 | 40 | Cons: 41 | 42 | - Increased URL pollution. 43 | - Can lead to caching issues. 44 | - Can lead to version differences between specific endpoints, depending on the implementation. This can be confusing for the user of the API. 45 | 46 | Best use: quick prototyping / testing or for versioning specific endpoints. 47 | 48 | ## Custom Headers Versioning 49 | 50 | This technique involves sending a header with the request which might contain something like: `Accept: version=2.0` 51 | 52 | Pros: 53 | 54 | - URL is kept clean and uncluttered. 55 | - Best practice for REST APIs, since the versioning is decoupled from the resources URIs. 56 | 57 | Cons: 58 | 59 | - Less visibility. 60 | - Harder to understand for the end user. He has to send a header with the version number instead of changing the URL. 61 | - Hard to determine if the version number refers to an endpoint or to the whole API. 62 | 63 | Best use: complex scenarios. 64 | 65 | ## Decision Taken 66 | 67 | Once the TSP is stable enough for Version 1.0.0, we will proceed with URL versioning for the major version as it is the industry standard and it offers the most visibility for users. In addition, an endpoint will be added to get the actual semantic version (major.minor.patch) of the TSP. Finally, a deprecation strategy will be formulated to avoid having to support multiple versions of the API, which can lead to duplicated code in the codebase. 68 | -------------------------------------------------------------------------------- /openapi.license: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Copyright (c) 2018, 2024 Ericsson 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | ############################################################################### 16 | -------------------------------------------------------------------------------- /openapi.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: UTF-8 -*- 3 | # 4 | # The MIT License (MIT) 5 | # 6 | # Copyright (C) 2021 - Ericsson 7 | # 8 | # Permission is hereby granted, free of charge, to any person obtaining a copy 9 | # of this software and associated documentation files (the "Software"), to deal 10 | # in the Software without restriction, including without limitation the rights 11 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | # copies of the Software, and to permit persons to whom the Software is 13 | # furnished to do so, subject to the following conditions: 14 | # 15 | # The above copyright notice and this permission notice shall be included in 16 | # all copies or substantial portions of the Software. 17 | # 18 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 24 | # SOFTWARE. 25 | 26 | """See ./README.md for how to use this file.""" 27 | 28 | import os 29 | import re 30 | 31 | NAME = "openapi" 32 | FILE = NAME + ".yaml" 33 | TEMP = NAME + ".tmp" 34 | LICS = NAME + ".license" 35 | UTF8 = "utf-8" 36 | 37 | # shutil copy didn't work locally on macOS. 38 | with open(TEMP, 'w', encoding=UTF8) as tmp: 39 | with open(LICS, encoding=UTF8) as license_text: 40 | for line in license_text: 41 | tmp.write(line) 42 | FILTER = False 43 | QUERY_P = False 44 | WADL = False 45 | with open(FILE, encoding=UTF8) as yaml: 46 | for line in yaml: 47 | if re.match(r'^\s\s/.+:$', line): 48 | # line is a path; check if wadl to remove it: 49 | WADL = "application.wadl" in line 50 | elif WADL: 51 | # wadl stops if no longer within a wadl path: 52 | WADL = not re.match(r'^\S+:$', line) 53 | if not WADL: 54 | if QUERY_P: 55 | # previous line was a QueryParameters one, maybe this one is too: 56 | QUERY_P = re.match(r'^\s\s\s\s\s\stype: object$', line) 57 | else: 58 | # if QueryParameters lines, will remove these: 59 | QUERY_P = re.match(r'^\s\s\s\sQueryParameters:$', line) 60 | # if Filter lines present unexpectedly, cancel QueryParameters removal: 61 | FILTER = FILTER or re.match(r'^\s\s\s\sFilter:$', line) 62 | if not QUERY_P or FILTER: 63 | tmp.write(line) 64 | 65 | os.rename(TEMP, FILE) 66 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | autopep8 2 | pylint 3 | --------------------------------------------------------------------------------