Commit 0adea515 authored by Yuri Blankenstein's avatar Yuri Blankenstein
Browse files

Merge branch '18-create-a-website-around-eclipse-trace4cps' into 'develop'

Resolve "Create a website around Eclipse TRACE4CPS"

Closes #18

See merge request !13
parents 61745b29 a5bb165c
Pipeline #4429 passed with stage
in 0 seconds
......@@ -62,8 +62,8 @@ pipeline {
GIT_DATE_EPOCH=$(git log -1 --format=%cd --date=raw | cut -d ' ' -f 1)
GIT_DATE=$(date -d @$GIT_DATE_EPOCH -u +%Y%m%d-%H%M%S)
# Configure 'jenkins' profile for build.
# Configure update snapshots and fail-at-end for build.
BUILD_ARGS="-U -fae"
# Configure 'sign' profile for build.
# Sign 'develop' branch, to allow release signing for 'nightly' deployment.
......@@ -72,17 +72,22 @@ pipeline {
# Override the 'trace4cps.version.enduser' property for releases. Remains 'dev' otherwise.
# Override the 'trace4cps.version.enduser' property for releases,
# 'nightly' for the develop branch or 'dev' otherwise.
if [[ "$TAG_NAME" =~ ^v[0-9]+\\.[0-9]+.*$ ]]; then
BUILD_ARGS="$BUILD_ARGS -Dtrace4cps.version.enduser=$TAG_NAME"
elif [[ "$GIT_BRANCH" == "develop" ]]; then
BUILD_ARGS="$BUILD_ARGS -Dtrace4cps.version.enduser=nightly"
# Override the 'trace4cps.version.qualifier' property for Jenkins builds.
# It starts with 'v' and the Git date, followed by a qualifier postfix.
# For releases, the qualifier postfix is the postfix of the version tag (if any).
# For non-releases, the qualifier postfix is 'dev'.
# For non-releases, the qualifier postfix is 'nightly'.
if [[ "$TAG_NAME" =~ ^v[0-9]+\\.[0-9]+.*$ ]]; then
QUALIFIER_POSTFIX=$(echo "$TAG_NAME" | sed -e 's/^[^-]*//g')
elif [[ "$GIT_BRANCH" == "develop" ]]; then
......@@ -96,13 +101,19 @@ pipeline {
post {
success {
// Website.
archiveArtifacts 'releng/*'
// Update site.
archiveArtifacts 'releng/org.eclipse.trace4cps.repository/target/*'
// Runtime Verification CLI.
archiveArtifacts 'temporallogic/*'
stage('Deploy') {
stage('Deploy Downloads') {
when {
anyOf {
branch 'develop'
......@@ -112,7 +123,6 @@ pipeline {
environment {
DOWNLOADS_PATH = "/home/data/httpd/"
WEBSITE_GIT_URL = "ssh://"
RELEASE_VERSION = getReleaseVersionFromTag(env.TAG_NAME)
steps {
......@@ -128,12 +138,54 @@ pipeline {
// Create directory for this release.
sh 'ssh mkdir -p ${DOWNLOADS_PATH}/${RELEASE_VERSION}/'
// Website.
sh 'scp -r releng/* ${DOWNLOADS_URL}/${RELEASE_VERSION}/'
// Update site (archive).
sh 'scp -r releng/org.eclipse.trace4cps.repository/target/* ${DOWNLOADS_URL}/${RELEASE_VERSION}/'
// Update site (extracted).
sh 'ssh mkdir -p ${DOWNLOADS_PATH}/${RELEASE_VERSION}/update-site/'
sh 'scp -r deploy/update-site/* ${DOWNLOADS_URL}/${RELEASE_VERSION}/update-site/'
// Runtime Verification CLI.
sh 'scp -r temporallogic/* ${DOWNLOADS_URL}/${RELEASE_VERSION}/'
stage('Deploy Website') {
when {
anyOf {
branch 'develop'
tag pattern: "v\\d+\\.\\d+.*", comparator: "REGEXP"
environment {
WEBSITE_GIT_URL = "ssh://"
RELEASE_VERSION = getReleaseVersionFromTag(env.TAG_NAME)
steps {
// Deploy website.
sshagent(['']) {
sh '''
mkdir -p deploy/www
git clone ${WEBSITE_GIT_URL} deploy/www
rm -rf deploy/www/${RELEASE_VERSION}
mkdir -p deploy/www/${RELEASE_VERSION}
unzip -q releng/* -d deploy/www/${RELEASE_VERSION}/
dir('deploy/www') {
sh '''
git config ""
git config "genie.trace4cps"
git config push.default simple # Required to silence Git push warning.
git add -A
git diff-index --quiet HEAD || git commit -q -m "Website release ${RELEASE_VERSION}." -m "Generated from commit ${GIT_COMMIT}"
git push
......@@ -29,6 +29,9 @@
<!-- 'v20210609-141908-RC1' for release candidates, and 'v20210609-141908' for final releases. -->
<!-- The prefix to use for released binaries -->
<!-- Building Java8 compliant code -->
......@@ -51,6 +54,14 @@
<!-- Eclipse Dash license tool. -->
<!-- Documentation plug-in versions. -->
<!-- Checkstyle version. Should match version used by Eclipse Checkstyle Plugin. -->
......@@ -314,6 +325,49 @@
<!-- AsciiDoctor documentation generation configuration. -->
<!-- Attributes common to all documents. -->
<asciimath />
Eclipse Dash, license check, configuration.
Plugin executed manually, not during Maven build.
......@@ -37,7 +37,7 @@
<repositoryName>Eclipse TRACE4CPS Update Site (Incubation)</repositoryName>
<!-- Custom archive file name (excluding file extension). -->
<?xml version="1.0" encoding="UTF-8"?>
// Copyright (c) 2021 Contributors to the Eclipse Foundation
// This program and the accompanying materials are made
// available under the terms of the Eclipse Public License 2.0
// which is available at
// SPDX-License-Identifier: EPL-2.0
ifndef::imgsdir[:imgsdir: ../images]
ifndef::trace4cps-version-enduser[:trace4cps-version-enduser: dev]
ifndef::trace4cps-binary-prefix[:trace4cps-binary-prefix: eclipse-trace4cps-incubation]
:idseparator: -
:listing-caption: Listing
:source-highlighter: coderay
// enable kbd: / menu: / btn: UI macros
:experimental: true
// Enable Science, Technology, Engineering and Math (STEM) expressions in the browser
// If we use this attribute in a heading, we need to encapsulate the whole heading text in pass:normal[...] macro due to bug
// (Replacements in an attribute value not substituted in headings (section titles))
:trace: Eclipse TRACE4CPS
Copyright (c) 2021 Contributors to the Eclipse Foundation
This program and the accompanying materials are made
available under the terms of the Eclipse Public License 2.0
which is available at
SPDX-License-Identifier: EPL-2.0
.menu, .submenu, .menuitem, .menuref {
background-color: Menu;
.button {
border: 1px solid ButtonFace;
Styling too similar to a real button is considered bad practice, see
border: 2px outset ButtonFace;
background-color: ButtonFace;
padding-left: 0.5ex;
padding-right: 0.5ex;
font-weight: normal;
font-family: "Segoe UI","Open Sans","DejaVu Sans",sans-serif;
white-space: nowrap;
.button:before {
content: none !important;
.button:after {
content: none !important;
\ No newline at end of file
// Copyright (c) 2021 Contributors to the Eclipse Foundation
// This program and the accompanying materials are made
// available under the terms of the Eclipse Public License 2.0
// which is available at
// SPDX-License-Identifier: EPL-2.0
// Enable custom style in _main-docinfo.html
:xrefstyle: short
= {trace}
*{trace}* is a *customizable, domain-independent and source-independent Gantt chart viewer* with mathematically-founded analysis support.
{trace} supports the visualization of activities on resources as a function of time (Gantt charts), as well as the visualization of continuous signals.
{trace} also supports several analysis techniques to identify bottlenecks, check formally-specified (performance) properties, and analyze resource usage.
A key feature of {trace} is the ability to configure the identification, selection and visualization of such information to match any specific application domain.
== Visualization and analysis of concurrent system activities
{trace} helps us to understand complicated behavior over time for all kinds of systems through its domain-independent capabilities for visualizing and analyzing concurrent activities that are encoded in execution traces.
{trace} supports claims on resources, events, dependencies, and continuous signals.
<<fig-trace>> shows a typical {trace} Gantt chart of an application that iteratively executes activities A-G.
The claims model executions of these system activities and are shown as colored rectangles with a start and end time.
Data flow between the activities is modeled by dependencies between claims, shown as arrows between the claims.
Events, such as the start and end of an iteration of the application, are shown at the bottom as vertical arrows.
The signal, above the events and below the claims, shows the throughput of the modeled system.
.Example visualization of system activity over time (x-axis).
== Understanding system behavior over time
There are many reasons why a system’s behavior over time is difficult to understand or, worse, confusing – even when the system is performing as designed.
An example is a situation in which many concurrent activities share resources.
Unforeseen interactions may arise due to the specific timing of the activities.
Moreover, if the timing of the activities changes (e.g. due to an upgrade to the computational platform), the interactions may also change, which could result in significantly different behavior.
Insight into the hows and whys of a system’s behavior over time is of paramount importance for making effective (design) choices and trade-offs in all phases of the system lifecycle, from the design of a new system to the maintenance of an old legacy system.
{trace} can help with this.
== Execution traces to capture behavior over time
{trace} works with execution traces.
These capture (a single) system behavior over time.
An execution trace contains time-stamped data for claims, events and signals.
{trace} extends this with concepts from the Y-chart paradigm and a number of user-defined attributes (e.g. the name of the activity) in order to be tailored to a specific problem domain.
This execution trace concept is generic, which makes {trace} widely applicable:
All levels of abstraction::
The trace format can capture all levels of abstraction, from low-level embedded activities to system-level activities.
The trace format is domain-independent but nevertheless has the means to be tailored to a specific domain via the user-defined attributes.
{trace} input can be created from any source, e.g. from the log files of legacy systems or from a discrete-event simulation model.
.The Y-chart method
The Y-chart paradigm decomposes a system into an application, a platform, and the mapping between them, fostering reuse when one of these parts changes.
Furthermore, it defines a feedback cycle to allow systematic design-space exploration (<<fig-ychart>>).
The Y-chart concepts of application, mapping and platform are realized in {trace} through the decomposition of an activity (e.g. an image-processing computation) into one or more claims on resources for a certain amount of time (e.g. two cores of the CPU and 20 MB of RAM for 50 ms).
These are the main elements of the execution traces that capture system behavior (star-1 in <<fig-ychart>>).
To provide feedback on the system under analysis (star-2 in <<fig-ychart>>), {trace} provides extensive visualization and analysis of execution traces.
== Visualization and analysis of execution traces
{trace} provides insights into the system dynamics of all kinds of systems through the visualization and analysis of execution traces (<<fig-workflow>>).
{trace}' Gantt chart view offers coloring, grouping and filtering options.
This visualization alone is already very powerful and can bring quick insights into the system dynamics.
{trace} also provides several analysis methods, which sets it apart from other Gantt-chart visualization tools.
Critical-path analysis::
Can be used to detect activities and resources that are bottlenecks for performance.
Distance analysis::
Can be used to compare execution traces with respect to structure, e.g. to check a model trace against an implementation trace.
Runtime verification::
Provides a means to formally specify and verify the properties of execution traces using temporal logic.
It is useful for expressing and checking performance properties, e.g., “the processing latency is at most 50 ms.”
Latency, throughput and work-in-progress analysis::
Provides built-in methods to derive these properties from an execution trace.
Behavioral analysis::
Can be used to visualize repetitive patterns that often are present in systems such as image-processing pipelines and manufacturing machines.
Resource-usage analysis::
Can quickly give insights into the details of the resource usage.
{trace} and the underlying concepts are relatively easy to learn, the trace input is easy to use, and the application of {trace} has great potential benefits.
.A specialization of Figure 2 for {trace}
== Installation of {trace}
The {trace} P2 update site contains all plugins and features, for easy integration into OSGi-based applications.
{trace} {trace4cps-version-enduser} is available as an Eclipse P2 update site:
Can't wait for the next release?
A link:/trace4cps/nightly/index.html#installation[nightly build] of this page is also available, it is built from the[develop branch].
Please note that APIs, syntaxes and/or functionality might not be stable for nightly builds.
Below are instructions to install {trace} from scratch.
The first step is to install the Eclipse IDE:
* Install a 64-bit Java 1.8.
* Download an Eclipse IDE version 2020-06, e.g.,
* Unzip the IDE, e.g., to the directory `trace`.
* Start the Eclipse IDE via `trace/eclipse/eclipse.exe`.
* Select a workspace directory: Use the browse button and create a directory, e.g., “trace/workspace”.
* Close the Welcome tab.
The second step is to install the {trace} feature:
* Select menu:Help[Install New Software...]
* Click btn:[Add] and put a name (e.g., “{trace} update site”) and location: +
* Click btn:[OK] and check that the window now shows the {trace} category.
* Expand the {trace} category, and select the {trace} feature and click btn:[Next].
* Complete the remaining steps of the installation process (including acceptance of the license agreement and a restart of the Eclipse IDE).
=== Installation of the examples
* Download the link:html/content/[trace examples zip file] from this site or from the Eclipse help pages following the sub-steps below.
** Open the Help menu via menu:Help[Help Contents].
** Navigate to the {trace} user manual, and select the “Running example” section.
** At the bottom of the page is a link to download a zip file with examples.
* Unzip the trace examples file in the “{trace}” directory (ensure that a directory is created with a number of `*.etf` files).
* Start the new project wizard from the menu menu:File[New, Project...]
* Select “General -> Project” in the tree and click “Next”.
* Choose a project name, e.g., “trace examples”, uncheck the “use default location” option, and use the btn:[Browse...] button to select the directory with the unzipped example content.
* Finally, click btn:[Finish].
Verify that the “Package Explorer” view now shows the contents of the zip file.
Double-click `reference.etf` and check whether a Gantt-chart view is shown.
If this is the case, then installation has been successful.
== Learn more
If you want to learn more, then read the link:html/content/manual.html[{trace} user manual].
It describes the input format of {trace} and contains an explanation of the visualization and analysis features.
Furthermore, it contains a <<installation-examples, zip file with example traces>>.
TIP: Once the {trace} feature is <<installation, installed>>, the Eclipse Help menu also contains this user manual.
* M. Hendriks, T. Basten,
_“Performance engineering with {trace}”_,
Bits & Chips 5, 14 September 2018.
* M. Hendriks, F.W. Vaandrager.
_“Reconstructing Critical Paths from Execution Traces”_,
CSE '12 Proceedings of the 2012 IEEE 15th International Conference on Computational Science and Engineering.
IEEE Computer Society Washington, 2012.
* M. Hendriks, M. Geilen, A.R.B. Behrouzian, T. Basten, H. Alizadeh, and D. Goswami.
_“Checking metric temporal logic with {trace}”_,
in 16th International Conference on Application of Concurrency to System Design (ACSD 2016), Torun, Poland, 2016.
doi: 10.1109/ACSD.2016.13
* M. Hendriks, J. Verriet, T. Basten, B. Theelen, M. Brassé, and L. Somers,
_“Analyzing execution traces: critical-path analysis and distance analysis”_,
International Journal on Software Tools for Technology Transfer, 2016.
Copyright (c) 2021 Contributors to the Eclipse Foundation
This program and the accompanying materials are made
available under the terms of the Eclipse Public License 2.0
which is available at
SPDX-License-Identifier: EPL-2.0
<assembly xmlns="" xmlns:xsi=""
<outputDirectory />
\ No newline at end of file
Copyright (c) 2021 Contributors to the Eclipse Foundation
This program and the accompanying materials are made
available under the terms of the Eclipse Public License 2.0
which is available at
SPDX-License-Identifier: EPL-2.0
<project xmlns="" xmlns:xsi=""
<name>TRACE4CPS Website</name>
<!-- Attributes common to all output formats -->
<!-- Rendering the website -->
<imagesdir />