Project: OpenObserve (Observability and Analysis / Observability)
File: CONTRIBUTING.md

OpenObserve uses Rust & embdeds sled db (For server) & VueJS (For Web UI) You must have follwing installed: Git Rust & Cargo 1.70+ nodejs v14+ and npm v6+ Alternatively you can use pre-configured devcontainer in VS code to get up and running quickly. ```shell git clone https://github.com/openobserve/openobserve cd openobserve ``` ```shell cd web npm install npm run build cd .. ``` Output will be stored in web/dist folder. web/dist will be embedded in openobserve binary when openobserve application is built. It is important that you build the web app every time you make any changes to javascript code as the built code is then embedded in openobserve application. Make sure you are in openobserve directory & not in openobserve/web, and have Rust toolchain installed: Install `protoc`: Make sure the protoc is >= 3.15 ``` wget https://github.com/protocolbuffers/protobuf/releases/download/v21.12/protoc-21.12-linux-x86_64.zip unzip protoc-21.12-linux-x86_64.zip -d protoc sudo cp protoc/bin/protoc /usr/local/bin/ sudo cp -r protoc/include/google /usr/local/include/ curl -L -o protoc-21.12-win64.zip https://github.com/protocolbuffers/protobuf/releases/download/v21.12/protoc-21.12-win64.zip unzip protoc-21.12-win64.zip -d protoc cp protoc/bin/protoc.exe C:/windows/system32/protoc.exe cp -r protoc/include/google C:/windows/system32/ brew install protobuf ``` Build the binary: ```shell cargo build --release ``` Once you have the source code cloned you can start development. There are 2 areas of development. UI Server ```shell ZOROOTUSEREMAIL="root@example.com" ZOROOTUSERPASSWORD="Complexpass#123" cargo run ``` This will start the openobserve API server on port 5080 environment variables ZOROOTUSEREMAIL and ZOROOTUSERPASSWORD can be used first time to configure default admin user when openobserve is started. If not alredy present create .env file in web directory & set VITEOPENOBSERVEENDPOINT=http://localhost:5080 ```shell cd web npm install npm run dev ``` This will start UI server on port 8081, to change port specify it in vite.config.ts In order for you to effectively use the UI you would want to have the openobserve API server running in a separate window that will accept requests from the UI. The server also exposes a Swagger API endpoint which you can see by visiting the `/swagger/index.html`

It uses to mark API endpoints with comment annotations & to generate the API spec from the annotations to Swagger Documentation 2.0. Make sure that you have . Simple build: ```shell docker build -t openobserve:latest-amd64 -f deploy/build/Dockerfile . ``` Multi-arch build In order to build multi-arch builds you will need installed. You will need to pass the platform flag for the platform that you want to build. ```shell docker build -t openobserve:latest-amd64 -f deploy/build/Dockerfile.tag.amd64 . ``` Please check folder deploy/build for docker files. We check for following in CI pipeline for any pull requests. Unit test code coverage for rust code. If code coverage is less than 81% the CI tests will fail. You can test coverage yourself by running `./coverage.sh` We use to generate code coverage report in JSON format. Run `cargo llvm-cov --lcov --output-path lcov.info` to generate report and use with VS code for visualizing code coverage. You can also generate html report by using `cargo llvm-cov --html` to generate html report in target/debug/llvm-cov/html/index.html Linting in Javascript for GUI We run eslint for javacript anf any linting failures will result in build failures. You can test for linting failures by running `./eslint.sh` in web folder. Fork the repository on github (e.g. awesomedev/openobserve) Clone the repo from the forked repository ( e.g. awesomedev/openobserve) to your machine. create a new branch locally. Make the changes to code. Push the code to your repo. Create a PR Make sure that the automatic CI checks pass for your PR. build: Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm) ci: Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs) docs: Documentation only changes feat: A new feature fix: A bug fix perf: A code change that improves performance refactor: A code change that neither fixes a bug nor adds a feature style: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc) test: Adding missing tests or correcting existing tests