From 35bd1de5ba9329bb2654249439b51b33ab2c94f1 Mon Sep 17 00:00:00 2001 From: Blake Blackshear Date: Mon, 11 Apr 2022 06:56:53 -0500 Subject: [PATCH 1/4] limit send to plus where appropriate (#3080) --- web/src/routes/Events.jsx | 56 ++++++++++++++++++++++++++++++--------- 1 file changed, 43 insertions(+), 13 deletions(-) diff --git a/web/src/routes/Events.jsx b/web/src/routes/Events.jsx index 84937a2a3..4c8423210 100644 --- a/web/src/routes/Events.jsx +++ b/web/src/routes/Events.jsx @@ -53,7 +53,12 @@ export default function Events({ path, ...props }) { }); const [uploading, setUploading] = useState([]); const [viewEvent, setViewEvent] = useState(); - const [downloadEvent, setDownloadEvent] = useState({ id: null, has_clip: false, has_snapshot: false }); + const [downloadEvent, setDownloadEvent] = useState({ + id: null, + has_clip: false, + has_snapshot: false, + plus_id: undefined, + }); const eventsFetcher = useCallback((path, params) => { params = { ...params, include_thumbnails: 0, limit: API_LIMIT }; @@ -123,7 +128,12 @@ export default function Events({ path, ...props }) { const onDownloadClick = (e, event) => { e.stopPropagation(); - setDownloadEvent((_prev) => ({ id: event.id, has_clip: event.has_clip, has_snapshot: event.has_snapshot })); + setDownloadEvent((_prev) => ({ + id: event.id, + has_clip: event.has_clip, + has_snapshot: event.has_snapshot, + plus_id: event.plus_id, + })); downloadButton.current = e.target; setState({ ...state, showDownloadMenu: true }); }; @@ -177,6 +187,10 @@ export default function Events({ path, ...props }) { e.stopPropagation(); } + if (uploading.includes(id)) { + return; + } + if (!config.plus.enabled) { setState({ ...state, showDownloadMenu: false, showPlusConfig: true }); return; @@ -202,6 +216,10 @@ export default function Events({ path, ...props }) { } setUploading((prev) => prev.filter((i) => i !== id)); + + if (state.showDownloadMenu && downloadEvent.id === id) { + setState({ ...state, showDownloadMenu: false }); + } }; if (!config) { @@ -278,11 +296,19 @@ export default function Events({ path, ...props }) { {downloadEvent.has_snapshot && !downloadEvent.plus_id && ( onSendToPlus(downloadEvent.id)} /> )} + {downloadEvent.plus_id && ( + setState({ ...state, showDownloadMenu: false })} + /> + )} )} {state.showDatePicker && ( @@ -398,16 +424,20 @@ export default function Events({ path, ...props }) {
From 58c32857d31eae68ff15f3cbfe6f0c0e52d0802e Mon Sep 17 00:00:00 2001 From: Nicolas Mowen Date: Mon, 11 Apr 2022 06:10:19 -0600 Subject: [PATCH 2/4] Add latest frigate version to stats endpoints (#3038) * Add latest version to stats in mqtt and http * Update json to include new field * Update to use requests * Don't use incorrect exception --- docs/docs/integrations/api.md | 3 ++- frigate/stats.py | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/docs/docs/integrations/api.md b/docs/docs/integrations/api.md index 1569a6774..4f3c1a9cb 100644 --- a/docs/docs/integrations/api.md +++ b/docs/docs/integrations/api.md @@ -110,7 +110,8 @@ Sample response: "service": { /* Uptime in seconds */ "uptime": 10, - "version": "0.8.0-8883709", + "version": "0.10.1-8883709", + "latest_version": "0.10.1", /* Storage data in MB for important locations */ "storage": { "/media/frigate/clips": { diff --git a/frigate/stats.py b/frigate/stats.py index bc92907cd..ba7c34cc2 100644 --- a/frigate/stats.py +++ b/frigate/stats.py @@ -5,6 +5,7 @@ import time import psutil import shutil import os +import requests from frigate.config import FrigateConfig from frigate.const import RECORD_DIR, CLIPS_DIR, CACHE_DIR @@ -13,11 +14,22 @@ from frigate.version import VERSION logger = logging.getLogger(__name__) +def get_latest_version() -> str: + request = requests.get('https://api.github.com/repos/blakeblackshear/frigate/releases/latest') + response = request.json() + + if request.ok and response: + return response.get("tag_name", "unknown").replace("v", "") + else: + return "unknown" + + def stats_init(camera_metrics, detectors): stats_tracking = { "camera_metrics": camera_metrics, "detectors": detectors, "started": int(time.time()), + "latest_frigate_version": get_latest_version(), } return stats_tracking @@ -83,6 +95,7 @@ def stats_snapshot(stats_tracking): stats["service"] = { "uptime": (int(time.time()) - stats_tracking["started"]), "version": VERSION, + "latest_version": stats_tracking["latest_frigate_version"], "storage": {}, "temperatures": get_temperatures(), } From d43f9189a6ab906bdf1ea318c83f7ab7081e5445 Mon Sep 17 00:00:00 2001 From: herostrat Date: Tue, 12 Apr 2022 14:20:28 +0200 Subject: [PATCH 3/4] Changes group type from int to str (#3086) Co-authored-by: Sebastian Englbrecht --- docker-compose.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 9431e00bd..9287a4ef9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,9 +5,9 @@ services: user: vscode # add groups from host for render, plugdev, video group_add: - - 109 # render - - 44 # video - - 46 # plugdev + - "109" # render + - "44" # video + - "46" # plugdev shm_size: "256mb" build: context: . From 164e9b7eb80887606f502b9f720ca79fa6dfa2de Mon Sep 17 00:00:00 2001 From: herostrat Date: Tue, 12 Apr 2022 14:21:21 +0200 Subject: [PATCH 4/4] Use requirement file for pip installs (#3090) Co-authored-by: Sebastian Englbrecht --- docker/Dockerfile | 24 ++++-------------------- docker/Dockerfile.dev | 3 ++- requirements-dev.txt | 2 ++ requirements-wheels.txt | 17 +++++++++++++++++ requirements.txt | 1 + 5 files changed, 26 insertions(+), 21 deletions(-) create mode 100644 requirements-dev.txt create mode 100644 requirements-wheels.txt create mode 100644 requirements.txt diff --git a/docker/Dockerfile b/docker/Dockerfile index 622da1432..cd755aaf7 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -38,27 +38,11 @@ RUN apt-get -qq update \ RUN wget -q https://bootstrap.pypa.io/get-pip.py -O get-pip.py \ && python3 get-pip.py "pip" -RUN pip3 install scikit-build +COPY requirements.txt /requirements.txt +RUN pip3 install -r requirements.txt -# TODO: lock with requirements.txt -RUN pip3 wheel --wheel-dir=/wheels \ - opencv-python-headless \ - numpy \ - imutils \ - scipy \ - psutil \ - Flask \ - paho-mqtt \ - PyYAML \ - matplotlib \ - click \ - setproctitle \ - peewee \ - peewee_migrate \ - pydantic \ - zeroconf \ - ws4py \ - requests +COPY requirements-wheels.txt /requirements-wheels.txt +RUN pip3 wheel --wheel-dir=/wheels -r requirements-wheels.txt # Frigate Container FROM debian:11-slim diff --git a/docker/Dockerfile.dev b/docker/Dockerfile.dev index a65070d8c..7f47c3768 100644 --- a/docker/Dockerfile.dev +++ b/docker/Dockerfile.dev @@ -17,7 +17,8 @@ RUN groupadd --gid $USER_GID $USERNAME \ RUN apt-get update \ && apt-get install -y git curl vim htop -RUN pip3 install pylint black +COPY requirements-dev.txt /opt/frigate/requirements-dev.txt +RUN pip3 install -r requirements-dev.txt # Install Node 16 RUN curl -sL https://deb.nodesource.com/setup_16.x | bash - \ diff --git a/requirements-dev.txt b/requirements-dev.txt new file mode 100644 index 000000000..5cba885d9 --- /dev/null +++ b/requirements-dev.txt @@ -0,0 +1,2 @@ +pylint == 2.13.* +black == 22.3.* diff --git a/requirements-wheels.txt b/requirements-wheels.txt new file mode 100644 index 000000000..a817c318c --- /dev/null +++ b/requirements-wheels.txt @@ -0,0 +1,17 @@ +click == 8.1.* +Flask == 2.1.* +imutils == 0.5.* +matplotlib == 3.5.* +numpy == 1.22.* +opencv-python-headless == 4.5.5.* +paho-mqtt == 1.6.* +peewee == 3.14.* +peewee_migrate == 1.4.* +psutil == 5.9.* +pydantic == 1.9.* +PyYAML == 6.0.* +requests == 2.27.* +scipy == 1.8.* +setproctitle == 1.2.* +ws4py == 0.5.* +zeroconf == 0.38.4 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..d3679d115 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +scikit-build == 0.14.1