{"id":13451788,"url":"https://github.com/DeemOpen/zkui","last_synced_at":"2025-03-23T19:32:44.921Z","repository":{"id":17279922,"uuid":"20049971","full_name":"DeemOpen/zkui","owner":"DeemOpen","description":"A UI dashboard that allows CRUD operations on Zookeeper.","archived":false,"fork":false,"pushed_at":"2023-12-21T08:02:21.000Z","size":493,"stargazers_count":2330,"open_issues_count":60,"forks_count":973,"subscribers_count":162,"default_branch":"master","last_synced_at":"2024-06-08T01:34:46.229Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DeemOpen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-2.0.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2014-05-22T06:15:53.000Z","updated_at":"2024-06-03T15:26:09.000Z","dependencies_parsed_at":"2022-07-12T10:03:05.193Z","dependency_job_id":"e4ceee72-556c-41c9-b216-d0174a50b4e9","html_url":"https://github.com/DeemOpen/zkui","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DeemOpen%2Fzkui","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DeemOpen%2Fzkui/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DeemOpen%2Fzkui/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DeemOpen%2Fzkui/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DeemOpen","download_url":"https://codeload.github.com/DeemOpen/zkui/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":213325093,"owners_count":15570233,"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":[],"created_at":"2024-07-31T07:01:02.550Z","updated_at":"2024-10-28T17:33:56.419Z","avatar_url":"https://github.com/DeemOpen.png","language":"Java","funding_links":[],"categories":["Java"],"sub_categories":[],"readme":"zkui - Zookeeper UI Dashboard\n====================\nA UI dashboard that allows CRUD operations on Zookeeper.\n\nRequirements\n====================\nRequires Java 7 to run.\n\nSetup\n====================\n1. mvn clean install\n2. Copy the config.cfg to the folder with the jar file. Modify it to point to the zookeeper instance. Multiple zk instances are coma separated.  eg: server1:2181,server2:2181. First server should always be the leader.\n3. Run the jar. ( nohup java -jar zkui-2.0-SNAPSHOT-jar-with-dependencies.jar \u0026 )\n4. \u003ca href=\"http://localhost:9090\"\u003ehttp://localhost:9090\u003c/a\u003e \n\nLogin Info\n====================\nusername: admin, pwd: manager (Admin privileges, CRUD operations supported)\nusername: appconfig, pwd: appconfig (Readonly privileges, Read operations supported)\n\nYou can change this in the config.cfg\n\nTechnology Stack\n====================\n1. Embedded Jetty Server.\n2. Freemarker template.\n3. H2 DB.\n4. Active JDBC.\n5. JSON.\n6. SLF4J.\n7. Zookeeper.\n8. Apache Commons File upload.\n9. Bootstrap.\n10. Jquery.\n11. Flyway DB migration.\n\nFeatures\n====================\n1. CRUD operation on zookeeper properties.\n2. Export properties.\n3. Import properties via call back url.\n4. Import properties via file upload.\n5. History of changes + Path specific history of changes.\n6. Search feature.\n7. Rest API for accessing Zookeeper properties.\n8. Basic Role based authentication.\n9. LDAP authentication supported.\n10. Root node /zookeeper hidden for safety.\n11. ACL supported global level.\n\nImport File Format\n====================\n# add property\n/appconfig/path=property=value\n# remove a property\n-/path/property\n\nYou can either upload a file or specify a http url of the version control system that way all your zookeeper changes will be in version control. \n\nExport File Format\n====================\n/appconfig/path=property=value\n\nYou can export a file and then use the same format to import.\n\nSOPA/PIPA BLACKLISTED VALUE\n====================\nAll password will be displayed as SOPA/PIPA BLACKLISTED VALUE for a normal user. Admins will be able to view and edit the actual value upon login.\nPassword will be not shown on search / export / view for normal user.\nFor a property to be eligible for black listing it should have (PWD / pwd / PASSWORD / password) in the property name.\n\nLDAP\n====================\nIf you want to use LDAP authentication provide the ldap url. This will take precedence over roleSet property file authentication.\nldapUrl=ldap://\u003cldap_host\u003e:\u003cldap_port\u003e/dc=mycom,dc=com\nIf you dont provide this then default roleSet file authentication will be used.\n\nREST call\n====================\nA lot of times you require your shell scripts to be able to read properties from zookeeper. This can now be achieved with a http call. Password are not exposed via rest api for security reasons. The rest call is a read only operation requiring no authentication.\n\nEg:\nhttp://localhost:9090/acd/appconfig?propNames=foo\u0026host=myhost.com\nThis will first lookup the host name under /appconfig/hosts and then find out which path the host point to. Then it will look for the property under that path.\n\nThere are 2 additional properties that can be added to give better control.\ncluster=cluster1\nhttp://localhost:9090/acd/appconfig?propNames=foo\u0026cluster=cluster1\u0026host=myhost.com\nIn this case the lookup will happen on lookup path + cluster1.\n\napp=myapp\nhttp://localhost:9090/acd/appconfig?propNames=foo\u0026app=myapp\u0026host=myhost.com\nIn this case the lookup will happen on lookup path + myapp.\n\nA shell script will call this via\nMY_PROPERTY=\"$(curl -f -s -S -k \"http://localhost:9090/acd/appconfig?propNames=foo\u0026host=`hostname -f`\" | cut -d '=' -f 2)\"\necho $MY_PROPERTY\n\nStandardization\n====================\nZookeeper doesnt enforce any order in which properties are stored and retrieved. ZKUI however organizes properties in the following manner for easy lookup.\nEach server/box has its hostname listed under /appconfig/hosts and that points to the path where properties reside for that path. So when the lookup for a property occurs over a rest call it first finds the hostname entry under /appconfig/hosts and then looks for that property in the location mentioned.\neg: /appconfig/hosts/myserver.com=/appconfig/dev/app1 \nThis means that when myserver.com tries to lookup the propery it looks under /appconfig/dev/app1\n\nYou can also append app name to make lookup easy.\neg: /appconfig/hosts/myserver.com:testapp=/appconfig/dev/test/app1 \neg: /appconfig/hosts/myserver.com:prodapp=/appconfig/dev/prod/app1\n\nLookup can be done by grouping of app and cluster. A cluster can have many apps under it. When the bootloader entry looks like this /appconfig/hosts/myserver.com=/appconfig/dev the rest lookup happens on the following paths.\n/appconfig/dev/..\n/appconfig/dev/hostname..\n/appconfig/dev/app..\n/appconfig/dev/cluster..\n/appconfig/dev/cluster/app..\n\nThis standardization is only needed if you choose to use the rest lookup. You can use zkui to update properties in general without worry about this organizing structure.\n\nHTTPS\n====================\nYou can enable https if needed. \nkeytool -keystore keystore -alias jetty -genkey -keyalg RSA\n\n\nLimitations\n====================\n1. ACLs are fully supported but at a global level.\n\nScreenshots\n====================\nBasic Role Based Authentication\n\u003cbr/\u003e\n\u003cimg src=\"https://raw.github.com/DeemOpen/zkui/master/images/zkui-0.png\"/\u003e\n\u003cbr/\u003e\n\nDashboard Console\n\u003cbr/\u003e\n\u003cimg src=\"https://raw.github.com/DeemOpen/zkui/master/images/zkui-1.png\"/\u003e\n\u003cbr/\u003e\n\nCRUD Operations\n\u003cbr/\u003e\n\u003cimg src=\"https://raw.github.com/DeemOpen/zkui/master/images/zkui-2.png\"/\u003e\n\u003cbr/\u003e\n\nImport Feature\n\u003cbr/\u003e\n\u003cimg src=\"https://raw.github.com/DeemOpen/zkui/master/images/zkui-3.png\"/\u003e\n\u003cbr/\u003e\n\nTrack History of changes\n\u003cbr/\u003e\n\u003cimg src=\"https://raw.github.com/DeemOpen/zkui/master/images/zkui-4.png\"/\u003e\n\u003cbr/\u003e\n\nStatus of Zookeeper Servers\n\u003cbr/\u003e\n\u003cimg src=\"https://raw.github.com/DeemOpen/zkui/master/images/zkui-5.png\"/\u003e\n\u003cbr/\u003e\n\nLicense \u0026 Contribution\n====================\n\nZKUI is released under the Apache 2.0 license. Comments, bugs, pull requests, and other contributions are all welcomed!\n\nThanks to Jozef Krajčovič for creating the logo which has been used in the project.\nhttps://www.iconfinder.com/iconsets/origami-birds\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FDeemOpen%2Fzkui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FDeemOpen%2Fzkui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FDeemOpen%2Fzkui/lists"}