{"id":23109672,"url":"https://github.com/inetsoft-technology/stylebi","last_synced_at":"2025-08-16T18:32:33.903Z","repository":{"id":248173955,"uuid":"827836816","full_name":"inetsoft-technology/stylebi","owner":"inetsoft-technology","description":"StyleBI is an easy to use interactive dashboard software application that includes real time reporting capabilities.","archived":false,"fork":false,"pushed_at":"2024-12-11T19:30:53.000Z","size":62626,"stargazers_count":10,"open_issues_count":1,"forks_count":6,"subscribers_count":5,"default_branch":"main","last_synced_at":"2024-12-11T20:31:33.290Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/inetsoft-technology.png","metadata":{"files":{"readme":"README-enterprise.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":"2024-07-12T13:35:41.000Z","updated_at":"2024-12-11T19:30:57.000Z","dependencies_parsed_at":"2024-12-11T20:35:23.799Z","dependency_job_id":null,"html_url":"https://github.com/inetsoft-technology/stylebi","commit_stats":null,"previous_names":["inetsoft-technology/stylebi"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inetsoft-technology%2Fstylebi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inetsoft-technology%2Fstylebi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inetsoft-technology%2Fstylebi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inetsoft-technology%2Fstylebi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/inetsoft-technology","download_url":"https://codeload.github.com/inetsoft-technology/stylebi/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230049374,"owners_count":18164879,"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-12-17T01:39:39.032Z","updated_at":"2024-12-17T01:39:40.325Z","avatar_url":"https://github.com/inetsoft-technology.png","language":"Java","funding_links":[],"categories":["General","数据科学"],"sub_categories":["计算机视觉"],"readme":"# Enterprise Development Environment Instructions\n\n\u003e This file contains instructions for working on the Enterprise version of StyleBI.\n\u003e It is only intended for use by InetSoft employees. Users of the open source\n\u003e Community version should follow the instructions in the [README.md](./README.md)\n\u003e file.\n\n---\n\n**IMPORTANT** This requires Java 21. Make sure that it is installed and that\nyou have the `JAVA_HOME` environment variable set correctly.\n\n## Initial Setup\n\nIf you are viewing this file directly on the Git server, to check out this project:\n\n* Create a new project from version control in Intellij or run `git clone https://USERNAME@repo.inetsoft.com/stylebi/stylebi --recurse-modules`\n* In the project root directory, run `git submodule foreach git switch master`\n\nMake sure you have a [GitHub account](https://github.com/signup). Create a [classic personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens).\n\nCreate the `~/.m2/settings.xml` file with the following, replacing `YOUR_GITHUB_UESRNAME` and `YOUR_GITHUB_ACCESS_TOKEN` with your GitHub username and access token, respectively:\n\n```xml\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?\u003e\n\u003csettings\u003e\n    \u003c!--\n     This should be a path on your computer that is short, otherwise\n     you'll get a path length error.\n     --\u003e\n    \u003clocalRepository\u003eD:/m2\u003c/localRepository\u003e\n    \u003cservers\u003e\n        \u003cserver\u003e\n            \u003cid\u003egh-stylebi\u003c/id\u003e\n            \u003cusername\u003eYOUR_GITHUB_USERNAME\u003c/username\u003e\n            \u003cpassword\u003eYOUR_GITHUB_ACCESS_TOKEN\u003c/password\u003e\n        \u003c/server\u003e\n    \u003c/servers\u003e\n\u003c/settings\u003e\n```\n\nMake sure you set the `localRepository` property to a _short_ path on your\nmachine. Do not leave this as the default. This is only really necessary on\nWindows.\n\nIf you did not clone the repository with the `--recurse-submodules` or by creating a project from VCS in Intellij, you'll need to run the following:\n\n```shell\ngit submodule init\ngit submodule update --checkout\n```\n\nAfter you have cloned the repository and initialized the submodules, make sure the submodules are tracking the master branch:\n\n```shell\ngit submodule foreach git switch master\n```\n\n### Building\n\nThe first time you build the project, run the following:\n\n```\n.\\mvnw.cmd install -DskipTests \"-Pcommunity,enterprise\"\n```\n\nTo perform a clean rebuild, run the following:\n\n```\n.\\mvnw.cmd clean install -DskipTests \"-Pcommunity,enterprise\"\n```\n\nTo perform an incremental compile of just the core Java source for use\nin the local development server, run:\n\n```\n.\\mvnw.cmd compile -pl core -DskipTests\n```\n\nTo just compile or watch the Angular code, use the NPM commands in the\n`web` directory.\n\nTo rebuild one of the other modules, such as one under the `plugins` or\n`tabular` directories, run:\n\n```\n.\\mvnw.cmd clean install -pl plugins/inetsoft-xml-formats -am -DskipTests \"-Pcommunity,enterprise\"\n```\n\nNote that this will require a server restart if you currently have it\nrunning.\n\nYou can run the build in parallel with the `-T 1C` option. This will allow up\nto 1 thread per core. This is mostly useful for the `clean install` goal and\nmay lead to a significant improvement in build speed.\n\n### Running the Server\n\nTo start the server, run the following:\n\n```\n.\\mvnw.cmd -o spring-boot:run -pl server -DskipTests \"-Pcommunity,enterprise\"\n```\n\nTo use AWS storage:\n\n1. Make sure the server is not running.\n2. Delete the `server/target/server` directory.\n3. Run `docker compose up -d` in the `server/src/test/docker/aws` directory.\n4. Run `.\\mvnw.cmd -o generate-test-resources -pl server \"-PawsStorage,community,enterprise\" -DskipTests`\n\nTo use Google storage:\n\n1. Make sure the server is not running.\n2. Delete the `server/target/server` directory.\n3. Run `docker compose up -d` in the `server/src/test/docker/google` directory.\n4. Run `.\\mvnw.cmd -o generate-test-resources -pl server \"-PgoogleStorage,community,enterprise\" -DskipTests`\n\n### Shell\n\nTo run the shell, use this command on Windows:\n\n```\n.\\shell\\target\\shell\\bin\\inetsoft-shell.cmd\n```\n\nor on Linux:\n\n```\nshell/target/shell/bin/inetsoft-shell.sh\n```\n\n### DSL\n\nTo run a DSL script, use this command on Windows:\n\n```\n.\\shell\\target\\shell\\bin\\run-script.cmd PATH_TO_DSL\n```\n\nor on Linux:\n\n```\nshell/target/shell/bin/run-script.sh PATH_TO_DSL\n```\n\n### Cloud runners\n#### Kubernetes\n1. Launch a kubernetes cluster\n   * For quick testing, you can start a kubernetes cluster in docker desktop\n   * Download and install Lens ide to connect to the kubernetes cluster and check up on job execution\n\n2. Configure inetsoft.yaml or docker-compose.yaml \n   * ```inetsoft-kubernetes/src/test/resources/cloudrunner/inetsoft.yaml```\n   * See ```KubernetesCloudRunnerConfig``` for all settings\n   * The example inetsoft.yaml uses localstack for key value and blob storage but a file based storage using a shared volume should work too.\n   * When starting docker containers for the server and scheduler, make sure to set the following environment variables:\n     * INETSOFT_HOST_IP - set it to the ip of the host machine\n     * INETSOFT_HOST_PORT - host port for node discovery. Needs to match the value set in the port mapping, e.g. if port mapping is 5702:5701 then the value of this variable should be 5702\n     * INETSOFT_HOST_OUTBOUND_PORT - host port for node communication. Needs to match the value set in the port mapping, e.g. if port mapping is 47101:47100 then the value of this variable should be 47101\n\n3. Start inetsoft server\n   * For dev purposes, the inetsoft server can be started outside the cluster.\n\n4. Run the task\n   * Open EM -\u003e Schedule and run a schedule task.\n   * In the Lens ide, open Workloads -\u003e Jobs. Anytime you run a task a new job will be created here.\n\n\n#### Fargate (AWS)\n1. Set up aws services\n   * Create access key. Go to aws console, click on profile -\u003e Security Credentials -\u003e Create access key.\n   * Create an ECS cluster.\n   * Create an EC2 instance for the inetsoft server and note down its subnet and security group.\n   * Create an ECR to store the docker images. Create docker images and push them to the ECR.\n\n2. Configure inetsoft.yaml or docker-compose.yaml\n   * ```inetsoft-integration-aws/src/test/resources/cloudrunner/inetsoft.yaml```\n   * Set dynamodb for the key value storage. Table is automatically created if it doesn't exist.\n   * Set s3 for the blob storage. Bucket is automatically created if it doesn't exist.\n   * Set fargate for the cloud runner. Specify executionRoleArn if fargate task is pulling the docker image from a private ECR. Use the same vpcSubnets and vpcSecurityGroups as the EC2 instance that the inetsoft server runs on so that the runner can connect to the cluster and notify of its status. See ```FargateCloudRunnerConfig``` for more settings.\n   * When starting docker containers for the server and scheduler, make sure to set the following environment variables:\n     * INETSOFT_HOST_IP - set it to the internal ip of the EC2 instance\n     * INETSOFT_HOST_PORT - host port for node discovery. Needs to match the value set in the port mapping, e.g. if port mapping is 5702:5701 then the value of this variable should be 5702\n     * INETSOFT_HOST_OUTBOUND_PORT - host port for node communication. Needs to match the value set in the port mapping, e.g. if port mapping is 47101:47100 then the value of this variable should be 47101\n\n3. Start inetsoft server on EC2\n   * Enable ssh access to EC2. Install docker and aws configure. Login to docker and pull the inetsoft server docker image. https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html\n   * Start the scheduler.\n\n4. Run the task\n  * Open EM -\u003e Schedule and run a schedule task.\n  * In the aws console, ECS -\u003e inetsoft_runner_cluster -\u003e Tasks, you should see a fargate task be created.\n\n#### Azure\n1. Set up Azure services\n  * Sign in with Azure CLI to set up some of the services that can't be done with the Azure portal.\n  * Create a resource group, blob storage account, cosmos db, and container registry\n  * Create a service principal for authentication. https://learn.microsoft.com/en-us/azure/developer/java/sdk/identity-service-principal-auth\n    * ``` az ad sp create-for-rbac --name PRINCIPAL_NAME --role Contributor --scopes /subscriptions/SUBCSRIPTION_ID ```\n    * Use appId as clientId and password as clientSecret in the runner config\n  * Create a virtual network. Add a subnet and in the subnet config make the following changes:\n    * Service Endpoints -\u003e Services -\u003e Select Microsoft.ContainerRegistry\n    * Subnet Delegation -\u003e Delegate subnet to a service -\u003e Select Microsoft.App/environments\n  * Create a Container Apps Environment\n    * Get the subnet id created above\n      * ```az network vnet subnet show --resource-group RESOURCE_GROUP --vnet-name VIRTUAL_NETWORK_NAME --name SUBNET_NAME --query \"id\" -o tsv```\n    * Run the following command to create the environment\n      * az containerapp env create -n APP_ENV_NAME -g RESOURCE_GROUP --location eastus --infrastructure-subnet-resource-id SUBNET_ID\n      \n2. Configure inetsoft.yaml or docker-compose.yaml\n  * ```inetsoft-integration-azure/src/test/resources/cloudrunner/inetsoft.yaml```\n  * See ```AzureCloudRunnerConfig``` for all settings\n  * When starting docker containers for the server and scheduler, make sure to set the following environment variables:\n    * INETSOFT_HOST_IP - set it to the internal ip of the Azure VM\n    * INETSOFT_HOST_PORT - host port for node discovery. Needs to match the value set in the port mapping, e.g. if port mapping is 5702:5701 then the value of this variable should be 5702\n    * INETSOFT_HOST_OUTBOUND_PORT - host port for node communication. Needs to match the value set in the port mapping, e.g. if port mapping is 47101:47100 then the value of this variable should be 47101\n\n3. Start inetsoft server on a VM in Azure\n  * Use the virtual network created earlier for this VM so that the runner shares the same network.\n  * Enable ssh access to the VM. Install docker and pull the inetsoft server docker image.\n  * Start the scheduler.\n\n4. Run the task\n   * Open EM -\u003e Schedule and run a schedule task.\n   * In the Azure portal -\u003e Container App Jobs, you should see a job be created.\n\n#### Google\n1. Set up google services\n  * Create Cloud Storage for the blob storage and Firestore for the key value storage.\n  * Create a virtual network and note down the name and the subnet as it will be used for the VM and the runner\n  * Create a service account and give it permissions to access google cloud resources\n    * Create a key and download the json file\n    * Base64 encode the json and set serviceAccountJson in inetsoft.yaml\n\n2. Configure inetsoft.yaml or docker-compose.yaml\n   * ```inetsoft-integration-google/src/test/resources/cloudrunner/inetsoft.yaml```\n   * ```inetsoft-integration-google/src/test/resources/cloudrunner/docker-compose.yaml```\n   * See ```GoogleCloudRunnerConfig``` for all settings\n   * When starting docker containers for the server and scheduler, make sure to set the following environment variables (see docker-compose.yaml).\n     * INETSOFT_HOST_IP - set it to the internal ip of the Google cloud VM\n     * INETSOFT_HOST_PORT - host port for node discovery. Needs to match the value set in the port mapping, e.g. if port mapping is 5702:5701 then the value of this variable should be 5702\n     * INETSOFT_HOST_OUTBOUND_PORT - host port for node communication. Needs to match the value set in the port mapping, e.g. if port mapping is 47101:47100 then the value of this variable should be 47101\n\n3. Start inetsoft server on a VM in Google\n  * Use the VPC network created in Step 1\n  * Enable ssh access to the VM. Install docker and pull the inetsoft server docker image.\n  * Configure the firewall so that the server is accessible from your ip\n  * Start the scheduler\n\n4. Run the task\n  * Open EM -\u003e Schedule and run a schedule task.\n  * In the Google cloud portal -\u003e Cloud Run Jobs, you should see a job be created.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finetsoft-technology%2Fstylebi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finetsoft-technology%2Fstylebi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finetsoft-technology%2Fstylebi/lists"}