An interactive evaluation platform for scalable time series visualization methods across performance and accuracy dimensions.
- Java 17
- Maven
- Node.js
- Docker & Docker Compose
- Clone the Repository
git clone https://github.com/athenarc/TimeVizBench.git
- Navigate into the repository:
cd TimeVizBench
-
Go to the backend directory:
cd backend
-
Run Maven to package the Spring Boot application:
mvn clean install
-
A .jar file (e.g., time-viz-bench-1.0.jar) will appear in the target directory.
java -jar target/time-viz-bench-1.0.jar
The backend will now run and wait for requests.
- Navigate to the frontend directory:
cd ../frontend
- Install dependencies (if not already done):
npm install
- Start the development server:
npm start
In a new terminal, from the frontend folder, run:
docker compose up -d
This spins up an NGINX container configured to serve the application.
Open your browser at:
The frontend should communicate with the locally running backend.
From the project root, navigate to backend:
cd backend
mvn clean install
java -jar target/time-viz-bench-1.0.jar
Go to the frontend folder from the project root:
cd frontend
3. Copy Environment and Configuration TemplatesInside the frontend folder, you’ll see the .env.example file and a templates directory:
cp .env.example .env
cp templates/dev.conf.template templates/default.conf.template
This sets up your environment variables and the development NGINX config.
npm run build
This compiles the frontend into production-ready static files.
Still in the frontend directory (where your docker-compose.yml resides), run:
docker compose up -d
This will launch the backend container (using the .jar built in step 1) and the NGINX container (to serve the newly built frontend).
Visit:
You should see the application running in its containerized form (backend + frontend via NGINX).
TimeVizBench automatically discovers and registers visual methods. Once implemented, they become available in the UI with auto-generated parameter controls.
@VisualMethod(
name = "ExampleAverage",
description = "An example method that computes averages over time intervals"
)
public class SimpleAverageMethod implements Method {
// Parameters automatically appear as UI controls
// This is a query parameter that decides the agg. interval
@Parameter(
name = "Interval (ms)",
description = "The aggregation interval in milliseconds",
min = 1000,
max = 12000000000L,
step = 10000,
defaultValue = 10000,
isQueryParameter = true
)
private long interval;
}
The method interface requires two main methods:
// Handles method initialization
@Override
public void initialize(String schema, String datasetId,
DatasourceConnector datasourceConnector,
Map<String, String> params) {
// Validation and setup logic
}
// Processes visualization queries
@Override
public VisualQueryResults executeQuery(VisualQuery query) {
// Query processing logic
}
- Place your implementation in the methods package
- The system automatically:
- Discovers the method via @VisualMethod annotation
- Creates UI controls based on @Parameter annotations
- Makes the method available in the visualization interface
- Handles parameter validation and query execution
See SimpleAverageMethod.java
for a complete reference implementation.