secubox-openwrt/package/secubox/luci-app-bandwidth-manager/htdocs/luci-static/resources/bandwidth-manager/api.js
CyberMind-FR ee0a7a0864 feat(bandwidth-manager): Add profiles, parental controls, alerts, traffic graphs
Major feature expansion for luci-app-bandwidth-manager:

- Device Profiles: Gaming, Streaming, IoT, Work, Kids presets with
  custom QoS settings, bandwidth limits, and latency modes
- Parental Controls: Quick preset modes (Bedtime, Homework, Family Time),
  access schedules, content filtering categories
- Bandwidth Alerts: Threshold monitoring (80/90/100%), new device alerts,
  email/SMS notifications with configurable settings
- Traffic Graphs: Real-time bandwidth charts, historical data visualization,
  top talkers list, protocol breakdown pie charts
- Time Schedules: Full CRUD with day selection, limits, priority settings

Backend additions:
- ~30 new RPCD methods for all features
- Alert monitoring cron job (every 5 minutes)
- Shared alerts.sh library for email/SMS

Frontend views:
- profiles.js, parental-controls.js, alerts.js, traffic-graphs.js
- Shared graphs.js utility for canvas drawing
- parental.css for parental controls styling

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 12:25:35 +01:00

502 lines
12 KiB
JavaScript

'use strict';
'require baseclass';
'require rpc';
// ============================================
// Core Status & Monitoring
// ============================================
var callStatus = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'status',
expect: {}
});
var callListRules = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'list_rules',
expect: { rules: [] }
});
var callAddRule = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'add_rule',
params: ['name', 'type', 'target', 'limit_down', 'limit_up', 'priority'],
expect: {}
});
var callDeleteRule = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'delete_rule',
params: ['rule_id'],
expect: {}
});
var callListQuotas = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'list_quotas',
expect: { quotas: [] }
});
var callGetQuota = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'get_quota',
params: ['mac'],
expect: {}
});
var callSetQuota = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'set_quota',
params: ['mac', 'name', 'limit_mb', 'action', 'reset_day'],
expect: {}
});
var callResetQuota = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'reset_quota',
params: ['mac'],
expect: {}
});
var callGetUsageRealtime = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'get_usage_realtime',
expect: { clients: [] }
});
var callGetUsageHistory = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'get_usage_history',
params: ['timeframe', 'mac'],
expect: { history: [] }
});
var callGetMedia = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'get_media',
expect: { media: [] }
});
var callGetClasses = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'get_classes',
expect: { classes: [] }
});
// ============================================
// Smart QoS & DPI
// ============================================
var callGetDpiApplications = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'get_dpi_applications',
expect: { applications: [] }
});
var callGetSmartSuggestions = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'get_smart_suggestions',
expect: { suggestions: [] }
});
var callApplyDpiRule = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'apply_dpi_rule',
params: ['app_name', 'priority', 'limit_down', 'limit_up'],
expect: {}
});
// ============================================
// Device Groups
// ============================================
var callListGroups = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'list_groups',
expect: { groups: [] }
});
var callGetGroup = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'get_group',
params: ['group_id'],
expect: {}
});
var callCreateGroup = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'create_group',
params: ['name', 'description', 'quota_mb', 'priority', 'members'],
expect: {}
});
var callUpdateGroup = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'update_group',
params: ['group_id', 'name', 'description', 'quota_mb', 'priority', 'members'],
expect: {}
});
var callDeleteGroup = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'delete_group',
params: ['group_id'],
expect: {}
});
var callAddToGroup = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'add_to_group',
params: ['group_id', 'mac'],
expect: {}
});
var callRemoveFromGroup = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'remove_from_group',
params: ['group_id', 'mac'],
expect: {}
});
// ============================================
// Analytics
// ============================================
var callGetAnalyticsSummary = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'get_analytics_summary',
params: ['period'],
expect: {}
});
var callGetHourlyData = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'get_hourly_data',
params: ['days'],
expect: { hourly_data: [] }
});
var callRecordStats = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'record_stats',
expect: {}
});
// ============================================
// Device Profiles
// ============================================
var callGetBuiltinProfiles = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'get_builtin_profiles',
expect: { profiles: [] }
});
var callListProfiles = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'list_profiles',
expect: { profiles: [] }
});
var callGetProfile = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'get_profile',
params: ['profile_id'],
expect: {}
});
var callCreateProfile = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'create_profile',
params: ['name', 'description', 'icon', 'color', 'priority', 'limit_down', 'limit_up', 'latency_mode', 'content_filter', 'isolate', 'schedule'],
expect: {}
});
var callUpdateProfile = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'update_profile',
params: ['profile_id', 'name', 'description', 'icon', 'color', 'priority', 'limit_down', 'limit_up', 'latency_mode', 'content_filter', 'isolate', 'schedule', 'enabled'],
expect: {}
});
var callDeleteProfile = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'delete_profile',
params: ['profile_id'],
expect: {}
});
var callCloneProfile = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'clone_profile',
params: ['source_id', 'new_name'],
expect: {}
});
var callAssignProfileToDevice = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'assign_profile_to_device',
params: ['mac', 'profile_id', 'custom_limit_down', 'custom_limit_up'],
expect: {}
});
var callAssignProfileToGroup = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'assign_profile_to_group',
params: ['group_id', 'profile_id'],
expect: {}
});
var callRemoveProfileAssignment = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'remove_profile_assignment',
params: ['mac'],
expect: {}
});
var callListProfileAssignments = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'list_profile_assignments',
expect: { assignments: [] }
});
// ============================================
// Parental Controls
// ============================================
var callListParentalSchedules = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'list_parental_schedules',
expect: { schedules: [] }
});
var callCreateParentalSchedule = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'create_parental_schedule',
params: ['name', 'target_type', 'target', 'action', 'start_time', 'end_time', 'days'],
expect: {}
});
var callUpdateParentalSchedule = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'update_parental_schedule',
params: ['schedule_id', 'name', 'target_type', 'target', 'action', 'start_time', 'end_time', 'days', 'enabled'],
expect: {}
});
var callDeleteParentalSchedule = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'delete_parental_schedule',
params: ['schedule_id'],
expect: {}
});
var callToggleParentalSchedule = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'toggle_parental_schedule',
params: ['schedule_id', 'enabled'],
expect: {}
});
var callListPresetModes = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'list_preset_modes',
expect: { presets: [] }
});
var callActivatePresetMode = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'activate_preset_mode',
params: ['preset_id', 'enabled'],
expect: {}
});
var callGetFilterCategories = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'get_filter_categories',
expect: { categories: [] }
});
// ============================================
// Bandwidth Alerts
// ============================================
var callGetAlertSettings = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'get_alert_settings',
expect: {}
});
var callUpdateAlertSettings = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'update_alert_settings',
params: ['enabled', 'quota_threshold_80', 'quota_threshold_90', 'quota_threshold_100', 'new_device_alert', 'high_bandwidth_alert', 'high_bandwidth_threshold'],
expect: {}
});
var callConfigureEmail = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'configure_email',
params: ['smtp_server', 'smtp_port', 'smtp_user', 'smtp_password', 'smtp_tls', 'recipient', 'sender'],
expect: {}
});
var callConfigureSms = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'configure_sms',
params: ['provider', 'account_sid', 'auth_token', 'from_number', 'to_number'],
expect: {}
});
var callTestNotification = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'test_notification',
params: ['type'],
expect: {}
});
var callGetAlertHistory = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'get_alert_history',
params: ['limit'],
expect: { alerts: [] }
});
var callAcknowledgeAlert = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'acknowledge_alert',
params: ['timestamp'],
expect: {}
});
var callGetPendingAlerts = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'get_pending_alerts',
expect: { alerts: [], count: 0 }
});
var callCheckAlertThresholds = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'check_alert_thresholds',
expect: {}
});
// ============================================
// Traffic Graphs
// ============================================
var callGetRealtimeBandwidth = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'get_realtime_bandwidth',
expect: {}
});
var callGetHistoricalTraffic = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'get_historical_traffic',
params: ['period', 'granularity'],
expect: { data: [] }
});
var callGetDeviceTraffic = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'get_device_traffic',
params: ['mac', 'period'],
expect: {}
});
var callGetTopTalkers = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'get_top_talkers',
params: ['period', 'limit'],
expect: { talkers: [] }
});
var callGetProtocolBreakdown = rpc.declare({
object: 'luci.bandwidth-manager',
method: 'get_protocol_breakdown',
params: ['period'],
expect: { protocols: [] }
});
// ============================================
// Export API Module
// ============================================
return baseclass.extend({
// Core
getStatus: callStatus,
listRules: callListRules,
addRule: callAddRule,
deleteRule: callDeleteRule,
listQuotas: callListQuotas,
getQuota: callGetQuota,
setQuota: callSetQuota,
resetQuota: callResetQuota,
getUsageRealtime: callGetUsageRealtime,
getUsageHistory: callGetUsageHistory,
getMedia: callGetMedia,
getClasses: callGetClasses,
// Smart QoS
getDpiApplications: callGetDpiApplications,
getSmartSuggestions: callGetSmartSuggestions,
applyDpiRule: callApplyDpiRule,
// Groups
listGroups: callListGroups,
getGroup: callGetGroup,
createGroup: callCreateGroup,
updateGroup: callUpdateGroup,
deleteGroup: callDeleteGroup,
addToGroup: callAddToGroup,
removeFromGroup: callRemoveFromGroup,
// Analytics
getAnalyticsSummary: callGetAnalyticsSummary,
getHourlyData: callGetHourlyData,
recordStats: callRecordStats,
// Profiles
getBuiltinProfiles: callGetBuiltinProfiles,
listProfiles: callListProfiles,
getProfile: callGetProfile,
createProfile: callCreateProfile,
updateProfile: callUpdateProfile,
deleteProfile: callDeleteProfile,
cloneProfile: callCloneProfile,
assignProfileToDevice: callAssignProfileToDevice,
assignProfileToGroup: callAssignProfileToGroup,
removeProfileAssignment: callRemoveProfileAssignment,
listProfileAssignments: callListProfileAssignments,
// Parental Controls
listParentalSchedules: callListParentalSchedules,
createParentalSchedule: callCreateParentalSchedule,
updateParentalSchedule: callUpdateParentalSchedule,
deleteParentalSchedule: callDeleteParentalSchedule,
toggleParentalSchedule: callToggleParentalSchedule,
listPresetModes: callListPresetModes,
activatePresetMode: callActivatePresetMode,
getFilterCategories: callGetFilterCategories,
// Alerts
getAlertSettings: callGetAlertSettings,
updateAlertSettings: callUpdateAlertSettings,
configureEmail: callConfigureEmail,
configureSms: callConfigureSms,
testNotification: callTestNotification,
getAlertHistory: callGetAlertHistory,
acknowledgeAlert: callAcknowledgeAlert,
getPendingAlerts: callGetPendingAlerts,
checkAlertThresholds: callCheckAlertThresholds,
// Traffic Graphs
getRealtimeBandwidth: callGetRealtimeBandwidth,
getHistoricalTraffic: callGetHistoricalTraffic,
getDeviceTraffic: callGetDeviceTraffic,
getTopTalkers: callGetTopTalkers,
getProtocolBreakdown: callGetProtocolBreakdown
});