Commit graph

1371 commits

Author SHA1 Message Date
4f11d7cf74
Updated webapp dist files 2023-05-21 03:15:16 +02:00
229b8f2985
Many improvements for the execute panel. 2023-05-21 03:04:52 +02:00
edf1dbee1d
Updated webapp dist files 2023-05-20 15:54:18 +02:00
5efc90ca17
Better PWA installation prompt.
Display a popup modal instead of a confirm box to prompt the user to
install the PWA app.

`confirm` blocks the JavaScript engine when run in `beforeMount` and
therefore the browser won't be able to proceed with `event.prompt()`.
2023-05-20 15:52:37 +02:00
666ea9ea6b
Added use_werkzeug_server option to backend.http.
There are situations where you may not want to run the HTTP server in a
full blown WSGI-over-Tornado container - unit/integration tests and
embedded single-core devices are among those cases.

In those scenarios, we should allow the user to be able to run the
backend using the built-in Werkzeug server provided by Flask.
2023-05-20 15:26:58 +02:00
013274bcbc [#259] Proper support for the progressive webapp (#262)
Closes: 259
Reviewed-on: platypush/platypush#262
2023-05-20 02:42:33 +02:00
0a1209fe6e
Updated webapp dist files 2023-05-17 10:56:37 +02:00
33e2879413
Various UI improvements for the execute tab. 2023-05-17 10:41:02 +02:00
91daec579d
Reverted to the previous style for entities on mobile.
Better to use screen width wisely and avoid unnecessary padding.
2023-05-17 01:13:09 +02:00
2cba504e3b
Improvements for the autocomplete component. 2023-05-14 15:07:54 +02:00
8447f9a854
Improved rendering of actions/arguments documentation.
The frontend now calls `utils.rst_to_html` to render the docstrings as
HTML instead of dumping them as raw text.

Also, actions and arguments are now cached to improve performance.
2023-05-14 15:06:34 +02:00
72797e73ff
Changed the Tornado paradigm to start the WSGI workers.
Use `bind_sockets`/`fork_processes` instead of reinventing the wheel
with our own multiprocessing handling.
2023-05-13 12:35:20 +02:00
ac4fe4447e
Revert "Added a multi-worker approach to the Tornado WSGI container."
This reverts commit 71401a4936.

Temporarily reverted this commit because the `reuse_address` on the
application's `listen` method has only been implemented in Tornado 6.2 -
and Debian stable still shipts Tornado 6.1.
2023-05-13 02:36:20 +02:00
71401a4936
Added a multi-worker approach to the Tornado WSGI container.
The WSGI container is a good option to wrap a multi-modal webapp
(Flask + websocket routes), but it's constrained to a single-process
approach and queued/pre-buffered requests. That makes performance poor
when handling requests that may take a few seconds to complete.
2023-05-13 01:26:18 +02:00
b7b93edbae
Updated dist files 2023-05-12 03:52:33 +02:00
a15191d4ca
Updated dist files 2023-05-12 03:51:59 +02:00
d4f8e51caf
A less blocking implementation of the entities loading UI logic. 2023-05-12 03:49:20 +02:00
62d846ddda
Updated dist files 2023-05-12 03:42:17 +02:00
23a5e90e2e
Updated dist files 2023-05-12 03:26:55 +02:00
6cd9cb6e76
Better entities caching on the frontend. 2023-05-12 03:18:22 +02:00
79871e0fa1
Fixed devServer routes in vue.config.js.
Use `127.0.0.1` instead of `localhost` for the Vue proxy.
2023-05-12 02:57:14 +02:00
f49ad4c349
Updated dist files 2023-05-10 02:52:24 +02:00
6b0f0883ee
A proper way to proxy websocket calls using the Vue devServer. 2023-05-10 02:27:01 +02:00
78c12212c6
[#260] A simple entities caching mechanism using the browser storage. 2023-05-10 02:26:06 +02:00
74ab884b7a
Proper redirects upon /execute failure.
If a call to `/execute` fails with a 401 or 412 status, then redirect
the user to `/register` or `/login`.
2023-05-10 02:24:50 +02:00
ab2425ebd0
[#260] Removed legacy backend.websocket.
It has now been replaced by the `/ws/events` and `/ws/requests`
websocket routes under `backend.http`.
2023-05-09 02:46:43 +02:00
a069d23bb7
[#260] Added `/ws/requests` websocket route. 2023-05-09 02:40:32 +02:00
7716a416e9
[#260] Support for sending events via websocket over /ws/events. 2023-05-09 02:18:58 +02:00
edb7197f71
[#260] Implemented authentication for websocket routes.
Plus, refactored the `backend.http.app.utils` module by breaking it down
into multiple components, as the module was starting to get too large.
2023-05-09 00:03:11 +02:00
2d4b179879
Include the path info in the logging messages in WSRoute. 2023-05-08 12:35:54 +02:00
f5fcccb0bd
Refactored the new websocket routes.
Defined a `platypush.backend.http.ws` package with all the routes, a
base `WSRoute` class that all the websocket routes can extend, and a
logic in the HTTP backend to automatically scan the package to register
exposed websocket routes.
2023-05-08 11:45:14 +02:00
56dc8d0972
Migrated the webapp to Tornado.
It was just too painful to find a combination of versions of  gunicorn,
gevent, eventlet, pyuwsgi etc. that could work on all of my systems.

On the other hand, Tornado works out of the box with no headaches.

Also in this commit:

- Updated a bunch of outdated/required integration dependencies.
- Black'd and LINTed a couple of old plugins.
2023-05-08 02:06:45 +02:00
f81e9061a3
lifespan=on is actually not required on Flask config level. 2023-05-07 16:30:41 +02:00
692180c653
Back to uvicorn workers from eventlet.
The eventlet API has way too many dependency issues with gunicorn.

Still TODO: Fix or at least mitigate the WSGI workers timeout issue when
they handle websocket connections.
2023-05-07 15:37:58 +02:00
8102178ba4
Updated dist files 2023-05-07 13:00:48 +02:00
c0a948f8ce
Removed remaining references to websocket port. 2023-05-07 12:54:13 +02:00
bdbbd24e6f
Only include /ws/events as a proxied websocket, without messing with the /ws route exposed by the Vue debugger 2023-05-07 12:22:51 +02:00
059fff8558
Updated dist files 2023-05-07 12:19:13 +02:00
f9b0bc905e
Migrated websocket service.
The websocket service is no longer provided by a different service,
controlled by a different thread running on another port.

Instead, it's now exposed directly over Flask routes, using
WSGI+eventlet+simple_websocket.

Also, the SSL context options have been removed from `backend.http`, for
sake of simplicity. If you want to enable SSL, you can serve Platypush
through a reverse proxy like nginx.
2023-05-07 12:08:28 +02:00
3aefc9607d
Migrated from waitress to gunicorn.
`waitress`, unlike `gunicorn`, doesn't provide an easy way to plug into
a WSGI socket that can be used for the websocket interface.
2023-05-07 00:42:57 +02:00
9951d62511
Added logic to automatically generate the secret key for Flask. 2023-05-06 22:04:48 +02:00
e33a391d25
Updated dist files 2023-05-06 12:37:00 +02:00
4f78d61223
Improved UI on mobile. 2023-05-06 12:34:27 +02:00
6e939bbe62
Close modals and dropdown when ESC is pressed. 2023-05-05 20:46:42 +02:00
e9e59c857a
Updated dist files 2023-05-05 02:51:33 +02:00
59bf1c2aa0
Added close button to the modal's header. 2023-05-05 02:48:41 +02:00
8af3ae17b8
A more efficient way of detecting the entity groups to display.
Instead of iterating over each of the entities in a grouping to find out
which groups should be displayed based on the selector's policy, the
selector can directly keep its `selectedGroups` attribute in sync with
the index.
2023-05-05 02:33:34 +02:00
98b9d31dd4
Updated dist files 2023-05-05 01:10:24 +02:00
4383dbb2b4
Bluetooth UI toggle aligned to the right - like all other toggles. 2023-05-05 01:04:39 +02:00
285f3941d9
Always use an external uWSGI server to run the web service.
Added `waitress` dependency. For performance and security reasons, it's
better to always run the Flask application inside of a uWSGI server.

`waitress` also makes things easier by avoiding to ask the user to
manually provide the external executable arguments, as it was the case
with `uwsgi` and `gunicorn`.
2023-05-05 00:07:13 +02:00
99311a6e71
Updated dist files 2023-05-04 02:23:24 +02:00
7db09276ca
Some small style improvements. 2023-05-04 02:20:40 +02:00
2398cac572
A more efficient and clean logic for selectedEntities calculation. 2023-05-04 02:19:55 +02:00
394e27eaf2
Refactored style for UI dropdowns. 2023-05-04 02:19:09 +02:00
5d1c8cf8e9
Additional null check on this.searchTerm 2023-05-03 03:33:34 +02:00
3482c29679
Updated dist files 2023-05-03 03:18:44 +02:00
a06d0ef6a1
Merged all the items in the entities panel's header in the Selector component. 2023-05-03 03:14:46 +02:00
7c7818dd76
Fixed entity search.
It was broken by the previous refactor of the entities panel, which no
longer triggers the `watch` callback on the upstream `entityGroups`.

The new approach listens for entity updates on the frontend bus and
dynamically creates the entity groupings in `selectedGroups` if they are
missing.
2023-05-03 02:12:14 +02:00
9922305ac5
Fixed grouping for entityGroups.id.
Unlike the other entity groupings, which are 4-layered (`grouping ->
group -> entity_id -> entity`), the grouping by ID only needs 3 layers
(`grouping -> entity_id -> entity`).
2023-05-03 02:09:51 +02:00
cc2ec1db7f
The HTTP Zeroconf service should be registered before the server starts. 2023-05-02 21:24:50 +02:00
55cb87d14f
Updated dist files 2023-05-02 10:24:11 +02:00
68359b88a9
More performance improvements for the entities page.
- Don't recalculate entity groups every time. Instead, keep them in sync
  every time an entity is added or removed.

- Removed `computedChildren` from the entity component - no null nodes
  are guaranteed to be passed now, so there's no need for another
  iteration on the list of children.

- `childrenByParentId` now only looks in the scope of the entity's
  children instead of searching all the entities.
2023-05-02 10:14:03 +02:00
0fc0a22cd7
Reintroduced loading icon spin animation. 2023-05-02 10:08:36 +02:00
de76c2b6a8
Updated dist files 2023-05-01 10:12:43 +02:00
835ad9f2dc
Use plugin as a default entity grouping instead of category 2023-05-01 10:06:11 +02:00
85ecdcb0cb
Removed entity icon loading animation.
The animation has a big impact on page loading performance when the
system includes a high number of entities that all need their loading
animation to be render.
2023-05-01 09:49:34 +02:00
24c6b7b377
Updated dist files 2023-05-01 01:25:27 +02:00
b7cf1a42de
Use a proxy value in the variable component for the textbox.
Otherwise the value may keep being overwritten while the user is typing
a new one.
2023-05-01 01:22:20 +02:00
a3839e637d
Set a max-width: 600px for group containers. 2023-05-01 01:22:02 +02:00
1e43866978
Moved more entity common CSS out of the Vue component. 2023-05-01 01:21:18 +02:00
de84a65a22
Show prettified entity type when hover the entity icon. 2023-05-01 01:20:31 +02:00
7906ee2c49
Entity components style improvements.
Multiple style improvements for the entity components. Among these:

- A more consistent style for entity values and toggler buttons.
- Fixed overflowing/underflowing entities on smaller/larger screen
  sizes.
- Simplified the stylesheets for many entities as many component classes
  have now been moved to `common.scss`.
2023-04-30 22:32:50 +02:00
d1066ba624
Use Math.round instead of parseInt when parsing durations. 2023-04-30 16:22:37 +02:00
94a493580c
Updated dist files 2023-04-30 01:36:13 +02:00
0b853e0a54
Apply word-break: break-all to entities' names and values.
The entity name and value in the component header may be arbitrarily
long and rendered on small screens.

We therefore need to ensure that the text won't overflow the screen
width.
2023-04-30 01:17:54 +02:00
52f036dc1d
Updated dist files 2023-04-29 22:49:35 +02:00
cbf0ea8a19
Style fixes for mobile screens. 2023-04-29 22:45:10 +02:00
b4048002b9
Updated dist files 2023-04-29 18:21:32 +02:00
6d9c34f06f
Added VariableModal to set variables from the dashboard. 2023-04-29 18:20:41 +02:00
38c87ef39f
Added frontend component for the Variable entity. 2023-04-29 11:37:21 +02:00
7685521e2b
Always use the default configuration values for MQTT listeners if not specified 2023-04-26 03:30:05 +02:00
ee54e0edbf
Use a font-awesome spinner instead of an animated gif when loading entities 2023-04-25 16:42:01 +02:00
d33d760361
Better way to import declarative_base from SQLAlchemy.
Import `declarative_base` in a way that is compatible with any
SQLAlchemy version between 1.3 and 2.x.
2023-04-24 23:23:55 +02:00
e955ffc018
Be more resilient in DateTimeWeather widget about custom temperature/humidity names or non-numeric data 2023-04-24 12:48:51 +02:00
5638c567ff
Show temperature and humidity on the DateTimeWeather widget upon sensor events only if the sensor data is numeric. 2023-04-24 10:59:45 +02:00
512ced3e94
Updated dist files 2023-04-23 02:13:48 +02:00
6439e235d2
Updated caniuse dependency 2023-04-23 02:11:21 +02:00
259b42bdd6
Removed legacy backend.sensor.battery. 2023-04-23 00:44:03 +02:00
a72c32cb00
Added battery entity support to system plugin. 2023-04-23 00:41:21 +02:00
b3440ab96b
Added support for fan sensors on the system plugin. 2023-04-23 00:08:27 +02:00
45d5f439be
Added support for system temperature sensor entities. 2023-04-22 22:42:11 +02:00
374f936c1f
Merged network_stats into NetworkInterface model. 2023-04-22 17:19:24 +02:00
f4036be52b
Extracted and refactored more common elements of the Entity components. 2023-04-22 17:19:23 +02:00
977b55dea9
Merged network addresses into NetworkInterface model. 2023-04-22 17:19:23 +02:00
98a300c4b1
Added NetworkInterface entities to system plugin.
Plus, `platypush.schemas.system` has now been split into multiple
submodules to avoid a single-file mega-module with all the system
schemas definitions.
2023-04-21 00:45:15 +02:00
44b8fd4b34
Support for disk entities in the system integration. 2023-04-20 16:26:51 +02:00
6b03451386
Better responsive alignment for the collapse toggler. 2023-04-20 16:26:05 +02:00
e8c96ad35d
Added convertTime utility function 2023-04-20 02:27:58 +02:00
153d03d43f
Moved CPU percentage on the level of the CPU entity instead of a child entity. 2023-04-19 01:48:05 +02:00
4ebfbf3851
Added memory stats entities. 2023-04-19 01:31:11 +02:00