{"id":13811517,"url":"https://github.com/bbonnin/pulsar-express","last_synced_at":"2025-05-14T19:33:42.386Z","repository":{"id":34900675,"uuid":"185616381","full_name":"bbonnin/pulsar-express","owner":"bbonnin","description":"Simple Web Interface for Apache Pulsar","archived":false,"fork":false,"pushed_at":"2024-01-31T08:31:37.000Z","size":2606,"stargazers_count":110,"open_issues_count":35,"forks_count":20,"subscribers_count":5,"default_branch":"master","last_synced_at":"2024-11-11T06:13:11.196Z","etag":null,"topics":["apache","hacktoberfest","pulsar","ui","web"],"latest_commit_sha":null,"homepage":"","language":"Vue","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bbonnin.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-05-08T13:56:00.000Z","updated_at":"2024-11-04T09:51:33.000Z","dependencies_parsed_at":"2024-01-22T11:10:24.584Z","dependency_job_id":"5a045222-95c5-40cc-9407-6c8fd796b3cb","html_url":"https://github.com/bbonnin/pulsar-express","commit_stats":{"total_commits":195,"total_committers":8,"mean_commits":24.375,"dds":0.2512820512820513,"last_synced_commit":"4033b848ec91307f67bf43d8700108c9c4225b29"},"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bbonnin%2Fpulsar-express","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bbonnin%2Fpulsar-express/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bbonnin%2Fpulsar-express/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bbonnin%2Fpulsar-express/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bbonnin","download_url":"https://codeload.github.com/bbonnin/pulsar-express/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225307802,"owners_count":17453877,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apache","hacktoberfest","pulsar","ui","web"],"created_at":"2024-08-04T04:00:22.573Z","updated_at":"2024-11-19T06:32:32.316Z","avatar_url":"https://github.com/bbonnin.png","language":"Vue","funding_links":[],"categories":["🛠️ Web UIs","Tools"],"sub_categories":["Dashboards"],"readme":"[![GitHub license](https://img.shields.io/badge/license-apache2-blue.svg)](https://github.com/bbonnin/pulsar-express/blob/master/LICENSE)\n[![GitHub version](https://img.shields.io/badge/dynamic/json.svg?color=green\u0026label=version\u0026query=version\u0026url=https://raw.githubusercontent.com/bbonnin/pulsar-express/master/package.json)](https://github.com/bbonnin/pulsar-express/releases)\n\n\n# pulsar-express\n\n\u003e Simple Web Interface for Apache Pulsar\n\n![Pulsar logo](docs/pulsar.png)\n\n\n## Install\n\nThere are several ways to use `pulsar-express`:\n* By cloning the projet and running it locally (see `Development` section)\n* By running a docker image: `docker run -it -p 3000:3000 bbonnin/pulsar-express`\n  * You can set a connection url in the command: `docker run -it -p 3000:3000 -e PE_CONNECTION_URL=http://host.docker.internal:8080 bbonnin/pulsar-express`\n  * Important: the calls to the Pulsar API are done on server side (i.e. from the container), so your Pulsar must be reachable from the container (do not use localhost :)). A solution: you can add `--network=host` to the command line (but, it's only working on Linux...)\n* By installing it using `npm`\n```bash\n# Install it globally\n$ npm install pulsar-express -g\n\n# Start it\n$ pulsar-express\n\n        ╭────────────────╮\n        │ PULSAR EXPRESS │\n        ╰────────────────╯\n\n        =\u003e Open http://localhost:3000\n\n\n# Start it on a specific port\n$ PORT=8000 pulsar-express\n\n        ╭────────────────╮\n        │ PULSAR EXPRESS │\n        ╰────────────────╯\n\n        =\u003e Open http://localhost:8000\n\n```\n\nIf you want to configure connections (to be available to all users), you can:\n* Create a json file with the connections:\n```json\n[\n  { \"name\": \"test cluster\", \n     \"url\": \"http://test-cluster-host:8080\" },\n  \n  { \"name\": \"integration cluster\", \n     \"url\": \"http://int-cluster-host:8080\", \n     \"token\": \"\u003cYOUR_TOKEN\u003e\" },\n  \n  { \"name\": \"prod cluster\", \n     \"url\": \"http://prod-cluster-host:8080\", \n     \"fctWorkerUrl\": \"http://prod-fct-worker-cluster-host:6750\",\n     \"token\": \"\u003cYOUR_TOKEN\u003e\" },\n]\n```\n* and set the env variable `PE_CONFIG_FILE`\n```bash\nexport PE_CONFIG_FILE=/path/to/my/config.json\n```\n* Or you can also set a connection URL\n```bash\nexport PE_CONNECTION_URL=http://pulsar-host:8080\n\n# Without a name, the url will be used (hostname:port),\n# Or you can set a name:\nexport PE_CONNECTION_NAME=my-pulsar\n\n# A token if needed:\nexport PE_CONNECTION_TOKEN=\u003cYOUR_TOKEN\u003e\n```\n\n\nFrom there, you can connect with your browser to the url above !\n\n![Pulsar express home](docs/home.png)\n\n\n## Quick start\n\n\u003e If you haven't defined a connection, the first step is to go the `Connections` page and add a new connection. These connections are stored on client side (localstorage of your browser)\n\n![Pulsar express connections](docs/connections.png)\n\n### Overview\n\nIn this page, you can see some basic informations about your clusters.\n\n![Pulsar express overview](docs/overview.png)\n\n### Clusters\n\n![Pulsar express clusters](docs/clusters.png)\n\n### Tenants\n\n![Pulsar express clusters](docs/tenants.png)\n\n### Namespaces\n\n![Pulsar express clusters](docs/namespaces.png)\n\n### Topics\n\n![Pulsar express topics](docs/topics.png)\n\n![Pulsar express topics](docs/topic.png)\n\n### Functions\n\n![Pulsar express functions](docs/functions.png)\n\n![Pulsar express function](docs/function.png)\n\n\n## Security\n\nTo enable security in Pulsar, please read [https://pulsar.apache.org/docs/en/security-overview/](the docs).\n\nFor example, with token authentication with a secret key (more details, [https://pulsar.apache.org/docs/en/security-token-admin/](here)), \n\n* Create a secret key:\n```bash\npulsar tokens create-secret-key --output my-secret.key --base64\n```\n\n* Create a token for pulsar-express\n```bash\npulsar tokens create --secret-key file:///path/to/my-secret.key \\\n            --subject pulsar-express\n```\n\n* Configure your broker (`conf/broker.conf` or `conf/standalone.conf`)\n```bash\nauthenticationEnabled=true\nauthorizationEnabled=true\nauthenticationProviders=org.apache.pulsar.broker.authentication.AuthenticationProviderToken\nsuperUserRoles=pulsar-express\ntokenSecretKey=file:///path/to/my-secret.key\n```\n\n* Configure your workers (`conf/functions_worker.yml`)\n```bash\nclientAuthenticationPlugin: \"org.apache.pulsar.client.impl.auth.AuthenticationToken\"\nclientAuthenticationParameters: \"token:\u003cYOUR_TOKEN\u003e\"\n\nauthenticationEnabled: true\nauthorizationEnabled: true\nauthenticationProviders:\n  - org.apache.pulsar.broker.authentication.AuthenticationProviderToken\nproperties:\n  tokenSecretKey: \"file:///path/to/my-secret.key\"\nsuperUserRoles:\n  - pulsar-express\n```\n\n* Test a call to the API (you should get a 401 response without the token):\n```bash\ncurl localhost:8080/admin/v2/clusters  -H \"Authorization: Bearer \u003cYOUR_TOKEN\u003e\"\n\n[\"standalone\"]\n```\n\n\n## Development\n\nThis app has been developed with [Nuxt.js](https://nuxtjs.org).\n\n``` bash\n# install dependencies\n$ npm install\n\n# serve with hot reload at localhost:3000\n$ npm run dev\n\n# build for production and launch server\n$ npm run build\n$ npm start\n```\n\nFor detailed explanation on how things work, checkout [Nuxt.js docs](https://nuxtjs.org).\n\nFor Docker:\n* Build: `npm run docker-build`\n* Test locally: `npm run docker-run`\n* Tag: `docker tag pulsar-express USER/pulsar-express:VERSION`\n* Publish: `docker push USER/pulsar-express:VERSION`\n\n\n## How-to\n\n* Change the base URL (work in progress, it's a quick fix):\n  * Set the base URL you want to use: `export PE_BASE_URL=pulsar-express`\n  * Rebuild the docker image: `npm run docker-build` (or `docker build --build-arg BASE_URL=${PE_BASE_URL} -t pulsar-express .`)\n  * Run the image, for example: `docker run -it -p 3000:3000 -e PE_CONNECTION_URL=http://host.docker.internal:8080 -e PE_BASE_URL=${PE_BASE_URL} pulsar-express`\n\n  \u003e When running the image, do not forget to set PE_BASE_URL !\n\n\n\n## To do\n\n\u003e A lot of things of course :), but the main step is to change the architecture and add a backend instead of making the queries from the browser. This backend could provide api, cache, better management of configuration, ...\n\n* General:\n  * [ ] test with the latest version (2020/06/08 =\u003e v2.5.2)\n* Clusters\n  * [x] connections to clusters (configured on server and client side)\n  * [x] list clusters\n  * [ ] get config of a cluster\n  * [ ] manage clusters\n* Tenants\n  * [x] list the tenants\n  * [x] create a tenant (simple way)\n  * [x] delete a tenant\n  * [ ] get config of a tenant\n  * [ ] update config of a tenant\n* Namespaces\n  * [x] list the namespace\n  * [ ] create a namespace\n  * [ ] delete a namespace\n  * [x] get config of a namespace\n  * [ ] update config of a namespace\n  * [ ] any other features (persistence policies, messages ttl, backlog quotas...)\n* Topics\n  * [x] list the topics\n  * [x] create a topic\n  * [ ] create a partitioned topic\n  * [x] delete a topic\n  * [x] get stats about a topic\n  * [x] get subscriptions of a topic\n  * [ ] manage subscriptions\n  * [ ] manage partitioned topics\n  * [ ] any other features (reset cursor, expire messages, ...)\n    * [x] peek messages\n* Functions\n  * [x] list the functions\n  * [ ] get config of a function\n  * [x] start/stop instances\n  * [ ] manage functions (deploy ? delete ? create ? simple python function for test purpose ?)\n* Connections\n  * [x] update a connection\n* [ ] Manage base URL (with env var)\n  * Images (assets vs static)\n  * Pages (Config router) -\u003e dynamic ? seems to be NO !\n  * API (config Axios)\n\n## Misc\n\nIcons: https://icones8.fr/\n\n## Credit\n\nPulsar Express is a single only tool which is using daily to manage and maintain a Pulsar cluster of over ten nodes in production environment at https://doopage.com.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbbonnin%2Fpulsar-express","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbbonnin%2Fpulsar-express","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbbonnin%2Fpulsar-express/lists"}