A Time Series Data Browser

Overview

binjr

Build Status Github Release Maven Central

trailer

Contents

What is binjr?

binjr is a time series browser; it renders time series data produced by other applications as dynamically editable representations and provides advanced features to navigate the data smoothly and efficiently (drag & drop, zoom, history, detachable tabs, advanced time-range picker).

It is a standalone client application, that runs independently of the applications that produce the data; there are no server or server-side components dedicated to binjr that need to be installed on the source.

The user experience in binjr revolves around enabling users to compose a custom view by using any of the time-series exposed by the source, simply by dragging and dropping them on the view.
That view then constantly evolves as users add or remove series from different sources, while navigating through it by changing the time range, the type of chart visualization and smaller aspects such as the color or transparency for each series.
Users can then save the current state of their session at any time to a file, in order to reopen it later or to share it with someone else.

binjr also possesses the ability to visualize time series not only as charts of numeric values, but can be customized to support visualization for any data type; for instance it features out-of-the-box a source adapter for text based log files.

Log files, produced by applications to trace their lifecycle at runtime, typically contain timestamps for each event they contain; so we can think of them as time series, but with data points being textual information instead of numerical values.
In practical terms, this means that a lot of the features built into binjr to compose and navigate time series visualizations can be applied to log files with great benefits.

Behind the scene, binjr uses Apache Lucene to index data from log files; meaning users can use its powerful query language to hack through vast quantities logged events.

It also allows binjr to open log files of any size; unlike most text editors which will fail to load multi gigabytes-sized files as they try to fit it all in memory, binjr will happily index those and present a paginated view so that memory usage remains reasonable, while the backing index ensures navigating and searching is lightning fast.

With these abilities, binjr aims to become the missing link between text editors and command line tools traditionally used to analyse monitoring data locally and full-blown log analytics platforms (e.g. Elastic/Logstash/Kibana stack) that centralizes logs for entire organizations.
It provides many of the same powerful visualization and search features while still remaining a totally local solution (the data never needs to be pushed to the cloud - or anywhere else for that matter), and requiring no setup nor maintenance to speak of.

...and what it isn't

  • binjr is not a system performance collector, nor a collector of anything else for that matter. What it provides is efficient navigation and pretty presentation for time series collected elsewhere.
  • binjr is not a cloud solution. It's not even a server based solution; it's entirely a client application, albeit one that can get its data from remote servers. Think of it as a browser, only just for time series.
  • binjr is not a live system monitoring dashboard. While you can use it to connect to live sources, its feature set is not geared toward that particular task, and there are better tools for that out there. Instead, it aims to be an investigation tool, for when you don't necessarily know what you're looking for beforehand and you'll want to build and change the view of the data as you navigate through it rather than be constrained by pre-determined dashboards.

Features

Data source agnostic

  • Standalone, client-side application.
  • Can connect to any number of sources, of different types, at the same time.
  • Communicates though the APIs exposed by the source.
  • Supports for data sources is extensible via plugins.
  • Supports time-series with numeric (e.g. charts) or text (e.g. logs) values.

Designed for ad-hoc view composition

  • Drag and drop series from any sources directly on the chart view.
  • Mix series from different sources on the same view.
  • Allows charts overlay: create charts with several Y axis and a shared time line.
  • Highly customizable views; choose chart types, change series colours, transparency, legends, etc...
  • Save you work session to a file at any time, to be reopened later or shared with someone else.

Smooth navigation

  • Mouse driven zoom of both X and Y axis.
  • Drag and drop composition.
  • Browser-like, forward & backward navigation of zoom history.
  • Advanced time-range selection widget.
  • The tabs holding the chart views can be detached into separate windows.
  • Charts from different tabs/windows can be synchronized to a common time line.

Fast, responsive & aesthetically pleasing visuals

  • Built on top of JavaFX for a modern look and cross-platform, hardware accelerated graphics.
  • Three different UI themes, to better integrate with host OS and fit user preferences.

Java based application

  • Cross-platform: works great on Linux, macOS and Windows desktops!
  • Strong performances, even under heavy load (dozens of charts with dozens of series and thousands of samples).

Supported data sources

binjr can consume time series data provided by the following data sources:

  • JRDS: A performance monitoring application written in Java.
  • Netdata: distributed, real-time performance and health monitoring for systems and applications
  • Round-Robin Database (RRD) files, produced by RRDtool and RRD4J.
  • Comma Separated Values (CSV) files.
  • Text based, semi-structured log files.
  • A stand-alone demonstration data source.

Getting started

There are several ways to get up and running with binjr:

Download an application bundle

The simplest way to start using binjr is to download an application bundle from the download page.

These bundles contain all the dependencies required to run the app, including a copy of the Java runtime specially crafted to only include the required components and save disk space.
They are less than 60 MB in size and there is one for each of the supported platform: Windows, Linux and macOS.

Simply download the one for your system, unpack it and run binjr to start!

Build from source

You can also build or run the application from the source code using the included Gradle wrapper.
Simply clone the repo from Github and run:

  • ./gradlew build to build the JAR for the all the modules.
  • ./gradlew run to build and start the application straight away.
  • ./gradlew clean packageDistribution to build an application bundle for the platform on which you ran the build.

Please note that it is mandatory to run the clean task in between two executions of the packageDistribution in the same environment.

Download and run the latest version from the command line.

Alternatively, if your environment is properly set up to run Java 11+ and Apache Maven, you can start binjr simply by running a single command line:

  • Linux / macOS:
    mvn exec:java -f <(curl https://binjr.eu/run-binjr.pom)
    
  • Windows:
    curl https://binjr.eu/run-binjr.pom > %temp%\run-binjr.pom & mvn exec:java -f %temp%\run-binjr.pom  
    

See Launch the latest version via Apache Maven in the wiki form more details.

Trying it out

If you'd like to experience binjr's visualization capabilities but do not have a compatible data source handy, you can use the demonstration data adapter.

It is a plugin which embeds a small, stand-alone data source that you can readily browse using binjr.

  1. Make sure binjr is installed on your system and make a note of the folder it is installed in.
  2. Download the binjr-adapter-demo-1.x.x.zip archive from https://github.com/binjr/binjr-adapter-demo/releases/latest
  3. Copy the binjr-adapter-demo-1.x.x.jar file contained in the zip file into the plugins folder of your binjr installation.
  4. Start binjr (or restart it if it was runnning when you copied the plugin) and open the demo.bjr workspace contained in the zip (from the command menu, select Workspaces > Open..., or press Ctrl+O)

Getting help

The documentation can be found here.

If you encounter an issue, or would like to suggest an enhancement or a new feature, you may do so here.

Contributing

At the moment, sources that binjr can use are limited both in types and numbers, which is to be expected given that it is a fully community-driven effort with a tiny number of contributors.

The great thing about it being an open source, community driven project, though, is that should you believe that there is is a use case where binjr could be a good fit but lacks supports for a specific time-series DB or some other feature, there are always ways to make it happen.

So, please, do not hesitate to suggest a new feature or source support request by opening a issue.

Source code contributions are also welcome; if you wish to make one, please fork this repository and submit a pull request with your changes.

How is it licensed?

binjr is released under the Apache License version 2.0.

Special Thanks

yourkit_logo

Special thanks to YourKit for providing us with access to their Java profiler.

YourKit supports open source projects with innovative and intelligent tools for monitoring and profiling Java and .NET applications. YourKit is the creator of YourKit Java Profiler, YourKit .NET Profiler, and YourKit YouMonitor.

Comments
  • Keep the most recently used log filters in the user history

    Keep the most recently used log filters in the user history

    This PR replaces the log filter text field with a combo box and an MRU list of log filters, similar to the MRU list of paths / URIs used when adding a new data source.

    opened by Arkanosis 10
  • Application won't start if JAVA_HOME points to Java8 on Windows

    Application won't start if JAVA_HOME points to Java8 on Windows

    I installed the latest binjr v3.0.1 via the .msi on Windows10 and I got an error very similar to: https://stackoverflow.com/questions/59848805/exception-in-thread-windowsnativerunloopthread-java-lang-nosuchmethoderror-i

    Removing the JAVA_HOME variable fixed the issue.

    opened by antoine-guillou 8
  • Detect missing JavaFX

    Detect missing JavaFX

    Spotted by @rgroux: launching binjr without JavaFX results in an unhelpful error message: “Error: Could not find or load main class eu.fthevenet.binjr.Main”.

    I guess that could be improved by detecting whether JavaFX is available or not, and by asking the user to install JavaFX in the latter case.

    opened by Arkanosis 7
  • Cannot open demo workspace

    Cannot open demo workspace

    With binjr from git master, when opening the demo adapter workspace with plugin installed I get:

    [2022-05-03 18:40:00.567] [ERROR] [AppKit Thread] [eu.binjr.core.controllers.MainViewController] Error loading time series
    javafx.fxml.LoadException:
    file:/Users/mike/Upstreams/binjr/build/app_image/binjr-3.8.0-SNAPSHOT_mac-x86_64/3.8.0-SNAPSHOT/libs/binjr-core-3.8.0-SNAPSHOT.jar!/eu/binjr/views/XYChartsWorksheetView.fxml
    
    	at javafx.fxml.FXMLLoader.constructLoadException(Unknown Source) ~[javafx.fxml:?]
    	at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) ~[javafx.fxml:?]
    	at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) ~[javafx.fxml:?]
    	at javafx.fxml.FXMLLoader.load(Unknown Source) ~[javafx.fxml:?]
    	at eu.binjr.core.controllers.MainViewController.loadWorksheet(MainViewController.java:1082) ~[binjr-core-3.8.0-SNAPSHOT.jar:3.8.0-SNAPSHOT]
    	at eu.binjr.core.controllers.MainViewController.loadWorksheetInTab(MainViewController.java:1159) ~[binjr-core-3.8.0-SNAPSHOT.jar:3.8.0-SNAPSHOT]
    	at eu.binjr.core.controllers.MainViewController.loadWorksheet(MainViewController.java:1022) ~[binjr-core-3.8.0-SNAPSHOT.jar:3.8.0-SNAPSHOT]
    	at eu.binjr.core.controllers.MainViewController.loadWorksheets(MainViewController.java:807) ~[binjr-core-3.8.0-SNAPSHOT.jar:3.8.0-SNAPSHOT]
    	at eu.binjr.core.controllers.MainViewController.lambda$loadWorkspace$41(MainViewController.java:781) ~[binjr-core-3.8.0-SNAPSHOT.jar:3.8.0-SNAPSHOT]
    	at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(Unknown Source) ~[javafx.base:?]
    	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source) ~[javafx.base:?]
    	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source) ~[javafx.base:?]
    	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) ~[javafx.base:?]
    	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) ~[javafx.base:?]
    	at com.sun.javafx.event.EventUtil.fireEventImpl(Unknown Source) ~[javafx.base:?]
    	at com.sun.javafx.event.EventUtil.fireEvent(Unknown Source) ~[javafx.base:?]
    	at javafx.event.Event.fireEvent(Unknown Source) ~[javafx.base:?]
    	at javafx.concurrent.EventHelper.fireEvent(Unknown Source) ~[javafx.graphics:?]
    	at javafx.concurrent.Task.fireEvent(Unknown Source) ~[javafx.graphics:?]
    	at javafx.concurrent.Task.setState(Unknown Source) ~[javafx.graphics:?]
    	at javafx.concurrent.Task$TaskCallable.lambda$call$1(Unknown Source) ~[javafx.graphics:?]
    	at com.sun.javafx.application.PlatformImpl.lambda$runLater$10(Unknown Source) ~[javafx.graphics:?]
    	at java.security.AccessController.doPrivileged(Unknown Source) ~[?:?]
    	at com.sun.javafx.application.PlatformImpl.lambda$runLater$11(Unknown Source) ~[javafx.graphics:?]
    	at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source) ~[javafx.graphics:?]
    Caused by: java.lang.NullPointerException: Cannot invoke "java.lang.ClassLoader.loadClass(String)" because the return value of "javafx.fxml.FXMLLoader.getClassLoader()" is null
    	at javafx.fxml.FXMLLoader.loadTypeForPackage(Unknown Source) ~[javafx.fxml:?]
    	at javafx.fxml.FXMLLoader.loadType(Unknown Source) ~[javafx.fxml:?]
    	at javafx.fxml.FXMLLoader.importClass(Unknown Source) ~[javafx.fxml:?]
    	at javafx.fxml.FXMLLoader.processImport(Unknown Source) ~[javafx.fxml:?]
    	at javafx.fxml.FXMLLoader.processProcessingInstruction(Unknown Source) ~[javafx.fxml:?]
    	... 24 more
    [2022-05-03 18:40:00.575] [ERROR] [AppKit Thread] [eu.binjr.core.dialogs.Dialogs] Failed to load worksheet CPU usage & Memory: Cannot invoke "eu.binjr.common.javafx.controls.TimeRangePicker.selectedRangeProperty()" because "this.timeRangePicker" is null - Failed to load worksheet CPU usage & Memory: Cannot invoke "eu.binjr.common.javafx.controls.TimeRangePicker.selectedRangeProperty()" because "this.timeRangePicker" is null
    
    opened by mikehearn 5
  • Failed to open collectd RRD database

    Failed to open collectd RRD database

    binjr 2.17.0 OS: ArchLinux x86_64

    When I try to add RRD database from /var/lib/collectd/hostname/cpu-0/percent-idle.rrd it fails with following exception:

    eu.binjr.core.data.exceptions.DataAdapterException: Failed to open rrd db
    	at eu.binjr.sources.rrd4j.adapters.Rrd4jFileAdapter.getBindingTree(Rrd4jFileAdapter.java:139)
    	at eu.binjr.core.controllers.MainViewController.buildTreeViewForTarget(MainViewController.java:1099)
    	at eu.binjr.core.controllers.MainViewController.lambda$addSource$37(MainViewController.java:771)
    	at eu.binjr.core.data.async.AsyncTaskManager$1.call(AsyncTaskManager.java:83)
    	at javafx.graphics/javafx.concurrent.Task$TaskCallable.call(Unknown Source)
    	at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
    	at java.base/java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(Unknown Source)
    	at java.base/java.util.concurrent.ForkJoinTask.doExec(Unknown Source)
    	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(Unknown Source)
    	at java.base/java.util.concurrent.ForkJoinPool.scan(Unknown Source)
    	at java.base/java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)
    	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)
    Caused by: java.nio.file.AccessDeniedException: /var/lib/collectd/vostrobook/cpu-0/percent-idle.rrd
    	at java.base/sun.nio.fs.UnixException.translateToIOException(Unknown Source)
    	at java.base/sun.nio.fs.UnixException.rethrowAsIOException(Unknown Source)
    	at java.base/sun.nio.fs.UnixException.rethrowAsIOException(Unknown Source)
    	at java.base/sun.nio.fs.UnixFileSystemProvider.newFileChannel(Unknown Source)
    	at java.base/java.nio.channels.FileChannel.open(Unknown Source)
    	at org.rrd4j.core.RrdNioBackend.<init>(RrdNioBackend.java:91)
    	at org.rrd4j.core.RrdNioBackendFactory.open(RrdNioBackendFactory.java:163)
    	at org.rrd4j.core.RrdBackendFactory.getBackend(RrdBackendFactory.java:511)
    	at org.rrd4j.core.RrdDb.<init>(RrdDb.java:612)
    	at org.rrd4j.core.RrdDb.<init>(RrdDb.java:44)
    	at org.rrd4j.core.RrdDb$Builder.build(RrdDb.java:93)
    	at org.rrd4j.core.RrdDbPool.requestRrdDb(RrdDbPool.java:415)
    	at org.rrd4j.core.RrdDbPool.requestRrdDb(RrdDbPool.java:366)
    	at eu.binjr.sources.rrd4j.adapters.Rrd4jFileAdapter.getBindingTree(Rrd4jFileAdapter.java:108)
    	... 11 more
    

    Database is accessible by user:

    $ file /var/lib/collectd/vostrobook/cpu-0/percent-idle.rrd 
    /var/lib/collectd/vostrobook/cpu-0/percent-idle.rrd: RRDTool DB version 0003 64bit aligned little-endian 64bit long (alpha/amd64/ia64)
    
    regression 
    opened by bunder 5
  • Enhancements to time interval selection

    Enhancements to time interval selection

    Selection of the current time interval is quite rigid at the moment.

    • [x] Whenever one boundary is set so that the interval is negative (i.e. the start date is after the end date), consider shifting the other boundary by a fixed amount instead of throwing on error.

    • [x] Consider adding a further navigation facilities to the interval selections panel (which would tie in with zoom and pan as proposed in #29 )

    enhancement 
    opened by fthevenet 4
  • Number format in table view

    Number format in table view

    Hello, Is there a way to change the number format in table view ?

    For instance, I need to see my value as "1264" instead of "1,26k". binjr number format

    I seems to be simple setting that I was sure to find... but I've searched and I've read the documentation with no success.

    Thanks in advance.

    enhancement 
    opened by mousspi 3
  • Improve datetime boundaries handling when max < min

    Improve datetime boundaries handling when max < min

    Currently, when a boundary is changed in a way that causes max < min, an error is displayed.

    I think the UX would be much better if instead of raising an error, the other boundary was changed automatically. The main argument is that displaying the error is annoying while doing nothing to solve the issue. I the user had planned to change both the min and the max, changing the other boundary automatically would not make it any more complicated anyway.

    The way I see it, the other boundary could be set so that the time frame between min and max is either:

    • the default range (ie. the same as when launching binjr) ;
    • the same as before changing the first boundary (this is how Google Calendar behaves, for example).

    I've a slight preference for the latter which seems more natural to me, but as a heavy Google Calendar user, I'm probably biased.

    Thanks!

    opened by Arkanosis 3
  • Support for timestamp NOT in the first column (CSVAdapter)

    Support for timestamp NOT in the first column (CSVAdapter)

    Dear developers of binjr,

    I was using binjr and it failed to visualize a data file of the following format (see example_datetime_not_in_1st_col.csv):

    Id    col1    col2    col3    SaveTime
    1     1.1     1.1     1.1     2022-02-02 22:22:22
    2     1.1     1.1     1.1     2022-02-02 22:22:23
    ...
    

    The timestamps are in the fifth column instead of the first column.

    When loading the given data file, binjr threw an exception with the following stacktrace:

     java.time.format.DateTimeParseException: Text '1' could not be parsed at index 0
    

    at java.base/java.time.format.DateTimeFormatter.parseResolved0(Unknown Source) at java.base/java.time.format.DateTimeFormatter.parse(Unknown Source) at java.base/java.time.ZonedDateTime.parse(Unknown Source) at eu.binjr.sources.csv.adapters.CsvFileAdapter.lambda$decoderFactory$5(CsvFileAdapter.java:257) at eu.binjr.core.data.codec.csv.CsvDecoder.decode(CsvDecoder.java:172) at eu.binjr.sources.csv.adapters.CsvFileAdapter.buildSortedDataStore(CsvFileAdapter.java:264) at eu.binjr.sources.csv.adapters.CsvFileAdapter.getDataStore(CsvFileAdapter.java:238) at eu.binjr.sources.csv.adapters.CsvFileAdapter.getInitialTimeRange(CsvFileAdapter.java:141) at eu.binjr.core.data.workspace.Rangeable.getInitialTimeRange(Rangeable.java:57) at eu.binjr.core.controllers.XYChartsWorksheetController.addBindings(XYChartsWorksheetController.java:1311) at eu.binjr.core.controllers.XYChartsWorksheetController.handleDragDroppedOnLegendTitledPane(XYChartsWorksheetController.java:1111) at [email protected]/javafx.event.WeakEventHandler.handle(Unknown Source) at [email protected]/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(Unknown Source) at [email protected]/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source) at [email protected]/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source) at [email protected]/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(Unknown Source) at [email protected]/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at [email protected]/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at [email protected]/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at [email protected]/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at [email protected]/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at [email protected]/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at [email protected]/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at [email protected]/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at [email protected]/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at [email protected]/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at [email protected]/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at [email protected]/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at [email protected]/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at [email protected]/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at [email protected]/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) at [email protected]/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) at [email protected]/com.sun.javafx.event.EventUtil.fireEventImpl(Unknown Source) at [email protected]/com.sun.javafx.event.EventUtil.fireEvent(Unknown Source) at [email protected]/javafx.event.Event.fireEvent(Unknown Source) at [email protected]/javafx.scene.Scene$DnDGesture.fireEvent(Unknown Source) at [email protected]/javafx.scene.Scene$DnDGesture.processTargetDrop(Unknown Source) at [email protected]/javafx.scene.Scene$DropTargetListener.drop(Unknown Source) at [email protected]/com.sun.javafx.tk.quantum.GlassSceneDnDEventHandler.lambda$handleDragDrop$2(Unknown Source) at java.base/java.security.AccessController.doPrivileged(Unknown Source) at [email protected]/com.sun.javafx.tk.quantum.GlassSceneDnDEventHandler.handleDragDrop(Unknown Source) at [email protected]/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleDragDrop$11(Unknown Source) at [email protected]/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(Unknown Source) at [email protected]/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleDragDrop(Unknown Source) at [email protected]/com.sun.glass.ui.View.handleDragDrop(Unknown Source) at [email protected]/com.sun.glass.ui.View.notifyDragDrop(Unknown Source) at [email protected]/com.sun.glass.ui.win.WinDnDClipboard.push(Native Method) at [email protected]/com.sun.glass.ui.win.WinSystemClipboard.pushToSystem(Unknown Source) at [email protected]/com.sun.glass.ui.SystemClipboard.flush(Unknown Source) at [email protected]/com.sun.glass.ui.ClipboardAssistance.flush(Unknown Source) at [email protected]/com.sun.javafx.tk.quantum.QuantumClipboard.flush(Unknown Source) at [email protected]/com.sun.javafx.tk.quantum.QuantumToolkit.startDrag(Unknown Source) at [email protected]/javafx.scene.Scene$DnDGesture.dragDetectedProcessed(Unknown Source) at [email protected]/javafx.scene.Scene$DnDGesture.process(Unknown Source) at [email protected]/javafx.scene.Scene$MouseHandler.process(Unknown Source) at [email protected]/javafx.scene.Scene.processMouseEvent(Unknown Source) at [email protected]/javafx.scene.Scene$ScenePeerListener.mouseEvent(Unknown Source) at [email protected]/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(Unknown Source) at [email protected]/com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(Unknown Source) at java.base/java.security.AccessController.doPrivileged(Unknown Source) at [email protected]/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(Unknown Source) at [email protected]/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(Unknown Source) at [email protected]/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(Unknown Source) at [email protected]/com.sun.glass.ui.View.handleMouseEvent(Unknown Source) at [email protected]/com.sun.glass.ui.View.notifyMouse(Unknown Source) at [email protected]/com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at [email protected]/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(Unknown Source) at java.base/java.lang.Thread.run(Unknown Source)

    I'm using binjr-3.8.0_windows-amd64 on my surface pro 5 running windows 10 64 bit home edition.

    It may seem easy to swap the timestamp column and the first column with Excel or other editors, but doing so can be inconvinient in my case where data files are of sizes from 100 MB to 3 GB. Therefore, I would expect that binjr supports my data format.

    Since I'm familiar with python and have some basic experience with Java, I would be glad to contribute to the code of binjr if necessary.

    Leo

    feature 
    opened by leehangyue 2
  • Don't attempt to validate the empty string as an URI

    Don't attempt to validate the empty string as an URI

    This prevents data adapters from trying to do “smart” things on the current working directory as if it was a valid data source (which it most probably isn't most of the time).

    At least on Linux, JavaFX triggers a change event when clicking on the “browse” button, so this actually happened pretty much every time.

    opened by Arkanosis 2
  • Support SVG for saving snapshots

    Support SVG for saving snapshots

    Enhancement idea.

    One currently can save a snapshot of the current worksheet as PNG. It would be nice to be able to save as SVG too, since SVG can be scaled lossless and are more handy in a number of situations.

    opened by tstuefe 2
  • Freshly loaded workspaces are marked as having unsaved changes.

    Freshly loaded workspaces are marked as having unsaved changes.

    When reopening a workspace previously saved to a bjr file, it is directly marked as having unsaved changes (i.e. the path in the title bar is prefixed by a *). This in turns means than the modal box asking if the user wants to save before exiting is always invoked, although there are no new modifications.

    bug 
    opened by fthevenet 0
  • Implement some kind of workspace recipe

    Implement some kind of workspace recipe

    It would be awesome to have a way to automatically create tabs and graphs based on a source and hand-written recipe.

    The recipe could be some YAML dialect with tree pattern matching, eg.:

    My tab name:
        My graph name:
            - /My host name/System/Load/CPU usage/*
        My other graph name@stacked:
            - /My host name/System/Processus/searchserver-*/Memory usage/Average size
            - /My host name/System/Processus/index6-*/Memory usage/Average size
        My other graph name:
            - ^/foo.*bar(hello|world)(/[^/]+)*$@regex
    

    Keep in mind though that we'd probably want to expose all settings (such as line color, opacity…) through the recipe, so the actual YAML dialect might end up being much more complex than that.

    feature 
    opened by Arkanosis 0
  • Allow reordering graphs on worksheets via drag and drop

    Allow reordering graphs on worksheets via drag and drop

    Drag a graph, and drop it:

    • ~~between other graphs on the same sheet, to reorder the sheet's graphs without having to refresh the display several times (unlike today, when using the up/down arrows);~~ [Edit by @fthevenet : done in v3.1.0]
    • on another sheet, to move the graph from one sheet to another;
    • on the “+” sign, to add a new sheet and move the graph to it.

    Additionally, if #85 has been fixed, add the ability to move several graphs at the same time.

    enhancement 
    opened by Arkanosis 0
  • Auto update feature not implemented on macOS

    Auto update feature not implemented on macOS

    Updating binjr directly from within the application (i.e. checking for a new version, downloading the payload, verifying payload signature, stopping the app and swapping the old version for a new one) unfortunately doesn't fully work on macOS, and therefore the feature had to be disabled (only warning a new version is available remains). We were hopeful that we could get the script we use on Linux to work on macOS too (it does work on NetBSD, for what is worth) but ultimately, what seems to be an unfixed bug in the implementation of grep on macOS has pretty much doused those hopes.

    help wanted 
    opened by fthevenet 2
Releases(v3.10.0)
Owner
binjr
A Time Series Data Browser
binjr
Full Featured Google Chrome Dev Tools to JavaFX WebView browser debugging.

JavaFX WebView Debugger Via WebSocket connection to Google Chrome Dev Tools JavaFx WebView debugging with Chrome Dev tools is highly dependent on Goog

Vladimir Schneider 56 Dec 19, 2022
TMU is very simple app for posting your digital manga as article into Telegraph for further reading using any browser or in Telegram with Instant View.

TMU is very simple app for posting your digital manga as article into Telegraph for further reading using any browser or in Telegram with Instant View. App may be very helpful for content translators that searching easy way to share their work.

null 5 Oct 6, 2022
A 3D graphics engine created in Java. The project was inspired by javidx9's series on YouTube.

3D Graphics Engine A 3D graphics engine created in Java. The project was inspired by javidx9's series on YouTube. Installation Clone this repository o

Farhan Towhid 17 Sep 16, 2022
JFXNodeMapper - a simple library that focuses on mapping data from common data represntation formats to JavaFx Nodes

JFXNodeMapper - a simple library that focuses on mapping data from common data represntation formats to JavaFx Nodes. Our main focus is to build a library that,

Aby Kuruvilla 7 Oct 15, 2021
A simple program that is realized by entering data, storing it in memory (in a file) and reading from a file to printing that data.

Pet project A simple program that is realized by entering data, storing it in memory (in a file) and reading from a file to printing that data. It can

Ljubinko Stojanović 3 Apr 28, 2022
Reads Valheim save data and outputs it to a JSON file

Valheim Save Tools This repository contains two projects. A command line interface tool that converts Valheim save files to and from JSON and processe

Koen de Kok 61 Dec 10, 2022
Lifecycle-aware shared observable data holder class for android.

Eyejet Lifecycle-aware shared observable data holder class for android. 1. Depend on our library Eyejet Library is available through Maven Repository.

ZeoFlow 16 Jul 27, 2021
IoTDB (Internet of Things Database) is a data management system for time series data

English | 中文 IoTDB Overview IoTDB (Internet of Things Database) is a data management system for time series data, which can provide users specific ser

The Apache Software Foundation 3k Jan 1, 2023
null 5 Jan 11, 2022
Java-Programs---For-Practice is one of the Java Programming Practice Series By Shaikh Minhaj ( minhaj-313 ). This Series will help you to level up your Programming Skills. This Java Programs are very much helpful for Beginners.

Java-Programs---For-Practice is one of the Java Programming Practice Series By Shaikh Minhaj ( minhaj-313 ). This Series will help you to level up your Programming Skills. This Java Programs are very much helpful for Beginners. If You Have any doubt or query you can ask me here or you can also ask me on My LinkedIn Profile

Shaikh Minhaj 3 Nov 8, 2022
An open source SQL database designed to process time series data, faster

English | 简体中文 | العربية QuestDB QuestDB is a high-performance, open-source SQL database for applications in financial services, IoT, machine learning

QuestDB 9.9k Jan 1, 2023
Scalable Time Series Data Analytics

Time Series Data Analytics Working with time series is difficult due to the high dimensionality of the data, erroneous or extraneous data, and large d

Patrick Schäfer 286 Dec 7, 2022
Time-Based One-Time Password (RFC 6238) and HMAC-Based One-Time Password (RFC 4226) reference implementations and more.

Crypto Time-Based One-Time Password (RFC 6238) and HMAC-Based One-Time Password (RFC 4226) reference implementations and more. Getting Started TOTP ge

Oliver Yasuna 1 May 12, 2022
A scientific charting library focused on performance optimised real-time data visualisation at 25 Hz update rates for data sets with a few 10 thousand up to 5 million data points.

ChartFx ChartFx is a scientific charting library developed at GSI for FAIR with focus on performance optimised real-time data visualisation at 25 Hz u

GSI CS-CO/ACO 386 Jan 2, 2023
A scientific charting library focused on performance optimised real-time data visualisation at 25 Hz update rates for data sets with a few 10 thousand up to 5 million data points.

ChartFx ChartFx is a scientific charting library developed at GSI for FAIR with focus on performance optimised real-time data visualisation at 25 Hz u

GSI CS-CO/ACO 385 Dec 30, 2022
Firehose is an extensible, no-code, and cloud-native service to load real-time streaming data from Kafka to data stores, data lakes, and analytical storage systems.

Firehose - Firehose is an extensible, no-code, and cloud-native service to load real-time streaming data from Kafka to data stores, data lakes, and analytical storage systems.

Open DataOps Foundation 279 Dec 22, 2022
A scalable, distributed Time Series Database.

___ _____ ____ ____ ____ / _ \ _ __ ___ _ _|_ _/ ___|| _ \| __ ) | | | | '_ \ / _ \ '_ \| | \___ \| | | | _ \

OpenTSDB 4.8k Jan 3, 2023
ThirdEye is an integrated tool for realtime monitoring of time series and interactive root-cause analysis.

ThirdEye is an integrated tool for realtime monitoring of time series and interactive root-cause analysis. It enables anyone inside an organization to collaborate on effective identification and analysis of deviations in business and system metrics. ThirdEye supports the entire workflow from anomaly detection, over root-cause analysis, to issue resolution and post-mortem reporting.

null 87 Oct 17, 2022
Time series monitoring and alerting platform.

Argus Argus is a time-series monitoring and alerting platform. It consists of discrete services to configure alerts, ingest and transform metrics & ev

Salesforce 495 Dec 1, 2022