2018-03-24 12:01:49 +00:00
|
|
|
# termdash
|
2018-03-24 12:14:06 +00:00
|
|
|
|
|
|
|
This project implements a terminal based dashboard. The feature set is inspired
|
2018-03-24 12:31:33 +00:00
|
|
|
by the [gizak/termui](http://github.com/gizak/termui) project, which in turn
|
|
|
|
was inspired by a javascript based
|
|
|
|
[yaronn/blessed-contrib](http://github.com/yaronn/blessed-contrib). Why the
|
|
|
|
rewrite you ask?
|
2018-03-24 12:14:06 +00:00
|
|
|
|
2018-03-24 12:31:33 +00:00
|
|
|
1. The above mentioned [gizak/termui](http://github.com/gizak/termui) is
|
|
|
|
abandoned and isn't maintained anymore.
|
2018-03-24 12:14:06 +00:00
|
|
|
1. The project doesn't follow the design goals outlined below.
|
|
|
|
|
|
|
|
# Design goals
|
|
|
|
|
2018-04-02 02:04:02 +02:00
|
|
|
This effort is focused on good software design and maintainability. By good
|
2018-04-02 02:03:15 +02:00
|
|
|
design I mean:
|
2018-03-24 12:14:06 +00:00
|
|
|
|
|
|
|
1. Write readable, well documented code.
|
2018-03-24 12:31:33 +00:00
|
|
|
1. Only beautiful, simple APIs, no exposed concurrency, channels, internals, etc.
|
|
|
|
1. Follow [Effective Go](http://golang.org/doc/effective_go.html).
|
2018-03-24 12:14:06 +00:00
|
|
|
1. Provide an infrastructure that allows development of individual dashboard
|
|
|
|
components in separation.
|
2018-03-24 12:31:33 +00:00
|
|
|
1. The infrastructure must enforce consistency in how the dashboard components
|
|
|
|
are implemented.
|
2018-03-24 12:14:06 +00:00
|
|
|
1. Focus on maintainability, the infrastructure and dashboard components must
|
|
|
|
have good test coverage, the repository must have CI/CD enabled.
|
|
|
|
|
|
|
|
On top of that - let's have fun, learn something and become better developers
|
|
|
|
together.
|
2018-03-24 12:31:33 +00:00
|
|
|
|
|
|
|
# Requirements
|
|
|
|
|
2018-03-26 15:40:23 +01:00
|
|
|
1. Native support of the UTF-8 encoding.
|
|
|
|
1. Simple container management to position the widgets and set their size.
|
2018-03-24 12:31:33 +00:00
|
|
|
1. Mouse and keyboard input.
|
|
|
|
1. Cross-platform terminal based output.
|
|
|
|
1. Unit testing framework for simple and readable tests of dashboard elements.
|
2018-03-26 15:40:23 +01:00
|
|
|
1. Tooling to streamline addition of new widgets.
|
|
|
|
1. Apache-2.0 licence for the project.
|
2018-03-24 17:09:34 +00:00
|
|
|
|
|
|
|
# High-Level design
|
|
|
|
|
2018-04-23 00:44:32 +01:00
|
|
|
See the [design document](doc/hld.md).
|
|
|
|
|
|
|
|
# Contributing
|
|
|
|
|
|
|
|
If you are willing to contribute, improve the infrastructure or develop a
|
|
|
|
widget, first of all Thank You! Your help is appreciated.
|
|
|
|
|
|
|
|
Please see the [CONTRIBUTING.md](CONTRIBUTING.md) file for guidelines related
|
|
|
|
to the Google's CLA, and code review requirements.
|
|
|
|
|
|
|
|
As stated above the primary goal of this project is to develop readable, well
|
2018-05-06 19:28:52 +01:00
|
|
|
designed code, the functionality and efficiency come second. This is achieved
|
|
|
|
through detailed code reviews, design discussions and following of the [design
|
|
|
|
guidelines](doc/design_guidelines.md). Please familiarize yourself with these
|
|
|
|
before contributing.
|
|
|
|
|
|
|
|
## Contributing widgets
|
|
|
|
|
|
|
|
If you're developing a new widget, please see the [widget
|
|
|
|
development](doc/widget_development.md) section.
|
2018-03-26 18:22:07 +01:00
|
|
|
|
|
|
|
# Project status
|
|
|
|
|
|
|
|
- [x] High-Level Design.
|
2018-03-27 19:01:35 +01:00
|
|
|
- [x] Submit the APIs.
|
2018-04-02 02:03:15 +02:00
|
|
|
- [x] Implement the terminal layer.
|
|
|
|
- [x] Implement unit test helpers.
|
|
|
|
- [x] Implement the container.
|
2018-04-09 03:17:40 +01:00
|
|
|
- [x] Implement the input event pre-processing.
|
|
|
|
- [x] Add support for tracking mouse and keyboard focus.
|
|
|
|
- [x] Implement the first widget.
|
2018-04-23 01:05:54 +01:00
|
|
|
- [x] Implement the infrastructure layer.
|
2018-04-23 00:44:32 +01:00
|
|
|
- [ ] Write the design guidelines document.
|
2018-03-26 18:22:07 +01:00
|
|
|
- [ ] Documentation and tooling for widget development.
|
2018-04-23 01:05:54 +01:00
|
|
|
- [ ] Implement the first widget.
|
2018-04-23 01:11:59 +01:00
|
|
|
- [ ] Move internal libraries to internal/ directory.
|
2018-03-26 18:22:07 +01:00
|
|
|
- [ ] Launch and iterate.
|