rmountjoy92 / dashmachine Goto Github PK
View Code? Open in Web Editor NEWAnother web application bookmark dashboard, with fun features.
License: GNU General Public License v3.0
Another web application bookmark dashboard, with fun features.
License: GNU General Public License v3.0
It would be nice to fetch random background from Internet (r/Earthporn, UnSplash, EarthView, Bing, ChromeOS wallpapers and others) and adjust color pallete according to background (like pywal does (https://github.com/dylanaraps/pywal))
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!
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.
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)
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.
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.
After installing through Docker (either "latest" or "develop"), adding an app to config.ini causes a crash.
Docker log:
https://pastebin.com/xrYM8Cj4
EDIT:
This appears to be the same as Issue #41
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
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.
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.
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?
Check out the pull request template! https://git.wolf-house.net/ross/DashMachine/src/branch/master/pull_request_template.md
is unavailable
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.
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!
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.
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.
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
You will notice that DashMachine's iframe option only works with certain apps. Here is the explanation: https://stackoverflow.com/questions/6663244/cant-show-some-websites-in-iframe-tag
If someone finds out a way around this, please let me know or submit a PR.
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 :
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 !
As title says. Option should be an environment variable so it survives updates.
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!
{{value}} representing the return JSON file isn't really clear and has to be inferred from the documentation. Would be nice to highlight this.
Hi, great dashboard, I love it. I found some issues with it, so I'll post a few here.
For starters, rest.py is using authentication with only POST requests, when really it should be using it for any request regardless.
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.
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
It would be cool to be able to choose the scale of display :)
Every time the docker image gets built, template app images should be scaled/cropped to 200x200 to make them look uniform in the ui.
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.
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?
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
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.
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
.
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
Ability To Add Icon to a Tag
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.
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!
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.
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
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'
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.,
[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.
Would be great to have support for Font Awesome as alternative application icon.
At the moment you can't control the amount of rows and/or columns that are to fit on a page (before scrolling). Having the option to configure that would indeed be very nice.
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.
It would be nice to be able to integrate local searx instance with Dashmachine or at least DuckDuckgo/Google/Yandex
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
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
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.