Self-sustaining site monitor
Automation Status
Last run: 2026-07-17T04:11:26+00:00. Mode: hourly. Overall status: attention.
Open raw status JSON News Videos Agenda packets Finance transcripts
Current Totals
Last Run Jobs
| Job | Status | Time | Output |
|---|---|---|---|
| Discover agenda packets and build audit pages | ok | 4.34s | outputagenda packet auto: discovered=24 rendered=24 |
| Crawl official Miami Web TV videos | ok | 1.57s | outputCrawled 520 official Granicus videos Merged manifest now has 520 meetings Wrote /opt/miamiok-granicus-videos.json |
| Rebuild official/YouTube video API | failed | 0.05s | outputline 293, in load
return loads(fp.read(),
^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/json/__init__.py", line 346, in loads
return _default_decoder.decode(s)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/json/decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/json/decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) |
| Pull YouTube channel uploads from YouTube API | ok | 1.65s | outputyoutube feed build: pulled=85 playlist=UUPEzVd4eQtJyVtOMt327PVA wrote=/var/www/exposemiamiok/html/youtube.html |
| Rebuild public videos page | failed | 0.1s | outputaw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Traceback (most recent call last):
File "/opt/youtube_gallery.py", line 180, in <module>
main()
File "/opt/youtube_gallery.py", line 60, in main
subprocess.run(["python3", "/opt/gen_videos_json.py"], check=True)
File "/usr/lib/python3.11/subprocess.py", line 571, in run
raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['python3', '/opt/gen_videos_json.py']' returned non-zero exit status 1. |
| Refresh local news RSS feeds | ok | 6.15s | outputwrote /var/www/exposemiamiok/html/data/local-news-feeds.json items=70 sources=12 |
| Rebuild site search index | ok | 2.86s | outputwrote /var/www/exposemiamiok/html/data/site-search-index.json records=804 |
| Crime watch feed aggregator | ok | 8.22s | outputharges — Joplin Globe [ 6] Large fentanyl stash found in Joplin drug arrests — Joplin Globe [ 5] Florida murder suspect spotted near Oklahoma mall last week arrested at Miami ho — Google News - Miami [ 5] Man arrested for murder after deadly shooting in Miami - fox23.com — Google News - Miami [ 5] Ottawa County couple arrested for child abuse - KTUL — Google News - Miami [ 5] Oklahoma authorities arrest suspect in murder of Miami man - Inside Joplin — Google News - Miami [ 5] Inmate found unresponsive in Ottawa County jail; died in hospital - KOAM News No — Google News - Ottawa |
| Normalize menu and logo shell | failed | 0.52s | outputception occurred:
Traceback (most recent call last):
File "/usr/local/bin/exposemiamiok_navigation_update.py", line 466, in <module>
main()
File "/usr/local/bin/exposemiamiok_navigation_update.py", line 459, in main
if update_html(path):
^^^^^^^^^^^^^^^^^
File "/usr/local/bin/exposemiamiok_navigation_update.py", line 427, in update_html
path.write_text(text, encoding="utf-8")
File "/usr/lib/python3.11/pathlib.py", line 1079, in write_text
with self.open(mode='w', encoding=encoding, errors=errors, newline=newline) as f:
OSError: [Errno 28] No space left on device |
Schedule
Hourly: agenda packets, official videos, video page, RSS news, search, menu repair.
Daily: hourly jobs plus meeting attachment refresh, meetings index rebuild, YouTube transcript/API verification, video/search/menu refresh. The upload/caption batch runs from the dedicated 2:00 AM uploader.
Weekly: daily jobs plus City and Ottawa County finance downloads, finance transcript rebuild, audit-lead refresh, search/menu refresh.
