Giter Club home page Giter Club logo

insulator's Introduction

⚠️ This project is not actively maintained: Use insulator2 instead


Insulator
Insulator

A tool for devs to debug Kafka based applications and services


Release CI Coverage code quality Snyk

WikiKey FeaturesDevelopmentCreditsSupportLicense

Installation

Download the binary from the latest release for your OS. Learn more here.

Mac release Windows release Debian release

brew cask install andrewinci/tap/insulator

Key Features

  • Clusters
    • Authentication with: PLAN, SSL and SASL (SCRAM or PLAIN) authentication
  • Topics
    • List available topics
    • Messages count and basic topic info
    • Delete a topic
    • Create a topic with basic configuration (Compaction policy, #Partitions, ...)
    • Topic configurations
  • Consumer
    • Avro and String deserialization
    • Seek based on record timestamp
    • Easy search and filtering
  • Schema registry
    • List subjects
    • Show all schema versions for a given subject
  • Producer
    • Avro producer with autocompletion based on the schema
    • String producer
    • Send tombstones
  • 🚧 Consumer groups 🚧
    • List consumer groups
    • Show topics, partitions and lags
    • Delete consumer groups
  • Cross platform
    • Windows, macOS and Linux ready.
  • Dark/Light theme
  • Auto-update
  • ReadOnly mode

Development

The JDK version used is the adoptjdk 14.

To run the integration tests in headless mode, run

export _JAVA_OPTIONS="-Djava.awt.headless=true -Dtestfx.robot=glass -Dtestfx.headless=true -Dprism.order=sw -Dprism.text=t2k  -Dtestfx.setup.timeout=2500 -Dheadless.geometry=1920x1080-64"
./gradlew app:integrationTest

To package the app, JPackage is used. The call is wrapped into the gradle task app:packageApp. Notice that, to package the app in Ubuntu, binutils and fakeroot are required. See https://openjdk.java.net/jeps/343 for more info.

Build the documentation

The documentation for the github page is available under the /docs/ folder. To build and serve it, use the following.

bundle exec jekyll serve

Use a specific GH (pre)release in the bootstrap

At startup, the bootstrap checks if a DEV_MODE file with the release tag is available.

# MAC OS
echo "<version-tag>" > ~/Library/Application\ Support/insulator/DEV_MODE

# Linux
echo "<version-tag>" > ~/.config/Insulator/DEV_MODE

Credits

JetBrains

update4j

Support

Buy Me A Coffee

License

GPL-3.0

insulator's People

Contributors

andrea-vinci avatar andrewinci avatar dependabot-preview[bot] avatar dependabot[bot] avatar georgexcollins avatar r0bturner avatar snyk-bot avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

insulator's Issues

Smart search

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

Describe the solution you'd like
A clear and concise description of what you want to happen.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

Allow publishing against a specific schema

When publishing to a topic, the json will be serialized using the latest schema for the topic, even if that schema doesn't include all the fields in the json to publish. Additional fields are dropped quietly.

This might only be a problem if the topic schema evolution is fully compatible. I guess with other evolution, you only want to publish with the latest schema?

There's a few things that could be done to improve:

  • Warn if the json being published is not completely covered by the schema
  • Allow the user to choose a schema to publish against (what should happen here depending on schema evolution rules?)

Exception at startup caused by: java.lang.ClassNotFoundException: io.confluent.telemetry.api.events.NoOpEventEmitter

Describe the bug
Bug at start in pre-release v0.6.0

org.apache.kafka.common.KafkaException: Failed to create new KafkaAdminClient
	at classpath//org.apache.kafka.clients.admin.KafkaAdminClient.createInternal(KafkaAdminClient.java:587)
	at classpath//org.apache.kafka.clients.admin.KafkaAdminClient.createInternal(KafkaAdminClient.java:516)
	at classpath//org.apache.kafka.clients.admin.Admin.create(Admin.java:133)
	at classpath//org.apache.kafka.clients.admin.AdminClient.create(AdminClient.java:39)
	at classpath//insulator.kafka.AdminApiKt.adminApi(AdminApi.kt:109)
	at classpath//insulator.di.modules.ClusterModule.providesAdminApi(ClusterModule.kt:22)
	at classpath//insulator.di.modules.ClusterModule_ProvidesAdminApiFactory.providesAdminApi(ClusterModule_ProvidesAdminApiFactory.java:42)
	at classpath//insulator.di.modules.ClusterModule_ProvidesAdminApiFactory.get(ClusterModule_ProvidesAdminApiFactory.java:33)
	at classpath//insulator.di.modules.ClusterModule_ProvidesAdminApiFactory.get(ClusterModule_ProvidesAdminApiFactory.java:11)
	at classpath//dagger.internal.DoubleCheck.get(DoubleCheck.java:47)
	at classpath//insulator.viewmodel.main.topic.ListTopicViewModel_Factory.get(ListTopicViewModel_Factory.java:47)
	at classpath//insulator.viewmodel.main.topic.ListTopicViewModel_Factory.get(ListTopicViewModel_Factory.java:13)
	at classpath//dagger.internal.DoubleCheck.get(DoubleCheck.java:47)
	at classpath//insulator.views.main.topic.ListTopicView_Factory.get(ListTopicView_Factory.java:27)
	at classpath//insulator.views.main.topic.ListTopicView_Factory.get(ListTopicView_Factory.java:9)
	at classpath//dagger.internal.DoubleCheck.get(DoubleCheck.java:47)
	at classpath//insulator.di.DaggerClusterComponent.listTopicView(DaggerClusterComponent.java:175)
	at classpath//insulator.viewmodel.main.MainViewModel.<init>(MainViewModel.kt:24)
	at classpath//insulator.viewmodel.main.MainViewModel_Factory.newInstance(MainViewModel_Factory.java:41)
	at classpath//insulator.viewmodel.main.MainViewModel_Factory.get(MainViewModel_Factory.java:32)
	at classpath//insulator.viewmodel.main.MainViewModel_Factory.get(MainViewModel_Factory.java:10)
	at classpath//dagger.internal.DoubleCheck.get(DoubleCheck.java:47)
	at classpath//insulator.views.main.MainView_Factory.get(MainView_Factory.java:45)
	at classpath//insulator.views.main.MainView_Factory.get(MainView_Factory.java:13)
	at classpath//dagger.internal.DoubleCheck.get(DoubleCheck.java:47)
	at classpath//insulator.di.DaggerClusterComponent.mainView(DaggerClusterComponent.java:170)
	at classpath//insulator.views.configurations.ListClusterView.openMainView(ListClusterView.kt:99)
	at classpath//insulator.views.configurations.ListClusterView.access$openMainView(ListClusterView.kt:36)
	at classpath//insulator.views.configurations.ListClusterView$clusterList$1$2.invoke(ListClusterView.kt:78)
	at classpath//insulator.views.configurations.ListClusterView$clusterList$1$2.invoke(ListClusterView.kt:36)
	at classpath//insulator.ui.component.ListViewKt$action$runOpOnSelected$1.invoke(ListView.kt:9)
	at classpath//insulator.ui.component.ListViewKt$action$runOpOnSelected$1.invoke(ListView.kt)
	at classpath//insulator.ui.component.ListViewKt$action$1.invoke(ListView.kt:11)
	at classpath//insulator.ui.component.ListViewKt$action$1.invoke(ListView.kt)
	at classpath//tornadofx.NodesKt$onDoubleClick$1.handle(Nodes.kt:415)
	at classpath//tornadofx.NodesKt$onDoubleClick$1.handle(Nodes.kt)
	at classpath//com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
	at classpath//com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234)
	at classpath//com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
	at classpath//com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
	at classpath//com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
	at classpath//com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at classpath//com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at classpath//com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at classpath//com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
	at classpath//com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
	at classpath//com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
	at classpath//com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
	at classpath//javafx.event.Event.fireEvent(Event.java:198)
	at classpath//javafx.scene.Scene$ClickGenerator.postProcess(Scene.java:3563)
	at classpath//javafx.scene.Scene$MouseHandler.process(Scene.java:3865)
	at classpath//javafx.scene.Scene.processMouseEvent(Scene.java:1851)
	at classpath//javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2584)
	at classpath//com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:409)
	at classpath//com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:299)
	at java.base/java.security.AccessController.doPrivileged(Unknown Source)
	at classpath//com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:447)
	at classpath//com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:412)
	at classpath//com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:446)
	at classpath//com.sun.glass.ui.View.handleMouseEvent(View.java:556)
	at classpath//com.sun.glass.ui.View.notifyMouse(View.java:942)
	at classpath//com.sun.glass.ui.mac.MacView.notifyMouse(MacView.java:127)
Caused by: java.lang.NoClassDefFoundError: io/confluent/telemetry/api/events/NoOpEventEmitter
	at classpath//org.apache.kafka.common.metrics.Metrics.<init>(Metrics.java:83)
	at classpath//org.apache.kafka.common.metrics.Metrics.<init>(Metrics.java:139)
	at classpath//org.apache.kafka.clients.admin.KafkaAdminClient.createInternal(KafkaAdminClient.java:553)
	... 61 more
Caused by: java.lang.ClassNotFoundException: io.confluent.telemetry.api.events.NoOpEventEmitter
	at java.base/java.net.URLClassLoader.findClass(Unknown Source)
	at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
	at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
	... 64 more

To Reproduce
Steps to reproduce the behavior:

  1. Open the app

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: [e.g. iOS]
  • Browser [e.g. chrome, safari]
  • Version [e.g. 22]

Smartphone (please complete the following information):

  • Device: [e.g. iPhone6]
  • OS: [e.g. iOS8.1]
  • Browser [e.g. stock browser, safari]
  • Version [e.g. 22]

Additional context
Add any other context about the problem here.

Support High-DPI displays

Is your feature request related to a problem? Please describe.
As a user with a 4k laptop display I struggle to read the UI as it does not seem to take into account the high DPI nature of the screen, unlike the rest of my desktop

Describe the solution you'd like
It would be great if Insulator could support high DPI displays

Describe alternatives you've considered
None

Additional context
I'm using GNOME with Wayland on Ubuntu Linux

Delete schema

Allow user to delete subjects from schema registry

403 from jcenter.bintray.com on auto-update

Describe the bug
Cannot launch fresh insulator install as auto-update fails to download dependencies from JCenter.

To Reproduce
Steps to reproduce the behavior:

  1. Install Insulator from .deb package
  2. Launch Insulator

Expected behavior
Auto-update runs and downloads dependencies

Screenshots
image

Desktop (please complete the following information):

  • OS: Ubuntu
  • Version 20.04.2 LTS

Additional context
I assume this is related to the JCenter/Bintray sunsetting.

Consumer groups

List consumer groups
Allow to set the partition offsets for a consumer group

Null Pointer Exception On Record Viewer

Describe the bug
When double clicking on an record with null key (and an Avro value) I'm gettting a pop-up window with a NullPointerException stack trace.

To Reproduce
Steps to reproduce the behavior:

  1. Consume messages with null keys and Avro values
  2. Click to select one of the returned messages
  3. Double click on it to get the record viewer pop-up window
  4. See error in pop-up window

Expected behavior
See the message with the null key

Screenshots
For some reason I am unable to attach a screenshot so, I'll include a detailed description
Pop-up window name: viewModel.keyProperty.value must not be null
Pop-up window message: Error in classpath/insulator.views.main.topic.RecordView$root$1.invoke(RecordView.kt:22)
Pop-up window content:

java.lang.NullPointerException: viewModel.keyProperty.value must not be null at classpath//insulator.views.main.topic.RecordView$root$1.invoke(RecordView.kt:22) at classpath//insulator.views.main.topic.RecordView$root$1.invoke(RecordView.kt:12) at classpath//tornadofx.LayoutsKt.vbox(Layouts.kt:433) at classpath//tornadofx.LayoutsKt.vbox$default(Layouts.kt:144) at classpath//insulator.views.main.topic.RecordView.<init>(RecordView.kt:17) at classpath//insulator.viewmodel.main.topic.TopicViewModel$showRecordInfoView$1.invoke(TopicViewModel.kt:77) at classpath//insulator.viewmodel.main.topic.TopicViewModel$showRecordInfoView$1.invoke(TopicViewModel.kt:25) at classpath//insulator.ui.WindowsManager.openWindow(WindowsManager.kt:21) at classpath//insulator.viewmodel.main.topic.TopicViewModel.showRecordInfoView(TopicViewModel.kt:77) at classpath//insulator.views.main.topic.TopicView$recordsTable$1$3.invoke(TopicView.kt:142) at classpath//insulator.views.main.topic.TopicView$recordsTable$1$3.invoke(TopicView.kt:30) at classpath//tornadofx.NodesKt$onDoubleClick$1.handle(Nodes.kt:415) at classpath//tornadofx.NodesKt$onDoubleClick$1.handle(Nodes.kt) at classpath//com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) at classpath//com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234) at classpath//com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) at classpath//com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) at classpath//com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) at classpath//com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at classpath//com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at classpath//com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at classpath//com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at classpath//com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at classpath//com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at classpath//com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at classpath//com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at classpath//com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at classpath//com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) at classpath//com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) at classpath//javafx.event.Event.fireEvent(Event.java:198) at classpath//javafx.scene.Scene$ClickGenerator.postProcess(Scene.java:3563) at classpath//javafx.scene.Scene$MouseHandler.process(Scene.java:3865) at classpath//javafx.scene.Scene.processMouseEvent(Scene.java:1851) at classpath//javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2584) at classpath//com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:409) at classpath//com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:299) at java.base/java.security.AccessController.doPrivileged(Unknown Source) at classpath//com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:447) at classpath//com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:412) at classpath//com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:446) at classpath//com.sun.glass.ui.View.handleMouseEvent(View.java:556) at classpath//com.sun.glass.ui.View.notifyMouse(View.java:942) at classpath//com.sun.glass.ui.mac.MacView.notifyMouse(MacView.java:127)

Desktop (please complete the following information):

  • OS: macOS Monterey
  • Insulator version 0.8.0(100)

Reporting a vulnerability

Hello!

I hope you are doing well!

We are a security research team. Our tool automatically detected a vulnerability in this repository. We want to disclose it responsibly. GitHub has a feature called Private vulnerability reporting, which enables security research to privately disclose a vulnerability. Unfortunately, it is not enabled for this repository.

Can you enable it, so that we can report it?

Thanks in advance!

PS: you can read about how to enable private vulnerability reporting here: https://docs.github.com/en/code-security/security-advisories/repository-security-advisories/configuring-private-vulnerability-reporting-for-a-repository

Improve topics view

  • Show deletion policy
  • Show number of topics
  • Show number of consumed records
  • Disable consumer settings while consuming in topic view
  • Allow text selection in records table

Producer

Allow users to produce to a topic validating against the avro schema (if the schema registry is configured)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.