'use strict'; 'require baseclass'; 'require rpc'; 'require uci'; /** * SecuBox Netifyd API Client * Provides interface to netifyd RPCD backend */ return baseclass.extend({ /** * Get service status */ getServiceStatus: function() { return L.resolveDefault(rpc.declare({ object: 'luci.secubox-netifyd', method: 'get_service_status' })(), {}); }, /** * Get detailed netifyd status from CLI */ getNetifydStatus: function() { return L.resolveDefault(rpc.declare({ object: 'luci.secubox-netifyd', method: 'get_netifyd_status' })(), {}); }, /** * Get real-time flows from socket */ getRealtimeFlows: function() { return L.resolveDefault(rpc.declare({ object: 'luci.secubox-netifyd', method: 'get_realtime_flows' })(), { flows: [] }); }, /** * Get flow statistics */ getFlowStatistics: function() { return L.resolveDefault(rpc.declare({ object: 'luci.secubox-netifyd', method: 'get_flow_statistics' })(), {}); }, /** * Get top applications */ getTopApplications: function() { return L.resolveDefault(rpc.declare({ object: 'luci.secubox-netifyd', method: 'get_top_applications' })(), { applications: [] }); }, /** * Get top protocols */ getTopProtocols: function() { return L.resolveDefault(rpc.declare({ object: 'luci.secubox-netifyd', method: 'get_top_protocols' })(), { protocols: [] }); }, /** * Get detected devices */ getDetectedDevices: function() { return L.resolveDefault(rpc.declare({ object: 'luci.secubox-netifyd', method: 'get_detected_devices' })(), { devices: [] }); }, /** * Get dashboard data */ getDashboard: function() { return L.resolveDefault(rpc.declare({ object: 'luci.secubox-netifyd', method: 'get_dashboard' })(), {}); }, /** * Start netifyd service */ startService: function() { return L.resolveDefault(rpc.declare({ object: 'luci.secubox-netifyd', method: 'service_start' })(), {}); }, /** * Stop netifyd service */ stopService: function() { return L.resolveDefault(rpc.declare({ object: 'luci.secubox-netifyd', method: 'service_stop' })(), {}); }, /** * Restart netifyd service */ restartService: function() { return L.resolveDefault(rpc.declare({ object: 'luci.secubox-netifyd', method: 'service_restart' })(), {}); }, /** * Enable netifyd service for auto-start */ enableService: function() { return L.resolveDefault(rpc.declare({ object: 'luci.secubox-netifyd', method: 'service_enable' })(), {}); }, /** * Disable netifyd service auto-start */ disableService: function() { return L.resolveDefault(rpc.declare({ object: 'luci.secubox-netifyd', method: 'service_disable' })(), {}); }, /** * Get configuration */ getConfig: function() { return L.resolveDefault(rpc.declare({ object: 'luci.secubox-netifyd', method: 'get_config' })(), {}); }, /** * Update configuration */ updateConfig: function(config) { return L.resolveDefault(rpc.declare({ object: 'luci.secubox-netifyd', method: 'update_config', params: ['settings', 'monitoring', 'analytics', 'alerts'] })(config.settings, config.monitoring, config.analytics, config.alerts), {}); }, /** * Get network interfaces being monitored */ getInterfaces: function() { return L.resolveDefault(rpc.declare({ object: 'luci.secubox-netifyd', method: 'get_interfaces' })(), { interfaces: [] }); }, /** * Clear flow cache */ clearCache: function() { return L.resolveDefault(rpc.declare({ object: 'luci.secubox-netifyd', method: 'clear_cache' })(), {}); }, /** * Export flows */ exportFlows: function(format) { return L.resolveDefault(rpc.declare({ object: 'luci.secubox-netifyd', method: 'export_flows', params: ['format'] })(format || 'json'), {}); }, /** * Apply plugin configuration and restart Netifyd */ applyPluginConfig: function() { return L.resolveDefault(rpc.declare({ object: 'luci.secubox-netifyd', method: 'apply_plugin_configuration' })(), {}); }, /** * Format bytes to human-readable format */ formatBytes: function(bytes, decimals) { if (bytes === 0 || !bytes) return '0 Bytes'; var k = 1024; var dm = decimals !== undefined ? (decimals < 0 ? 0 : decimals) : 2; var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB']; var i = Math.floor(Math.log(bytes) / Math.log(k)); return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]; }, /** * Format duration to human-readable format */ formatDuration: function(seconds) { if (!seconds || seconds < 0) return '0s'; var days = Math.floor(seconds / 86400); var hours = Math.floor((seconds % 86400) / 3600); var minutes = Math.floor((seconds % 3600) / 60); var secs = seconds % 60; var parts = []; if (days > 0) parts.push(days + 'd'); if (hours > 0) parts.push(hours + 'h'); if (minutes > 0) parts.push(minutes + 'm'); if (secs > 0 || parts.length === 0) parts.push(secs + 's'); return parts.join(' '); }, /** * Get status badge HTML */ getStatusBadge: function(status) { var badges = { 'active': 'Active', 'stopped': 'Stopped', 'not_installed': 'Not Installed' }; return badges[status] || 'Unknown'; } });