| <!-- | 
 | Licensed to the Apache Software Foundation (ASF) under one | 
 | or more contributor license agreements.  See the NOTICE file | 
 | distributed with this work for additional information | 
 | regarding copyright ownership.  The ASF licenses this file | 
 | to you under the Apache License, Version 2.0 (the | 
 | "License"); you may not use this file except in compliance | 
 | with the License.  You may obtain a copy of the License at | 
 |  | 
 | http://www.apache.org/licenses/LICENSE-2.0 | 
 |  | 
 | Unless required by applicable law or agreed to in writing, | 
 | software distributed under the License is distributed on an | 
 | "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | 
 | KIND, either express or implied.  See the License for the | 
 | specific language governing permissions and limitations | 
 | under the License. | 
 | --> | 
 |  | 
 | # Apache Flink Web Dashboard | 
 |  | 
 | The web dashboard is work in progress towards the new Flink runtime monitor. In particular, it will | 
 | provide the following missing features of the current web dashboard: | 
 |  | 
 |  - Live progress monitoring (via live accumulators) | 
 |  - A graph view of the program, as it is executed. | 
 |  - A REST style API to access the status of individual jobs. | 
 |  - A more modular design | 
 |  | 
 | The dashboard listens at `http://localhost:8081`. | 
 |  | 
 | The new web dashboard is work in progress. It starts an HTTP server (by default at port 8081) | 
 | that serves the new web pages and additional background requests. | 
 |  | 
 | ## Server Backend | 
 |  | 
 | The server side of the dashboard is implemented using [Netty](http://netty.io) with | 
 | [Netty Router](https://github.com/sinetja/netty-router) for REST paths. | 
 | The framework has very lightweight dependencies. | 
 |  | 
 | The code is regular Java code built via Maven. To add additional request handlers, follow the | 
 | example of the `org.apache.flink.runtime.webmonitor.handlers.JobSummaryHandler`. | 
 |  | 
 |  | 
 | ## Dashboard Frontend  | 
 |  | 
 | The web dashboard is implemented using *Angular*. The dashboard build infrastructure uses *node.js*. | 
 |  | 
 |  | 
 | ### Preparing the Build Environment | 
 |  | 
 | Depending on your version of Linux, Windows or MacOS, you may need to manually install *node.js* | 
 |  | 
 |  | 
 |  | 
 | #### Ubuntu Linux | 
 |  | 
 | Install *node.js* by following [these instructions](https://nodejs.org/en/download/). | 
 |  | 
 | Verify that the installed version is at least *18.19.1*, via `node --version`. | 
 |  | 
 |  | 
 | #### MacOS | 
 |  | 
 | First install *brew* by following [these instructions](http://brew.sh/). | 
 |  | 
 | Install *node.js* via: | 
 |  | 
 | ``` | 
 | brew install node | 
 | ``` | 
 |  | 
 | ### Building | 
 |  | 
 | The build process downloads all requires libraries via the *node.js* package management tool (*npm*) | 
 | The final build tool is *@angular/cli*. | 
 |  | 
 | ``` | 
 | cd flink-runtime-web/web-dashboard | 
 | npm install | 
 | npm run build | 
 | ``` | 
 |  | 
 | The dashboard code is under `/src`. The result of the build process is under `/web`. | 
 |  | 
 | ### Developing | 
 |  | 
 | When developing the dashboard, every change needs to recompile the files and update the server: | 
 |  | 
 | ``` | 
 | cd flink-runtime-web/web-dashboard | 
 | npm run build | 
 | cd ../../flink-dist | 
 | mvn -DskipTests clean package | 
 | ``` | 
 |  | 
 | To simplify continuous development, one can use a *standalone proxy server*, together with automatic | 
 | re-compilation: | 
 |  | 
 | 1. Start the proxy server via `npm run proxy` (You can modify the proxy target in the `proxy.conf.json`, the default proxy target is `localhost:8081`) | 
 | 2. Access the dashboard at [`http://localhost:4200`](http://localhost:4200) | 
 |  | 
 | ### CodeStyle & Lint | 
 |  | 
 | > Tips: Before committing, make sure you've run `npm run lint-staged` and that no errors are reported. | 
 |  | 
 | ```bash | 
 | $ npm run lint | 
 | ``` | 
 |  | 
 | ### How to update the NOTICE | 
 | > Tip: If you've made a modification to any of the dependencies, make sure you've run `dev/generate_notice` before committing to update the `NOTICE` file. | 
 |  | 
 | ```bash | 
 | ./web-dashboard/dev/generate_notice.sh | 
 | ``` | 
 |  | 
 | ### Dependency | 
 |  | 
 | - Framework: [Angular](https://angular.dev) | 
 | - CLI Tools: [Angular CLI](https://angular.dev/tools/cli) | 
 | - UI Components: [NG-ZORRO](https://github.com/NG-ZORRO/ng-zorro-antd) |