46602f1933
Remove dead code identified in docs/SANITIZATION-REVIEW.md:
- app/blueprints/content_old.py and app/blueprints/playlist.py
- app/models/group.py, app/utils/nginx_config_reader.py
- orphaned templates (content_list, edit_content, upload_content,
player_page) and the related group/Template references
Result: 6 blueprints, 82 routes, no dead modules or orphan templates.
Add files that deploy.sh and docker-entrypoint.sh already require but
which were never tracked:
- https_manager.py (referenced by deploy.sh, migrate_network.sh,
docker-entrypoint.sh)
- Caddyfile.example (seeded by deploy.sh; its absence aborts deploy)
Relocate generated Graphify artifacts from graphify-out/ to
docs/graphify-out/ (110 files, no content change) and archive the
superseded docs under docs/.
Ignore hygiene:
- ignore ad-hoc .env backups (.env.bak*) — they contain live secrets
- keep the pre-sanitization snapshots (docs/legacy code/,
docs/old_code_documentation/) on disk but out of the repo
Fix .env.example: drop a duplicated config block, genericize the
hardcoded host IP, and document HOSTNAME_INTERNAL.
342 lines
17 KiB
Markdown
342 lines
17 KiB
Markdown
# Graph Report - /home/scheianu/digiserver-v2 (2026-08-16)
|
|
|
|
## Corpus Check
|
|
- 49 files · ~210,805 words
|
|
- Verdict: corpus is large enough that graph structure adds value.
|
|
|
|
## Summary
|
|
- 631 nodes · 1162 edges · 41 communities detected
|
|
- Extraction: 56% EXTRACTED · 44% INFERRED · 0% AMBIGUOUS · INFERRED: 512 edges (avg confidence: 0.62)
|
|
- Token cost: 0 input · 0 output
|
|
|
|
## Community Hubs (Navigation)
|
|
- [[_COMMUNITY_Community 0|Community 0]]
|
|
- [[_COMMUNITY_Community 1|Community 1]]
|
|
- [[_COMMUNITY_Community 2|Community 2]]
|
|
- [[_COMMUNITY_Community 3|Community 3]]
|
|
- [[_COMMUNITY_Community 4|Community 4]]
|
|
- [[_COMMUNITY_Community 5|Community 5]]
|
|
- [[_COMMUNITY_Community 6|Community 6]]
|
|
- [[_COMMUNITY_Community 7|Community 7]]
|
|
- [[_COMMUNITY_Community 8|Community 8]]
|
|
- [[_COMMUNITY_Community 9|Community 9]]
|
|
- [[_COMMUNITY_Community 10|Community 10]]
|
|
- [[_COMMUNITY_Community 11|Community 11]]
|
|
- [[_COMMUNITY_Community 12|Community 12]]
|
|
- [[_COMMUNITY_Community 13|Community 13]]
|
|
- [[_COMMUNITY_Community 14|Community 14]]
|
|
- [[_COMMUNITY_Community 15|Community 15]]
|
|
- [[_COMMUNITY_Community 16|Community 16]]
|
|
- [[_COMMUNITY_Community 17|Community 17]]
|
|
- [[_COMMUNITY_Community 18|Community 18]]
|
|
- [[_COMMUNITY_Community 19|Community 19]]
|
|
- [[_COMMUNITY_Community 20|Community 20]]
|
|
- [[_COMMUNITY_Community 21|Community 21]]
|
|
- [[_COMMUNITY_Community 22|Community 22]]
|
|
- [[_COMMUNITY_Community 23|Community 23]]
|
|
- [[_COMMUNITY_Community 24|Community 24]]
|
|
- [[_COMMUNITY_Community 25|Community 25]]
|
|
- [[_COMMUNITY_Community 26|Community 26]]
|
|
- [[_COMMUNITY_Community 27|Community 27]]
|
|
- [[_COMMUNITY_Community 28|Community 28]]
|
|
- [[_COMMUNITY_Community 29|Community 29]]
|
|
- [[_COMMUNITY_Community 30|Community 30]]
|
|
- [[_COMMUNITY_Community 31|Community 31]]
|
|
- [[_COMMUNITY_Community 32|Community 32]]
|
|
- [[_COMMUNITY_Community 33|Community 33]]
|
|
- [[_COMMUNITY_Community 34|Community 34]]
|
|
- [[_COMMUNITY_Community 35|Community 35]]
|
|
- [[_COMMUNITY_Community 36|Community 36]]
|
|
- [[_COMMUNITY_Community 37|Community 37]]
|
|
- [[_COMMUNITY_Community 38|Community 38]]
|
|
- [[_COMMUNITY_Community 39|Community 39]]
|
|
- [[_COMMUNITY_Community 40|Community 40]]
|
|
|
|
## God Nodes (most connected - your core abstractions)
|
|
1. `log_action()` - 116 edges
|
|
2. `PlayerEdit` - 99 edges
|
|
3. `PlayerUser` - 74 edges
|
|
4. `Playlist` - 33 edges
|
|
5. `CaddyConfigGenerator` - 31 edges
|
|
6. `HTTPSConfig` - 30 edges
|
|
7. `Content` - 24 edges
|
|
8. `User` - 19 edges
|
|
9. `create_app()` - 13 edges
|
|
10. `Models package for digiserver-v2.` - 13 edges
|
|
|
|
## Surprising Connections (you probably didn't know these)
|
|
- `reset_user_password()` --calls--> `log_action()` [INFERRED]
|
|
/home/scheianu/digiserver-v2/app/blueprints/admin.py → /home/scheianu/digiserver-v2/app/utils/logger.py
|
|
- `upload_header_logo()` --calls--> `log_action()` [INFERRED]
|
|
/home/scheianu/digiserver-v2/app/blueprints/admin.py → /home/scheianu/digiserver-v2/app/utils/logger.py
|
|
- `delete_editing_user()` --calls--> `log_action()` [INFERRED]
|
|
/home/scheianu/digiserver-v2/app/blueprints/admin.py → /home/scheianu/digiserver-v2/app/utils/logger.py
|
|
- `delete_playlist()` --calls--> `log_action()` [INFERRED]
|
|
/home/scheianu/digiserver-v2/app/blueprints/content.py → /home/scheianu/digiserver-v2/app/utils/logger.py
|
|
- `Main playlist management page.` --uses--> `PlayerEdit` [INFERRED]
|
|
/home/scheianu/digiserver-v2/app/blueprints/content.py → /home/scheianu/digiserver-v2/app/models/player_edit.py
|
|
|
|
## Communities
|
|
|
|
### Community 0 - "Community 0"
|
|
|
|
Cohesion: 0.03
|
|
Nodes (80): change_password(), login(), logout(), Authentication Blueprint - Login, Logout, Register, register(), add_content_to_group(), add_player_to_group(), delete_group() (+72 more)
|
|
|
|
### Community 1 - "Community 1"
|
|
|
|
Cohesion: 0.04
|
|
Nodes (72): Add player_user table for user code mappings., admin_panel(), admin_required(), build_player(), change_theme(), change_user_role(), clear_logs(), create_user() (+64 more)
|
|
|
|
### Community 2 - "Community 2"
|
|
|
|
Cohesion: 0.04
|
|
Nodes (61): add_content_to_playlist(), add_weblink(), add_weblink_to_playlist(), assign_player_to_playlist(), bulk_remove_from_playlist(), content_list(), create_fullhd_image(), delete_playlist() (+53 more)
|
|
|
|
### Community 3 - "Community 3"
|
|
|
|
Cohesion: 0.06
|
|
Nodes (57): api_not_found(), authenticate_player(), deploy_player(), get_cached_playlist(), get_logs(), get_player_playlist(), get_player_status(), get_playlist_by_quickconnect() (+49 more)
|
|
|
|
### Community 4 - "Community 4"
|
|
|
|
Cohesion: 0.07
|
|
Nodes (42): add_muted_column(), Add muted column to playlist_content association table., configure_login_manager(), create_app(), DigiServer v2 - Application Factory Modern Flask application with blueprint arch, Configure Flask-Login, Register error handlers, Register CLI commands (+34 more)
|
|
|
|
### Community 5 - "Community 5"
|
|
|
|
Cohesion: 0.04
|
|
Nodes (27): Content, Content model for media files., String representation of Content., Check if content is an image., Check if content is a video., Content model representing media files for display. Attributes:, Check if content is a PDF., Check if content is a web link (URL) rather than an uploaded file. (+19 more)
|
|
|
|
### Community 6 - "Community 6"
|
|
|
|
Cohesion: 0.05
|
|
Nodes (45): Add https_config table for HTTPS configuration management., Write Caddyfile to disk. Args: caddyfile_content: C, Reload Caddy configuration without restart. Note: Caddy monitor, Generate a complete Caddyfile. Behaviour: - HTTPS disabled / no, Write Caddyfile to disk. The default path is /etc/caddy/Caddyfile — the, Push the current Caddyfile to Caddy via its admin API (/load). Caddy ap, HTTPSConfig, String representation of HTTPSConfig. (+37 more)
|
|
|
|
### Community 7 - "Community 7"
|
|
|
|
Cohesion: 0.06
|
|
Nodes (26): create_group(), delete_media(), Delete a media file and remove it from all playlists., Group, Group model for organizing players and content., Group model for organizing players with shared content. Attributes:, String representation of Group., Add a player to this group. Args: player: Player in (+18 more)
|
|
|
|
### Community 8 - "Community 8"
|
|
|
|
Cohesion: 0.23
|
|
Nodes (23): check_database_integrity(), Colors, get_player_auth_code(), get_sample_content(), main(), print_error(), print_info(), print_section() (+15 more)
|
|
|
|
### Community 9 - "Community 9"
|
|
|
|
Cohesion: 0.11
|
|
Nodes (20): Get upload progress for a specific upload., upload_content(), upload_progress_status(), clear_upload_progress(), delete_file(), get_file_size(), get_upload_progress(), process_pdf_file() (+12 more)
|
|
|
|
### Community 10 - "Community 10"
|
|
|
|
Cohesion: 0.12
|
|
Nodes (18): background_player_deployment(), Background task execution for long-running operations., Run a function in a background thread, with a Flask app context pushed., Deploy player code to host in background. Args: hostname: SSH h, run_background_task(), deploy_player_to_host(), generate_app_config(), generate_player_config() (+10 more)
|
|
|
|
### Community 11 - "Community 11"
|
|
|
|
Cohesion: 0.15
|
|
Nodes (18): build_player_action(), Build/refresh the staged player code and/or write its base config., build_player_files(), get_player_server_settings(), get_short_head(), load_build_settings(), make_build_record(), Utilities for building/staging the player files on the server. Admins use the " (+10 more)
|
|
|
|
### Community 12 - "Community 12"
|
|
|
|
Cohesion: 0.29
|
|
Nodes (7): cleanup_libreoffice_processes(), pptx_to_pdf_libreoffice(), PowerPoint to PDF converter using LibreOffice., Clean up any hanging LibreOffice processes., Convert PPTX to PDF using LibreOffice for highest quality. This functio, Validate if file is a valid PowerPoint file. Args: filepath: Pa, validate_pptx_file()
|
|
|
|
### Community 13 - "Community 13"
|
|
|
|
Cohesion: 0.5
|
|
Nodes (3): migrate(), Migration: Add edit_on_player_enabled column to playlist_content table., Add edit_on_player_enabled column to playlist_content.
|
|
|
|
### Community 14 - "Community 14"
|
|
|
|
Cohesion: 1.0
|
|
Nodes (1): Migrate player_user table to remove player_id and make user_code unique globally
|
|
|
|
### Community 15 - "Community 15"
|
|
|
|
Cohesion: 1.0
|
|
Nodes (1): Add original_filename column to content table. This preserves the pristine uplo
|
|
|
|
### Community 16 - "Community 16"
|
|
|
|
Cohesion: 1.0
|
|
Nodes (1): Add url column to content table for weblink support.
|
|
|
|
### Community 17 - "Community 17"
|
|
|
|
Cohesion: 1.0
|
|
Nodes (1): Add deployment tracking columns to player table.
|
|
|
|
### Community 18 - "Community 18"
|
|
|
|
Cohesion: 1.0
|
|
Nodes (1): Add email field to https_config table.
|
|
|
|
### Community 19 - "Community 19"
|
|
|
|
Cohesion: 1.0
|
|
Nodes (1): Flask extensions initialization Centralized extension management for the applica
|
|
|
|
### Community 20 - "Community 20"
|
|
|
|
Cohesion: 1.0
|
|
Nodes (1): Check if feedback indicates an error.
|
|
|
|
### Community 21 - "Community 21"
|
|
|
|
Cohesion: 1.0
|
|
Nodes (1): Get age of feedback in seconds.
|
|
|
|
### Community 22 - "Community 22"
|
|
|
|
Cohesion: 1.0
|
|
Nodes (1): Get most recent feedback for a player. Args: player
|
|
|
|
### Community 23 - "Community 23"
|
|
|
|
Cohesion: 1.0
|
|
Nodes (1): Get the current HTTPS configuration. Returns: HTTPS
|
|
|
|
### Community 24 - "Community 24"
|
|
|
|
Cohesion: 1.0
|
|
Nodes (1): Create or update HTTPS configuration. Args: https_e
|
|
|
|
### Community 25 - "Community 25"
|
|
|
|
Cohesion: 1.0
|
|
Nodes (1): Check if user has admin role.
|
|
|
|
### Community 26 - "Community 26"
|
|
|
|
Cohesion: 1.0
|
|
Nodes (1): Check if player is online (seen in last 5 minutes).
|
|
|
|
### Community 27 - "Community 27"
|
|
|
|
Cohesion: 1.0
|
|
Nodes (1): Authenticate a player by hostname and password or quickconnect code.
|
|
|
|
### Community 28 - "Community 28"
|
|
|
|
Cohesion: 1.0
|
|
Nodes (1): Create an info level log entry. Args: message: Log
|
|
|
|
### Community 29 - "Community 29"
|
|
|
|
Cohesion: 1.0
|
|
Nodes (1): Create a warning level log entry. Args: message: Lo
|
|
|
|
### Community 30 - "Community 30"
|
|
|
|
Cohesion: 1.0
|
|
Nodes (1): Create an error level log entry. Args: message: Log
|
|
|
|
### Community 31 - "Community 31"
|
|
|
|
Cohesion: 1.0
|
|
Nodes (1): Get number of content items in this group.
|
|
|
|
### Community 32 - "Community 32"
|
|
|
|
Cohesion: 1.0
|
|
Nodes (1): Get file size in megabytes.
|
|
|
|
### Community 33 - "Community 33"
|
|
|
|
Cohesion: 1.0
|
|
Nodes (1): Get number of groups containing this content.
|
|
|
|
### Community 34 - "Community 34"
|
|
|
|
Cohesion: 1.0
|
|
Nodes (1): Name of the original (unedited) file for display purposes.
|
|
|
|
### Community 35 - "Community 35"
|
|
|
|
Cohesion: 1.0
|
|
Nodes (1): Path (relative to uploads/) where the original unedited file lives. Whe
|
|
|
|
### Community 36 - "Community 36"
|
|
|
|
Cohesion: 1.0
|
|
Nodes (1): Path (relative to uploads/) of the current/latest version to display.
|
|
|
|
### Community 37 - "Community 37"
|
|
|
|
Cohesion: 1.0
|
|
Nodes (1): Whether this content has been edited on a player.
|
|
|
|
### Community 38 - "Community 38"
|
|
|
|
Cohesion: 1.0
|
|
Nodes (1): Display name of the original (unedited) file.
|
|
|
|
### Community 39 - "Community 39"
|
|
|
|
Cohesion: 1.0
|
|
Nodes (1): uploads/-relative path of the pristine original file. After a player ed
|
|
|
|
### Community 40 - "Community 40"
|
|
|
|
Cohesion: 1.0
|
|
Nodes (0):
|
|
|
|
## Knowledge Gaps
|
|
- **178 isolated node(s):** `Migrate player_user table to remove player_id and make user_code unique globally`, `Add original_filename column to content table. This preserves the pristine uplo`, `Add url column to content table for weblink support.`, `Add deployment tracking columns to player table.`, `Add email field to https_config table.` (+173 more)
|
|
These have ≤1 connection - possible missing edges or undocumented components.
|
|
- **Thin community `Community 14`** (2 nodes): `migrate_player_user_global.py`, `Migrate player_user table to remove player_id and make user_code unique globally`
|
|
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
- **Thin community `Community 15`** (2 nodes): `Add original_filename column to content table. This preserves the pristine uplo`, `add_original_filename_to_content.py`
|
|
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
- **Thin community `Community 16`** (2 nodes): `Add url column to content table for weblink support.`, `add_url_to_content.py`
|
|
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
- **Thin community `Community 17`** (2 nodes): `Add deployment tracking columns to player table.`, `add_deployment_fields_to_player.py`
|
|
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
- **Thin community `Community 18`** (2 nodes): `Add email field to https_config table.`, `add_email_to_https_config.py`
|
|
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
- **Thin community `Community 19`** (2 nodes): `Flask extensions initialization Centralized extension management for the applica`, `extensions.py`
|
|
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
- **Thin community `Community 20`** (1 nodes): `Check if feedback indicates an error.`
|
|
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
- **Thin community `Community 21`** (1 nodes): `Get age of feedback in seconds.`
|
|
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
- **Thin community `Community 22`** (1 nodes): `Get most recent feedback for a player. Args: player`
|
|
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
- **Thin community `Community 23`** (1 nodes): `Get the current HTTPS configuration. Returns: HTTPS`
|
|
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
- **Thin community `Community 24`** (1 nodes): `Create or update HTTPS configuration. Args: https_e`
|
|
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
- **Thin community `Community 25`** (1 nodes): `Check if user has admin role.`
|
|
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
- **Thin community `Community 26`** (1 nodes): `Check if player is online (seen in last 5 minutes).`
|
|
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
- **Thin community `Community 27`** (1 nodes): `Authenticate a player by hostname and password or quickconnect code.`
|
|
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
- **Thin community `Community 28`** (1 nodes): `Create an info level log entry. Args: message: Log`
|
|
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
- **Thin community `Community 29`** (1 nodes): `Create a warning level log entry. Args: message: Lo`
|
|
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
- **Thin community `Community 30`** (1 nodes): `Create an error level log entry. Args: message: Log`
|
|
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
- **Thin community `Community 31`** (1 nodes): `Get number of content items in this group.`
|
|
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
- **Thin community `Community 32`** (1 nodes): `Get file size in megabytes.`
|
|
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
- **Thin community `Community 33`** (1 nodes): `Get number of groups containing this content.`
|
|
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
- **Thin community `Community 34`** (1 nodes): `Name of the original (unedited) file for display purposes.`
|
|
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
- **Thin community `Community 35`** (1 nodes): `Path (relative to uploads/) where the original unedited file lives. Whe`
|
|
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
- **Thin community `Community 36`** (1 nodes): `Path (relative to uploads/) of the current/latest version to display.`
|
|
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
- **Thin community `Community 37`** (1 nodes): `Whether this content has been edited on a player.`
|
|
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
- **Thin community `Community 38`** (1 nodes): `Display name of the original (unedited) file.`
|
|
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
- **Thin community `Community 39`** (1 nodes): `uploads/-relative path of the pristine original file. After a player ed`
|
|
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
|
|
- **Thin community `Community 40`** (1 nodes): `check_fix_player.py`
|
|
Too small to be a meaningful cluster - may be noise or needs more connections extracted. |