{% extends "_admin_base.html" %} {% block title %}Polling Management - Admin - {{ APP_NAME }}{% endblock %} {% block page_title %}Polling Management{% endblock %} {% block page_description %}Manage data collection sources and schedules{% endblock %} {% block admin_styles %} .source-card { background: var(--surface-color); border: 1px solid var(--divider-color); border-radius: 12px; padding: 20px; margin-bottom: 16px; } .source-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px; } .source-title { font-size: 1.2rem; font-weight: 600; color: var(--text-primary); } .source-meta { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 16px; margin-bottom: 16px; } .meta-item { display: flex; flex-direction: column; } .meta-label { font-size: 0.85rem; color: var(--text-secondary); margin-bottom: 4px; } .meta-value { font-weight: 500; color: var(--text-primary); } .source-actions { display: flex; gap: 8px; flex-wrap: wrap; } .btn { padding: 8px 16px; border: none; border-radius: 6px; cursor: pointer; font-weight: 500; transition: all 0.2s; } .btn-primary { background: var(--primary-color); color: white; } .btn-primary:hover { background: var(--primary-dark); } .btn-secondary { background: var(--divider-color); color: var(--text-primary); } .btn-secondary:hover { background: #d0d0d0; } .btn-danger { background: #dc3545; color: white; } .btn-danger:hover { background: #c82333; } .add-source-form { background: var(--surface-color); border: 2px dashed var(--divider-color); border-radius: 12px; padding: 24px; margin-bottom: 24px; } .form-group { margin-bottom: 16px; } .form-label { display: block; margin-bottom: 8px; font-weight: 500; color: var(--text-primary); } .form-input, .form-select { width: 100%; padding: 10px; border: 1px solid var(--divider-color); border-radius: 6px; font-size: 1rem; } .scheduler-status { background: var(--surface-color); border: 1px solid var(--divider-color); border-radius: 12px; padding: 16px; margin-bottom: 24px; } .no-sources { text-align: center; padding: 48px; color: var(--text-secondary); } .add-source-form { background: var(--surface-color); border: 1px solid var(--divider-color); border-radius: 12px; padding: 24px; margin-bottom: 24px; } .form-label { display: block; margin-bottom: 8px; font-weight: 500; color: var(--text-primary); } .form-input, .form-select { width: 100%; padding: 10px; border: 1px solid var(--divider-color); border-radius: 6px; font-size: 1rem; } .scheduler-status { background: var(--surface-color); border: 1px solid var(--divider-color); border-radius: 12px; padding: 16px; margin-bottom: 24px; } .help-text { font-size: 0.85rem; color: var(--text-secondary); margin-top: 4px; } .alert { padding: 12px 16px; border-radius: 8px; margin-bottom: 12px; } .alert-success { background: #d4edda; color: #155724; } .alert-error { background: #f8d7da; color: #721c24; } {% endblock %} {% block admin_content %}
Status: {% if scheduler_status.running %} Running {% else %} Stopped {% endif %}
Active Jobs: {{ scheduler_status.jobs|length }}
No polling sources configured yet.
Add your first source above to start collecting content!