Code Monkey home page Code Monkey logo

status's Introduction

⚠️ Project in maintenance mode. This means no new features will appear, only bug fixes. For more info, see Announcement.

🤔 What is it?

ℹ️ Status is a simple, lightweight system monitoring app for small homeservers running Linux. It utilizes virtual filesystems (like /sys, /proc etc.) to retrieve information and give it to end user via nice web interface.

⚖️ Status provides a good balance between power and simplicity.

🏃 Runs flawlessly on most desktop computers, mini PCs and Raspberry Pis. However, virtual isolated environments may cause problems.

📺 Check the live demo! (hosted by Codixer, see #6)

Web UI

📱 iOS app by @JGeek00 - AppStore

🚀 Installation

This will take you just a few seconds. It's up to you which one you choose :)

🔨 Bare-metal

✔️ Recommended. Status has access to all virtual filesystems in your OS, which means more information and most reliable values.

# Clone the repo
git clone https://github.com/dani3l0/Status && cd Status

# Install required modules
pip3 install -r requirements.txt

# Run Status!
python3 status.py

🐳 Docker

It just works. Most of features should run without hassle, but depending on your OS configuration you may notice some minor limitations.

# Clone the repo
git clone https://github.com/dani3l0/Status && cd Status

# Build & run app
docker-compose up -d

App should be available on localhost:9090.

🔧 Configuration

Status can be configured in multiple ways:

  1. 🖥️ Command line arguments - the most important and will override everything.

  2. 🏞️ environment variables - will override configuration file.

  3. 📝 configuration file - the least important, overrides default configuration only.

It's good not to mix them. Use --help for more information.

✏️ Config keys naming

Config keys are named slightly differently under different ways of configuration. Look at the table:

in JSON config Environment variable Command line argument
The rule {section}.{key} STATUS_{SECTION}_{KEY} --{section}-{key}
Example #1 server.port STATUS_SERVER_PORT --server-port
Example #2 server.address STATUS_SERVER_ADDRESS --server-address
Example #3 misc.debug STATUS_MISC_DEBUG --misc-debug

Command line offers --config (or -c) to set custom config location.

Running Status with --no-config will neither read nor write any configuration file. Overrides --config.

status's People

Contributors

cooocy avatar dani3l0 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

status's Issues

Add docker support

I really like the simplicity and all but it really needs docker support

Unable to pass custom port option into Docker

This might just be my own stupidity (which if so, awesome, I get to learn something new) but when I attempt to add

 environment:
      STATUS_SERVER_PORT: 9091

or

 environment:
      - STATUS_SERVER_PORT=9091

to the docker-compose.yml, I get a snippy response of

status_app  | unhandled exception during asyncio.run() shutdown
status_app  | task: <Task finished name='Task-1' coro=<_run_app() done, defined at /usr/local/lib/python3.11/site-packages/aiohttp/web.py:289> exception=TypeError('The port is required to be int.')>
status_app  | Traceback (most recent call last):
status_app  |   File "/usr/local/lib/python3.11/site-packages/aiohttp/web.py", line 516, in run_app
status_app  |     loop.run_until_complete(main_task)
status_app  |   File "/usr/local/lib/python3.11/asyncio/base_events.py", line 654, in run_until_complete
status_app  |     return future.result()
status_app  |            ^^^^^^^^^^^^^^^
status_app  |   File "/usr/local/lib/python3.11/site-packages/aiohttp/web.py", line 418, in _run_app
status_app  |     names = sorted(str(s.name) for s in runner.sites)
status_app  |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
status_app  |   File "/usr/local/lib/python3.11/site-packages/aiohttp/web.py", line 418, in <genexpr>
status_app  |     names = sorted(str(s.name) for s in runner.sites)
status_app  |                        ^^^^^^
status_app  |   File "/usr/local/lib/python3.11/site-packages/aiohttp/web_runner.py", line 114, in name
status_app  |     return str(URL.build(scheme=scheme, host=host, port=self._port))
status_app  |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
status_app  |   File "/usr/local/lib/python3.11/site-packages/yarl/_url.py", line 237, in build
status_app  |     raise TypeError("The port is required to be int.")
status_app  | TypeError: The port is required to be int.
status_app  | Traceback (most recent call last):
status_app  |   File "/app/status.py", line 75, in <module>
status_app  |     web.run_app(app, host=config.get("server", "address"), port=config.get("server", "port"), ssl_context=ssl_context)
status_app  |   File "/usr/local/lib/python3.11/site-packages/aiohttp/web.py", line 516, in run_app
status_app  |     loop.run_until_complete(main_task)
status_app  |   File "/usr/local/lib/python3.11/asyncio/base_events.py", line 654, in run_until_complete
status_app  |     return future.result()
status_app  |            ^^^^^^^^^^^^^^^
status_app  |   File "/usr/local/lib/python3.11/site-packages/aiohttp/web.py", line 418, in _run_app
status_app  |     names = sorted(str(s.name) for s in runner.sites)
status_app  |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
status_app  |   File "/usr/local/lib/python3.11/site-packages/aiohttp/web.py", line 418, in <genexpr>
status_app  |     names = sorted(str(s.name) for s in runner.sites)
status_app  |                        ^^^^^^
status_app  |   File "/usr/local/lib/python3.11/site-packages/aiohttp/web_runner.py", line 114, in name
status_app  |     return str(URL.build(scheme=scheme, host=host, port=self._port))
status_app  |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
status_app  |   File "/usr/local/lib/python3.11/site-packages/yarl/_url.py", line 237, in build
status_app  |     raise TypeError("The port is required to be int.")
status_app  | TypeError: The port is required to be int.

I figure there's just some input sanitation needed, as I'm probably one of the few morons who is trying to run this on a custom port through docker. Either that or I just don't know the proper syntax to pass an int through an environment variable to Docker.

Support 'go back' and 'go forward' of browser?

Now it doesn't support 'go back' and 'go forward' of browser or 'left slide' and 'right slide' of cell phone. When I want to go back, I must click the back icon on left of the title.
If it can support the above functions, I think it will be more friendly to users.

AttributeError: 'NoneType' object has no attribute 'split'

C:\Users\wibe0\OneDrive\桌面\新增資料夾 (2)\Status> python status.py
Traceback (most recent call last):
  File "C:\Users\wibe0\OneDrive\桌面\新增資料夾 (2)\Status\status.py", line 11, in <module>
    machine = Machine()
              ^^^^^^^^^
  File "C:\Users\wibe0\OneDrive\桌面\新增資料夾 (2)\Status\lib\machine\__init__.py", line 11, in __init__
    self.cpu = CPU()
               ^^^^^
  File "C:\Users\wibe0\OneDrive\桌面\新增資料夾 (2)\Status\lib\machine\cpu.py", line 27, in __init__
    cpu_info = self.get_cpu_info()
               ^^^^^^^^^^^^^^^^^^^
  File "C:\Users\wibe0\OneDrive\桌面\新增資料夾 (2)\Status\lib\machine\cpu.py", line 117, in get_cpu_info
    for line in cpu_info.split("\n"):
                ^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'split'```

system : windows11
py : 3.11.5

get data as json

Hi, thank you for this project, is it possible to add feature that allow us to get data as api json, so we can show it on somewhere else?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.