{"id":20770752,"url":"https://github.com/hackolade/cbanalytics","last_synced_at":"2026-04-14T18:34:14.286Z","repository":{"id":85641372,"uuid":"184771794","full_name":"hackolade/CBAnalytics","owner":"hackolade","description":"Hackolade plugin for Couchbase Analytics","archived":false,"fork":false,"pushed_at":"2019-05-03T14:45:22.000Z","size":562,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-09-13T21:49:10.425Z","etag":null,"topics":["couchbase","couchbase-analytics","data-modeling","entity-relationship-diagram","er-diagram","json-schema","nosql","nosql-database","schema-design"],"latest_commit_sha":null,"homepage":"https://hackolade.com","language":"JavaScript","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/hackolade.png","metadata":{"files":{"readme":"README.md","changelog":null,"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-03T14:43:07.000Z","updated_at":"2021-03-08T13:59:03.000Z","dependencies_parsed_at":null,"dependency_job_id":"96ea6783-acd2-4930-a7ae-8ad2f37679d5","html_url":"https://github.com/hackolade/CBAnalytics","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/hackolade/CBAnalytics","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hackolade%2FCBAnalytics","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hackolade%2FCBAnalytics/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hackolade%2FCBAnalytics/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hackolade%2FCBAnalytics/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hackolade","download_url":"https://codeload.github.com/hackolade/CBAnalytics/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hackolade%2FCBAnalytics/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31810738,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T18:05:02.291Z","status":"ssl_error","status_checked_at":"2026-04-14T18:05:01.765Z","response_time":153,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["couchbase","couchbase-analytics","data-modeling","entity-relationship-diagram","er-diagram","json-schema","nosql","nosql-database","schema-design"],"created_at":"2024-11-17T12:11:46.854Z","updated_at":"2026-04-14T18:34:14.262Z","avatar_url":"https://github.com/hackolade.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Couchbase Analytics\nHackolade plugin for Couchbase Analytics\n\n\u003cdiv class=\"main-content\"\u003e\n\n\u003cspan class=\"rvts6\"\u003eFor each object in Hackolade, we've defined a set of standard properties that appear in the properties pane.  But it is possible that your company wants to define and track additional properties for models, containers, entities, and attributes.  Hackolade let's you do just that, by leveraging our plugin architecture (used also to integrate our modeling engine with all kinds of NoSQL document databases.)\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003e  \n\u003c/span\u003e\n\n## \u003cspan class=\"rvts0\"\u003e\u003cspan class=\"rvts16\"\u003e1) Download and enable plugin\u003c/span\u003e\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003eTo enable the custom properties capability, you first need to download a plugin for each database target for which you wish to add properties.  To do so, go to Help \u003e DB Target Plugin Manager\u003c/span\u003e\n\n\u003cimg src=\"lib/Plugin-managermenu.png\" width=\"25%\" height=\"25%\"\u003e\n\n\u003cspan class=\"rvts6\"\u003e  \n\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003eYou may choose which plugin to install on your computer.\u003c/span\u003e\n\n\u003cimg src=\"lib/Plugin-manageravailablecustomprops.png\" width=\"50%\" height=\"50%\"\u003e\n\n\u003cspan class=\"rvts6\"\u003e  \n\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003eThis will result in the plugin appearing in the Installed tab of the plugin manager.\u003c/span\u003e\n\n\u003cimg src=\"lib/Plugin-Managerinstalledcustomprops.png\" width=\"50%\" height=\"50%\"\u003e\n\n\u003cspan class=\"rvts6\"\u003e  \n\u003c/span\u003e\n\n## \u003cspan class=\"rvts0\"\u003e\u003cspan class=\"rvts16\"\u003e2) Access plugin configuration files\u003c/span\u003e\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003eYou are now ready to add custom properties via editing of configuration files.  The plugin configurations files can be found by going to Help \u003e Show plugin directory:\u003c/span\u003e\n\n\u003cimg src=\"lib/Plugin-Showplugindirectory.png\" width=\"25%\" height=\"25%\"\u003e\n\n\u003cspan class=\"rvts6\"\u003e  \n\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003eFor each custom properties plugin, you will find the a directory structure similar to this one:\u003c/span\u003e\n\n\u003cimg src=\"lib/Plugin-CustomPropdirectorystructure.png\" width=\"25%\" height=\"25%\"\u003e\n\n\u003cspan class=\"rvts18\"\u003eNotes:\u003c/span\u003e\u003cspan class=\"rvts6\"\u003e\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003ei) do NOT make any changes to the package.json file!  Only the \u003cobject\u003eLevelConfig.json files should be edited according to the specifications below.\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003eii) it is advised to keep a backup of the files before making changes, so you can revert back in case of errors.\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003eiii) it is always necessary to restart the application after having saved changes before you can see these changes relected in the properties pane.\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003eiv) for field-level definitions, since field types have different property lists, it may be necessary to define custom properties for multiple field types.\u003c/span\u003e\n\n## \u003cspan class=\"rvts0\"\u003e\u003cspan class=\"rvts16\"\u003e3) Levels\u003c/span\u003e\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003eAs a reminder, terminology differs between NoSQL database:\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003e- container means: dbs in MongoDB, region in DynamoDB, bucket in Couchbase, collection in Cosmos DB\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003e- entity means: collection in MongoDB, table in DynamoDB, document kind in Couchbase, and document type in Cosmos DB\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003e- field means: field in MongoDB, Couchbase, and Cosmos DB.  And attribute in DynamoDB\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003e  \n\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003eYou need to edit the corresponding \u003cobject\u003eLevelConfig.json file to add custom properties.\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003e  \n\u003c/span\u003e\n\n## \u003cspan class=\"rvts0\"\u003e\u003cspan class=\"rvts16\"\u003e4) Lower tabs\u003c/span\u003e\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003eFor each level, the Hackolade properties pane may have one or more lower tab:\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003e- MongoDB model lower tab:\u003c/span\u003e\n\n\u003cimg src=\"lib/MongoDBmodellowertab.png\" width=\"50%\" height=\"50%\"\u003e\n\n\u003cspan class=\"rvts6\"\u003e- MongoDB dbs lower tab:\u003c/span\u003e\n\n\u003cimg src=\"lib/MongoDBdbslowertab.png\" width=\"50%\" height=\"50%\"\u003e\n\n\u003cspan class=\"rvts6\"\u003e- MongoDB collection lower tab:\u003c/span\u003e\n\n\u003cimg src=\"lib/MongoDBcollectionlowertab.png\" width=\"50%\" height=\"50%\"\u003e\n\n\u003cspan class=\"rvts6\"\u003e- MongoDB field lower tab:\u003c/span\u003e\n\n\u003cimg src=\"lib/MongoDBfieldlowertab.png\" width=\"50%\" height=\"50%\"\u003e\n\n\u003cspan class=\"rvts6\"\u003e  \n\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003eIf the level allows multiple tabs, you need to choose to which lower tab you want to add properties.\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003e  \n\u003c/span\u003e\n\n## \u003cspan class=\"rvts0\"\u003e\u003cspan class=\"rvts16\"\u003e5) Property types\u003c/span\u003e\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003eThe following controls are possible for user-defined properties:\u003c/span\u003e\n\n\u003cimg src=\"lib/Plugin-possiblepropertytypes.png\" width=\"50%\" height=\"50%\"\u003e\n\n*   \u003cspan class=\"rvts6\"\u003esimple text: one line of text\u003c/span\u003e\n*   \u003cspan class=\"rvts6\"\u003etext area: popup for multi-line text entry\u003c/span\u003e\n*   \u003cspan class=\"rvts6\"\u003edropdown selection from a deined list of options\u003c/span\u003e\n*   \u003cspan class=\"rvts6\"\u003enumeric-only field\u003c/span\u003e\n*   \u003cspan class=\"rvts6\"\u003echeckbox: for true/false entry\u003c/span\u003e  \n    \u003cspan class=\"rvts6\"\u003e  \n    \u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003e  \n\u003c/span\u003e\n\n## \u003cspan class=\"rvts0\"\u003e\u003cspan class=\"rvts16\"\u003e6) Property definition\u003c/span\u003e\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003eExamples are provided in the comments section of each config file.  Here's an overview of the schema:\u003c/span\u003e\n\n\u003cimg src=\"lib/Plugin-propertyschema.png\" width=\"50%\" height=\"50%\"\u003e\n\n\u003cspan class=\"rvts6\"\u003eHere's another view, consolidated:\u003c/span\u003e\n\n\u003cimg src=\"lib/Plugin-custompropsconsolidatedschema.png\" width=\"50%\" height=\"50%\"\u003e\n\n\u003cspan class=\"rvts6\"\u003e- propertyName: mandatory, this is the property label that will appear in the Property Pane\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003e- propertyKeyword: mandatory, this is the unique key for the property\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003e- shouldValidate: optional, boolean true/false to define whether to validate the regular expression of the text input [default: false]\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003e- propertyTooltip: optional, in the case of input types textarea and select, it is possible to display a tooltip  defined here\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003e- propertyType: mandatory, this is the control definition, with possible values: text, details, select (i.e. dropdown), checkbox\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003e- options: optional, this is the array of possible checkbox options\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003e- template: optional, this is needed in the case of propertyType = details, to define a popup multi-line text.  Possible value: textarea\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003e- valueType: optional, this is needed in to specify that a property is numberic only.  Possible values: numeric\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003e  \n\u003c/span\u003e\n\n## \u003cspan class=\"rvts0\"\u003e\u003cspan class=\"rvts16\"\u003e7) Share customization with team members\u003c/span\u003e\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003eAfter making, saving and testing your changes, you should share them with everyone on your team to insure consistency. This is a 3-step process:\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003e- return to the plugin directory via Help \u003e Show plugin directory, and zip up the whole plugin directory where you made your changes;\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003e- transfer this zip file to each team member using Hackolade;\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003e- on each team member's computer, start Hackolade, go to Help \u003e DB target plugin manager, then click the button 'Install from zip file', and choose the zip file file.\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003e  \n\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003eFor the changes to take effect on each computer, it is required to exit Hackolade and restart it.\u003c/span\u003e\n\n\u003cspan class=\"rvts6\"\u003e  \n\u003c/span\u003e\n\n\n\n\u003c/div\u003e\n\n\u003c/div\u003e\n\n\u003c/article\u003e\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhackolade%2Fcbanalytics","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhackolade%2Fcbanalytics","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhackolade%2Fcbanalytics/lists"}