Giter Site home page Giter Site logo

rmountjoy92 / dashmachine Goto Github PK

View Code? Open in Web Editor NEW
1.2K 1.2K 120.0 11.59 MB

Another web application bookmark dashboard, with fun features.

License: GNU General Public License v3.0

Dockerfile 0.14% Python 45.34% CSS 27.52% JavaScript 7.54% HTML 19.30% Mako 0.16%

dashmachine's People

Contributors

aerion avatar auanasgheps avatar azelphur avatar captain-otter avatar di-dc avatar franznemeth avatar j0n4t4n avatar lingawakad avatar lukasmrtvy avatar nixellion avatar odinsride avatar rmountjoy92 avatar spiral6 avatar supersandro2000 avatar the4ndy avatar thlb 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dashmachine's Issues

Changing size of tiles

I really like your project and I want to use it. But I have many links so it could be a problem because you have to scroll a lot. I think it would be very nice to have an option to resize your tiles.
Thank You!

Add readme for Pihole platform

I'm trying to use the pihole data source platform script. There is no help or read me that I can find for it and i'm unable to get data back.

My config going off errors and what I can understand of the code (sorry, not a dev) is below. Using this doesn't give me errors but all it outpus is the value of “value_template”

[pl_pihole]
platform = pihole
host = 192.168.1.101
password = [redacted] <-- tried with plain text password and API token
value_template = topClients
UPDATE: I snooped the traffic it it is working with the password. I'm just unable to get it to display anything.

DashMachine not working under subdomain, works fine from port

Using DashMachine on a subdomain of my host (i.e. dashmachine.example.com) is not working fine, I get the following error in the logs:

[2020-03-16 03:56:10,242] ERROR in app: Exception on /login [POST]
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 2446, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 1951, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python3.8/site-packages/flask_restful/__init__.py", line 272, in error_router
    return original_handler(e)
  File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 1820, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python3.8/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 1947, in full_dispatch_request
    rv = self.preprocess_request()
  File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 2241, in preprocess_request
    rv = func()
  File "/dashmachine/dashmachine/main/routes.py", line 45, in check_valid_login
    request.endpoint.startswith("static"),
AttributeError: 'NoneType' object has no attribute 'startswith'

However, I don't get this error or anything like it when directly accessing DashMachine from the host and port. (i.e. example.com:5000)

I just updated and it wont start

Please delete site.db in your user_data folder and restart your container. This will reset your user table, log in with the default user/pass.

Tag Header and dropdown entry hide when not applicable

The tag header and dropdown entry should hide from users when they are not applicable.

I have apps that certain users cant see but they keep seeing a blank header entry and dropdown entry when its not applicable to them at all.

Watchdog panel

It would be really cool to have an optional ‘watchdog’ panel.

Personally I'd like it to take up like 20% of the sceen on the right or so (like s2 or s4 in materialize) and display a compact-ish list of ‘icon name status_icon’ for the services I host.

From the technical perspective I imagine it using:

Ping for when the most simple up\down check is required
GET request that attempts to load a page and reports it as “online” if it's response is 200 OK, and “offline” if it's anything else (or separate ones for 503 error as that is 100% service is down, and 404 could be yellow indicator?)
REST + Condition for when a service returns a JSON with a status or resulting page has to contain specific text string and when simple GET may not be enough
I imagine first two would cover most situations, with the third one being “for later”.

I was about to start writing my own dash when I remembered about this one that I've seen just a few days ago, and since it is writtien in my favorite combo of Python+Flask I'd be willing to contribute. I usually use bootstrap4 but materialize actually seems like a better choice here, so that's good too :)

P.S.: The “fuck” commit comment I totally did not imagine it said in Geralt from Netflix's The Witcher manner.

P.P.S.: If you wanna discuss it poke me on discord, I may have questions when I start poking around in the code :D Nix#8175

Compatability with raspberry pi

Hi,

I tried running the docker line from the README on a raspberry pi running raspbian

docker create
--name=dashmachine
-p 5000:5000
-v path/to/data:/DashMachine/dashmachine/user_data
--restart unless-stopped
rmountjoy/dashmachine:latest
using my own custom path (empty folder) in place of path/to/data. The docker container seems to immediately exit. Checking the logs (docker logs --tail 50 --follow --timestamps), I get the following error:

standard_init_linux.go:211: exec user process caused "exec format error"

Support Headers for rest platform

Support headers for rest platform.

One of the things I wanted to do was Bearer Authorization, but since it's not supported, headers would be the 2nd approach, which is not supported.

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

I have a problem going into the settings inside the dashboard. I added my own needed websites and now I am not able to go to the settings in the dashboard. I can only change something inside the document in user_data. Can somebody help me with this problem?

Update contributor link?

Check out the pull request template! https://git.wolf-house.net/ross/DashMachine/src/branch/master/pull_request_template.md

is unavailable

Ability to "Ping" Services on non-standard ports

Hi,

I just started using DM. Its been great so far, coming from Heimdall and Homer.

The ping function works great overall, however I cant get it to reach certain internal services on specific ports. e.g. Portainer and Bazarr run on the same device, but on different ports.

Is there a way around this?

Closed : I just realised that ping only check if there is a response, it doesnt actually check if the service is running. Hence, closing this request.

FEATURE REQUEST: small cards

Maybe an option for smaller cards? I love the card view, but they are pretty big.

Might fit well with Issue #46 (specify number of rows/columns)

Loving the product!

Alternative Authentication Backends

This is fabulous Ross! Figure this may be further down the request list, but it would be awesome to integrate with OAUTH providers (KeyCloak, GitHub, etc) for authentication purposes.

Dashboard unresponsive while unsuccessful ping is running

When configuring an app to show the online status of a service which is not online the ping function will wait for a few seconds before showing the "offline" state. This is no problem, but the whole dashboard will not respond as long as the ping is still doing the "loading circle" thingy. I ping multiple services which are rarely running, so basically every time i visit the dashboard i have to wait a few seconds before doing anything useful.

Add support for MySQL databases

Hi ross,

would it be possible to have a switch to configure either a mysql or litesql backend? Last one would make it more easy to have DashMachine running in an docker swarm cluster.

Best regards, Shuro

Broken images in Readme

Just heard about DashMachine. Looks like your Readme has some broken images. I've attached a screenshot of what they look like. Would be nice to have screenshots to preview what the product looks like before installing and running it on my own server.

Screen Shot 2020-03-06 at 9 22 43 AM

[Request] Support for Application Categories

Hi !

Thanks for all the great work you have been doing with this project, it's awesome !

The only thing I have been missing with the dashboard is the ability to categorize my applications, I thought of two ways in which this could be implemented :

  • Titles above a group of apps that helps to distinguish the various categories
  • Category boxes that expand and shows the applications inside once clicked

I kinda lack time and knowledge to make a pull request for the moment, but I hope this would give ideas to others that would enjoy this feature !

Feature Request: Hide tags with no values / Hide tags in general / Sort tags

Hello! So it looks like the current implementation shows tags that have no actual applications if it's invisible from the logged in user, and it seems like it would make sense to hide them entirely if there are no records.

Similarly, it would be cool if you could temporarily hide an application with a settings change, similar to "hidden = true".

Finally, for usability's sake for other people, being able to order/sort tags would be super cool.

Thanks!

Be more clear regarding rest's value

{{value}} representing the return JSON file isn't really clear and has to be inferred from the documentation. Would be nice to highlight this.

File extension restrictions bypassed with multi-upload

When attempting to upload certain images by themselves, I'll get the “Only jpg,jpeg,png,gif files are allowed” error. If I do multi upload, as long as at least one of the files has one of the whitelisted extensions, it will upload the rest of the files and they'll work fine. I have some custom entries that use .ico and .svg files, for example.

Personally I found this bug helpful as I was able to utilize files that work fine but were “not allowed”, but I figured I would report it as it seems to not be the intended behavior.

Allow basic users to access home page

Hello.
I have a problem with accessing home page with basic user.
When i try to login with basic user i receive unauthorized message.
Please help me.
My conf:

[Settings]
theme = dark
accent = green
background = None
home_access_groups = admins, users
roles = admin, user, power_user
settings_access_groups = admin_only
[users]
roles = user, admin, power_user
[admins]
roles = admin
[power_users]
roles = power_user, user
[Radarr]
prefix = https://
groups = admins
url = radarr.harej.org
description = Radarr is system for automatically downloading movies via Usenet and BitTorrent.
open_in = iframe
icon = static/images/icons/radarr.png
[Nextcloud]
prefix = https://
groups = admins, users, power_users
url = cloud.harej.org
icon = static/images/apps/nextcloud.png
sidebar_icon = static/images/apps/nextcloud.png
description = A safe home for all your data – community-driven, free & open source
open_in = new_tab

Display scale ?

It would be cool to be able to choose the scale of display :)

Icon really is required

The config.ini readme says that Icon (and Sidebar icon) are not required, but if you don't have one, you get a:

<img src="None" height="64px">

in the HTML which appears (at least in my Firefox) as a "missing picture" type icon...

No biggie, but thought I would mention it.

CONTEXT_PATH Subfolder Error

I am unable to get the page to load when trying to use a subfolder. Works perfectly fine without it.

This is my compose configuration

dashmachine:
        volumes:
            - ./dashmachine/user_data:/dashmachine/dashmachine/user_data
        environment:
            CONTEXT_PATH: /dash
        ports:
            - 5001:5000
        restart: unless-stopped
        image: rmountjoy/dashmachine:latest

I have attached the error output when I try to browse to the page with this config. Is there anything I'm doing wrong?

subfolder_error_log.txt

Urls with %20 don't work

Doesn't work:

[MyUrl]
prefix = https://
url = example.com/my%20path
open_in = new_tab
groups = public
tags = MyTag

Workaround:

[MyUrl]
prefix = https://
url = example.com/my path
open_in = new_tab
groups = public
tags = MyTag

Dashmachine updated docker pull, no longer functioning

I have this error in my docker logs when I try to start dashmachine:

Recreating dashmachine ... done
[2020-03-09 22:29:21 +0000] [1] [INFO] Starting gunicorn 20.0.4
[2020-03-09 22:29:21 +0000] [1] [INFO] Listening at: http://0.0.0.0:5000 (1)
[2020-03-09 22:29:21 +0000] [1] [INFO] Using worker: sync
[2020-03-09 22:29:21 +0000] [7] [INFO] Booting worker with pid: 7
/usr/local/lib/python3.8/site-packages/flask_sqlalchemy/__init__.py:834: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future.  Set it to True or False to suppress this warning.
  warnings.warn(FSADeprecationWarning(
[2020-03-09 22:29:21 +0000] [7] [ERROR] Exception in worker process
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1245, in _execute_context
    self.dialect.do_execute(
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 588, in do_execute
    cursor.execute(statement, parameters)
sqlite3.OperationalError: table settings has no column named custom_app_title

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
    worker.init_process()
  File "/usr/local/lib/python3.8/site-packages/gunicorn/workers/base.py", line 119, in init_process
    self.load_wsgi()
  File "/usr/local/lib/python3.8/site-packages/gunicorn/workers/base.py", line 144, in load_wsgi
    self.wsgi = self.app.wsgi()
  File "/usr/local/lib/python3.8/site-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/usr/local/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 49, in load
    return self.load_wsgiapp()
  File "/usr/local/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 39, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/usr/local/lib/python3.8/site-packages/gunicorn/util.py", line 358, in import_app
    mod = importlib.import_module(module)
  File "/usr/local/lib/python3.8/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 783, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/dashmachine/wsgi.py", line 6, in <module>
    dashmachine_init()
  File "/dashmachine/dashmachine/main/utils.py", line 55, in dashmachine_init
    read_config()
  File "/dashmachine/dashmachine/main/read_config.py", line 71, in read_config
    db.session.commit()
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/scoping.py", line 162, in do
    return getattr(self.registry(), name)(*args, **kwargs)
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 1036, in commit
    self.transaction.commit()
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 503, in commit
    self._prepare_impl()
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 482, in _prepare_impl
    self.session.flush()
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 2479, in flush
    self._flush(objects)
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 2617, in _flush
    transaction.rollback(_capture_exception=True)
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/util/langhelpers.py", line 68, in __exit__
    compat.reraise(exc_type, exc_value, exc_tb)
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 153, in reraise
    raise value
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 2577, in _flush
    flush_context.execute()
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/unitofwork.py", line 422, in execute
    rec.execute(self)
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/unitofwork.py", line 586, in execute
    persistence.save_obj(
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/persistence.py", line 239, in save_obj
    _emit_insert_statements(
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/persistence.py", line 1136, in _emit_insert_statements
    result = cached_connections[connection].execute(
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 982, in execute
    return meth(self, multiparams, params)
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/sql/elements.py", line 293, in _execute_on_connection
    return connection._execute_clauseelement(self, multiparams, params)
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1095, in _execute_clauseelement
    ret = self._execute_context(
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1249, in _execute_context
    self._handle_dbapi_exception(
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1476, in _handle_dbapi_exception
    util.raise_from_cause(sqlalchemy_exception, exc_info)
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 398, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb, cause=cause)
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 152, in reraise
    raise value.with_traceback(tb)
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1245, in _execute_context
    self.dialect.do_execute(
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 588, in do_execute
    cursor.execute(statement, parameters)
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) table settings has no column named custom_app_title
[SQL: INSERT INTO settings (theme, accent, background, roles, home_access_groups, settings_access_groups, home_view_mode, custom_app_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('dark', 'blue', 'None', 'admin,user,public_user', 'admin_only', 'admin_only', 'grid', 'DashMachine')]
(Background on this error at: http://sqlalche.me/e/e3q8)
[2020-03-09 22:29:21 +0000] [7] [INFO] Worker exiting (pid: 7)
[2020-03-09 22:29:21 +0000] [1] [INFO] Shutting down: Master
[2020-03-09 22:29:21 +0000] [1] [INFO] Reason: Worker failed to boot.

Reverse proxy of DashMachine for NGINX not working

For example, if the URL is http://example.com/dashmachine,

Static assets such as images/cards/applewatch.png are loading at http://example.com/images/cards/applewatch.png, not http://example.com/dashmachine/images/cards/applewatch.png.

Docker updates are breaking database

Some people on reddit are complaining that docker container updates are breaking database. Worth checking database migration code.

Logs

File "/usr/local/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 152, in reraise
    raise value.with_traceback(tb)
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1245, in _execute_context
    self.dialect.do_execute(
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 588, in do_execute
    cursor.execute(statement, parameters)
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) table settings has no column named home_view_mode
[SQL: INSERT INTO settings (theme, accent, background, roles, home_access_groups, settings_access_groups, home_view_mode, custom_app_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('dark', 'orange', '', 'admin,user,public_user', 'admin_only', 'admin_only', 'grid', 'DashMachine')]
(Background on this error at: http://sqlalche.me/e/e3q8)
[2020-03-18 15:20:41 +0000] [7] [INFO] Worker exiting (pid: 7)
[2020-03-18 15:20:41 +0000] [1] [INFO] Shutting down: Master
[2020-03-18 15:20:41 +0000] [1] [INFO] Reason: Worker failed to boot.
[2020-03-18 15:20:49 +0000] [1] [INFO] Starting gunicorn 20.0.4
[2020-03-18 15:20:49 +0000] [1] [INFO] Listening at: http://0.0.0.0:5000 (1)
[2020-03-18 15:20:49 +0000] [1] [INFO] Using worker: sync
[2020-03-18 15:20:49 +0000] [7] [INFO] Booting worker with pid: 7
/usr/local/lib/python3.8/site-packages/flask_sqlalchemy/__init__.py:834: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future.  Set it to True or False to suppress this warning.
  warnings.warn(FSADeprecationWarning(
[2020-03-18 15:20:50 +0000] [7] [ERROR] Exception in worker process
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1245, in _execute_context
    self.dialect.do_execute(
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 588, in do_execute
    cursor.execute(statement, parameters)
sqlite3.OperationalError: table settings has no column named home_view_mode

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
    worker.init_process()
  File "/usr/local/lib/python3.8/site-packages/gunicorn/workers/base.py", line 119, in init_process
    self.load_wsgi()
  File "/usr/local/lib/python3.8/site-packages/gunicorn/workers/base.py", line 144, in load_wsgi
    self.wsgi = self.app.wsgi()
  File "/usr/local/lib/python3.8/site-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/usr/local/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 49, in load
    return self.load_wsgiapp()
  File "/usr/local/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 39, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/usr/local/lib/python3.8/site-packages/gunicorn/util.py", line 358, in import_app
    mod = importlib.import_module(module)
  File "/usr/local/lib/python3.8/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 783, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/dashmachine/wsgi.py", line 6, in <module>
    dashmachine_init()
  File "/dashmachine/dashmachine/main/utils.py", line 55, in dashmachine_init
    read_config()
  File "/dashmachine/dashmachine/main/read_config.py", line 71, in read_config
    db.session.commit()
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/scoping.py", line 162, in do
    return getattr(self.registry(), name)(*args, **kwargs)
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 1036, in commit
    self.transaction.commit()
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 503, in commit
    self._prepare_impl()
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 482, in _prepare_impl
    self.session.flush()
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 2479, in flush
    self._flush(objects)
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 2617, in _flush
    transaction.rollback(_capture_exception=True)
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/util/langhelpers.py", line 68, in __exit__
    compat.reraise(exc_type, exc_value, exc_tb)
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 153, in reraise
    raise value
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 2577, in _flush
    flush_context.execute()
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/unitofwork.py", line 422, in execute
    rec.execute(self)
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/unitofwork.py", line 586, in execute
    persistence.save_obj(
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/persistence.py", line 239, in save_obj
    _emit_insert_statements(
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/persistence.py", line 1136, in _emit_insert_statements
    result = cached_connections[connection].execute(
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 982, in execute
    return meth(self, multiparams, params)
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/sql/elements.py", line 293, in _execute_on_connection
    return connection._execute_clauseelement(self, multiparams, params)
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1095, in _execute_clauseelement
    ret = self._execute_context(
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1249, in _execute_context
    self._handle_dbapi_exception(
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1476, in _handle_dbapi_exception
    util.raise_from_cause(sqlalchemy_exception, exc_info)
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 398, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb, cause=cause)
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 152, in reraise
    raise value.with_traceback(tb)
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1245, in _execute_context
    self.dialect.do_execute(
  File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 588, in do_execute
    cursor.execute(statement, parameters)
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) table settings has no column named home_view_mode
[SQL: INSERT INTO settings (theme, accent, background, roles, home_access_groups, settings_access_groups, home_view_mode, custom_app_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('dark', 'orange', '', 'admin,user,public_user', 'admin_only', 'admin_only', 'grid', 'DashMachine')]
(Background on this error at: http://sqlalche.me/e/e3q8)
[2020-03-18 15:20:50 +0000] [7] [INFO] Worker exiting (pid: 7)
[2020-03-18 15:20:50 +0000] [1] [INFO] Shutting down: Master
[2020-03-18 15:20:50 +0000] [1] [INFO] Reason: Worker failed to boot

Feature Request: Add ability to perform "http ping"

Really liking the ping feature but because it's just a ping it'll return a green badge even if a container is down due to an update or similar (traefik will just return a 404).

This is inspired by the http monitor feature in Uptime Robot.

Feature Request: Dashboard Pages

Loving Dashmachine so far. One thing that would be really cool is to have the ability to add new "Pages" that can contain separate Apps from the Home page. I have already filled my Home page with self hosted apps, but it would be nice to have a page where I could setup links to other sites shared in my household. A use case I'm thinking of would be to collect all financial links into a page that both my wife and I could use as "bookmark" links - like bank accounts, credit card links, utilities links, etc. It would be nice to have this on the dashboard, but kept separate from the main Home page. Hope that makes sense, let me know if I can clarify further!

Tag ordering

I want to be able to order how tags are displayed.
As of right now it seems that Tags are ordered alphabetically.

Workaround is to put ! in front of your tag.

Wrong git url in Python instructions

https://github.com/rmountjoy92/DashMachine#python
shows

virtualenv --python=python3 DashMachineEnv
cd DashMachineEnv && source bin/activate
**_git clone https://git.wolf-house.net/ross/DashMachine.git_**
cd DashMachine && pip install -r requirements.txt
python3 run.py

should be

virtualenv --python=python3 DashMachineEnv
cd DashMachineEnv && source bin/activate
**_git clone https://github.com/rmountjoy92/DashMachine.git_**
cd DashMachine && pip install -r requirements.txt
python3 run.py

Ping not working...

Hi,

I can't use ping features :/

[auth_ping]
platform = ping
resource = 192.168.1.1

And i have this errors :

Mar 23 16:58:16 Traefik dashmachine[1454491]: Traceback (most recent call last):                                                                                                                                     
Mar 23 16:58:16 Traefik dashmachine[1454491]:   File "/opt/dashmachine/lib/python3.7/site-packages/flask/app.py", line 2463, in __call__                                                                             
Mar 23 16:58:16 Traefik dashmachine[1454491]:     return self.wsgi_app(environ, start_response)                                                                                                                      
Mar 23 16:58:16 Traefik dashmachine[1454491]:   File "/opt/dashmachine/lib/python3.7/site-packages/flask/app.py", line 2449, in wsgi_app                                                                             
Mar 23 16:58:16 Traefik dashmachine[1454491]:     response = self.handle_exception(e)                                                                                                                                
Mar 23 16:58:16 Traefik dashmachine[1454491]:   File "/opt/dashmachine/lib/python3.7/site-packages/flask_restful/__init__.py", line 272, in error_router                                                             
Mar 23 16:58:16 Traefik dashmachine[1454491]:     return original_handler(e)                                                                                                                                         
Mar 23 16:58:16 Traefik dashmachine[1454491]:   File "/opt/dashmachine/lib/python3.7/site-packages/flask/app.py", line 1866, in handle_exception                                                                     
Mar 23 16:58:16 Traefik dashmachine[1454491]:     reraise(exc_type, exc_value, tb)                                                                                                                                   
Mar 23 16:58:16 Traefik dashmachine[1454491]:   File "/opt/dashmachine/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise                                                                            
Mar 23 16:58:16 Traefik dashmachine[1454491]:     raise value                                                                                                                                                        
Mar 23 16:58:16 Traefik dashmachine[1454491]:   File "/opt/dashmachine/lib/python3.7/site-packages/flask/app.py", line 2446, in wsgi_app                                                                             
Mar 23 16:58:16 Traefik dashmachine[1454491]:     response = self.full_dispatch_request()                                                                                                                            
Mar 23 16:58:16 Traefik dashmachine[1454491]:   File "/opt/dashmachine/lib/python3.7/site-packages/flask/app.py", line 1951, in full_dispatch_request                                                                
Mar 23 16:58:16 Traefik dashmachine[1454491]:     rv = self.handle_user_exception(e)                                                                                                                                 
Mar 23 16:58:16 Traefik dashmachine[1454491]:   File "/opt/dashmachine/lib/python3.7/site-packages/flask_restful/__init__.py", line 272, in error_router                                                             
Mar 23 16:58:16 Traefik dashmachine[1454491]:     return original_handler(e)                                                                                                                                         
Mar 23 16:58:16 Traefik dashmachine[1454491]:   File "/opt/dashmachine/lib/python3.7/site-packages/flask/app.py", line 1820, in handle_user_exception                                                                
Mar 23 16:58:16 Traefik dashmachine[1454491]:     reraise(exc_type, exc_value, tb)                                                                                                                                   
Mar 23 16:58:16 Traefik dashmachine[1454491]:   File "/opt/dashmachine/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise
Mar 23 16:58:16 Traefik dashmachine[1454491]:     raise value
Mar 23 16:58:16 Traefik dashmachine[1454491]:   File "/opt/dashmachine/lib/python3.7/site-packages/flask/app.py", line 1949, in full_dispatch_request
Mar 23 16:58:16 Traefik dashmachine[1454491]:     rv = self.dispatch_request()
Mar 23 16:58:16 Traefik dashmachine[1454491]:   File "/opt/dashmachine/lib/python3.7/site-packages/flask/app.py", line 1935, in dispatch_request
Mar 23 16:58:16 Traefik dashmachine[1454491]:     return self.view_functions[rule.endpoint](**req.view_args)
Mar 23 16:58:16 Traefik dashmachine[1454491]:   File "/opt/dashmachine/dashmachine/main/routes.py", line 84, in load_data_source
Mar 23 16:58:16 Traefik dashmachine[1454491]:     data = get_data_source(data_source)
Mar 23 16:58:16 Traefik dashmachine[1454491]:   File "/opt/dashmachine/dashmachine/main/utils.py", line 104, in get_data_source
Mar 23 16:58:16 Traefik dashmachine[1454491]:     return platform.process()
Mar 23 16:58:16 Traefik dashmachine[1454491]:   File "/opt/dashmachine/dashmachine/platform/ping.py", line 34, in process
Mar 23 16:58:16 Traefik dashmachine[1454491]:     up = subprocess.call(command) == 0
Mar 23 16:58:16 Traefik dashmachine[1454491]:   File "/usr/lib/python3.7/subprocess.py", line 323, in call 
Mar 23 16:58:16 Traefik dashmachine[1454491]:     with Popen(*popenargs, **kwargs) as p:
Mar 23 16:58:16 Traefik dashmachine[1454491]:   File "/usr/lib/python3.7/subprocess.py", line 775, in __init__
Mar 23 16:58:16 Traefik dashmachine[1454491]:     restore_signals, start_new_session)
Mar 23 16:58:16 Traefik dashmachine[1454491]:   File "/usr/lib/python3.7/subprocess.py", line 1522, in _execute_child
Mar 23 16:58:16 Traefik dashmachine[1454491]:     raise child_exception_type(errno_num, err_msg, err_filename)
Mar 23 16:58:16 Traefik dashmachine[1454491]: FileNotFoundError: [Errno 2] No such file or directory: 'ping': 'ping'

Latest commit does not successfully start

So far I have tried completely removing the config folder (to replicate a fresh install). Here is the error produced on startup:


[2020-03-08 20:07:24 +0000] [1] [INFO] Starting gunicorn 20.0.4,
[2020-03-08 20:07:24 +0000] [1] [INFO] Listening at: http://0.0.0.0:5000 (1),
[2020-03-08 20:07:24 +0000] [1] [INFO] Using worker: sync,
[2020-03-08 20:07:24 +0000] [7] [INFO] Booting worker with pid: 7,
/usr/local/lib/python3.8/site-packages/flask_sqlalchemy/__init__.py:834: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future.  Set it to True or False to suppress this warning.,
  warnings.warn(FSADeprecationWarning(,
[2020-03-08 20:07:24 +0000] [7] [ERROR] Exception in worker process,
Traceback (most recent call last):,
  File "/usr/local/lib/python3.8/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker,
    worker.init_process(),
  File "/usr/local/lib/python3.8/site-packages/gunicorn/workers/base.py", line 119, in init_process,
    self.load_wsgi(),
  File "/usr/local/lib/python3.8/site-packages/gunicorn/workers/base.py", line 144, in load_wsgi,
    self.wsgi = self.app.wsgi(),
  File "/usr/local/lib/python3.8/site-packages/gunicorn/app/base.py", line 67, in wsgi,
    self.callable = self.load(),
  File "/usr/local/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 49, in load,
    return self.load_wsgiapp(),
  File "/usr/local/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 39, in load_wsgiapp,
    return util.import_app(self.app_uri),
  File "/usr/local/lib/python3.8/site-packages/gunicorn/util.py", line 358, in import_app,
    mod = importlib.import_module(module),
  File "/usr/local/lib/python3.8/importlib/__init__.py", line 127, in import_module,
    return _bootstrap._gcd_import(name[level:], package, level),
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import,
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load,
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked,
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked,
  File "<frozen importlib._bootstrap_external>", line 783, in exec_module,
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed,
  File "/dashmachine/wsgi.py", line 3, in <module>,
    from dashmachine import app,
  File "/dashmachine/dashmachine/__init__.py", line 29, in <module>,
    from dashmachine.main.routes import main,
  File "/dashmachine/dashmachine/main/routes.py", line 10, in <module>,
    from dashmachine.main.utils import (,
  File "/dashmachine/dashmachine/main/utils.py", line 4, in <module>,
    from PIL import Image, ImageOps,
ModuleNotFoundError: No module named 'PIL',
[2020-03-08 20:07:24 +0000] [7] [INFO] Worker exiting (pid: 7),
[2020-03-08 20:07:24 +0000] [1] [INFO] Shutting down: Master,
[2020-03-08 20:07:24 +0000] [1] [INFO] Reason: Worker failed to boot.,

Running docker on Unraid - cant launch

[2020-03-25 14:11:31 +1030] [1] [INFO] Starting gunicorn 20.0.4
[2020-03-25 14:11:31 +1030] [1] [INFO] Listening at: http://0.0.0.0:5000 (1)
[2020-03-25 14:11:31 +1030] [1] [INFO] Using worker: sync
[2020-03-25 14:11:31 +1030] [7] [INFO] Booting worker with pid: 7
/usr/local/lib/python3.8/site-packages/flask_sqlalchemy/init.py:834: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future. Set it to True or False to suppress this warning.

warnings.warn(FSADeprecationWarning(
[2020-03-25 14:11:31 +1030] [7] [ERROR] Exception in worker process

Traceback (most recent call last):
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1247, in _execute_context
self.dialect.do_execute(
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 588, in do_execute
cursor.execute(statement, parameters)
sqlite3.OperationalError: table settings has no column named custom_app_title

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/usr/local/lib/python3.8/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
worker.init_process()
File "/usr/local/lib/python3.8/site-packages/gunicorn/workers/base.py", line 119, in init_process
self.load_wsgi()
File "/usr/local/lib/python3.8/site-packages/gunicorn/workers/base.py", line 144, in load_wsgi
self.wsgi = self.app.wsgi()
File "/usr/local/lib/python3.8/site-packages/gunicorn/app/base.py", line 67, in wsgi
self.callable = self.load()
File "/usr/local/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 49, in load
return self.load_wsgiapp()
File "/usr/local/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 39, in load_wsgiapp
return util.import_app(self.app_uri)
File "/usr/local/lib/python3.8/site-packages/gunicorn/util.py", line 358, in import_app
mod = importlib.import_module(module)
File "/usr/local/lib/python3.8/importlib/init.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "", line 1014, in _gcd_import
File "", line 991, in _find_and_load
File "", line 975, in _find_and_load_unlocked
File "", line 671, in _load_unlocked
File "", line 783, in exec_module
File "", line 219, in _call_with_frames_removed
File "/dashmachine/wsgi.py", line 6, in
dashmachine_init()
File "/dashmachine/dashmachine/main/utils.py", line 55, in dashmachine_init
read_config()
File "/dashmachine/dashmachine/main/read_config.py", line 71, in read_config
db.session.commit()
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/scoping.py", line 162, in do
return getattr(self.registry(), name)(*args, **kwargs)
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 1036, in commit
self.transaction.commit()
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 503, in commit
self._prepare_impl()
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 482, in _prepare_impl
self.session.flush()
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 2496, in flush
self._flush(objects)
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 2637, in flush
transaction.rollback(capture_exception=True)
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/util/langhelpers.py", line 68, in exit
compat.raise
(
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 178, in raise

raise exception
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/session.py", line 2597, in _flush
flush_context.execute()
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/unitofwork.py", line 422, in execute
rec.execute(self)
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/unitofwork.py", line 586, in execute
persistence.save_obj(
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/persistence.py", line 239, in save_obj
_emit_insert_statements(
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/orm/persistence.py", line 1135, in _emit_insert_statements
result = cached_connections[connection].execute(
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 984, in execute
return meth(self, multiparams, params)
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/sql/elements.py", line 293, in _execute_on_connection
return connection._execute_clauseelement(self, multiparams, params)
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1097, in _execute_clauseelement
ret = self._execute_context(
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1287, in _execute_context
self.handle_dbapi_exception(
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1481, in handle_dbapi_exception
util.raise
(
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 178, in raise

raise exception
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1247, in _execute_context
self.dialect.do_execute(
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 588, in do_execute
cursor.execute(statement, parameters)
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) table settings has no column named custom_app_title
[SQL: INSERT INTO settings (theme, accent, background, roles, home_access_groups, settings_access_groups, home_view_mode, custom_app_title) VALUES (?, ?, ?, ?, ?, ?, ?, ?)]
[parameters: ('light', 'orange', 'None', 'admin,user,public_user', 'admin_only', 'admin_only', 'grid', 'DashMachine')]
(Background on this error at: http://sqlalche.me/e/e3q8)

[2020-03-25 14:11:31 +1030] [7] [INFO] Worker exiting (pid: 7)
[2020-03-25 14:11:31 +1030] [1] [INFO] Shutting down: Master
[2020-03-25 14:11:31 +1030] [1] [INFO] Reason: Worker failed to boot.

Ability to add alert to header next to search bar

Hey there! I'd like to be able to add a alert/reminder to the header. Maybe with ability to choose bootstrap alert color too. This is good for reminding about server reboots, VPN enabling etc. Any type of reminder.

Maybe on the right panel in settings you can add another tab for Alert/Reminder with a text field to fill in. Then a dropdown with alert color. Nothing too complicated.

Feature request: Disable sidebar

I would personally appreciate the ability to disable the sidebar globally: at the moment every user and every new connection by that user defaults to having the sidebar visible.

Instead I would like a option to disable the sidebar and have the icons for settings and log out be visible in the bottom left, where the drawer is now.

EDIT: An ability to change which the default state of the sidebar is would also be nice, i.e. collapsed or open

Add support for services without web redirection

It would be great to have support for

services without web redirection, like a collection of notes where to find them:

General proxy (eg. squid)
InfluxDB
MariaDB
SSH of server 1, 2, N
any other app

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.