@ -13,7 +13,7 @@ local ollama_manager = require("ollama_manager")
local session_check = require ( " session_check " )
local session_check = require ( " session_check " )
-- Handle error pattern detection and recovery
-- Handle error pattern detection and recovery
local function handle_error_pattern ( config , powered_on )
local function handle_error_pattern ( config , powered_on , service_started )
utils.log ( ( " Detected EHOSTUNREACH for Ollama (%s:%d). " ) : format ( config.OLLAMA_HOST , config.OLLAMA_PORT ) )
utils.log ( ( " Detected EHOSTUNREACH for Ollama (%s:%d). " ) : format ( config.OLLAMA_HOST , config.OLLAMA_PORT ) )
-- Check if user is currently logged into a desktop session
-- Check if user is currently logged into a desktop session
@ -23,7 +23,7 @@ local function handle_error_pattern(config, powered_on)
if user_logged_in then
if user_logged_in then
utils.log ( ( " User '%s' is currently logged into a desktop session. Skipping Ollama startup to avoid interruption. " )
utils.log ( ( " User '%s' is currently logged into a desktop session. Skipping Ollama startup to avoid interruption. " )
: format ( config.SSH_USER ) )
: format ( config.SSH_USER ) )
return powered_on -- Return current powered_on state without changes
return powered_on , service_started -- Return current states without changes
end
end
utils.log ( ( " User '%s' is not logged into a desktop session. Proceeding with Ollama startup. " ) : format ( config.SSH_USER ) )
utils.log ( ( " User '%s' is not logged into a desktop session. Proceeding with Ollama startup. " ) : format ( config.SSH_USER ) )
@ -46,15 +46,17 @@ local function handle_error_pattern(config, powered_on)
-- If SSH is reachable, the host is powered on (regardless of WOL status)
-- If SSH is reachable, the host is powered on (regardless of WOL status)
powered_on = true
powered_on = true
utils.log ( " SSH is reachable - host is powered on " )
utils.log ( " SSH is reachable - host is powered on " )
ollama_manager.start_service ( config )
if ollama_manager.start_service ( config ) then
service_started = true
end
else
else
utils.log ( " SSH timeout - host may not be powered on " )
utils.log ( " SSH timeout - host may not be powered on " )
end
end
return powered_on
return powered_on , service_started
end
end
-- Handle finish pattern detection and shutdown
-- Handle finish pattern detection and shutdown
local function handle_finish_pattern ( config , powered_on )
local function handle_finish_pattern ( config , powered_on , service_started )
utils.log ( ( " Detected finish pattern: %q " ) : format ( config.FINISH_PATTERN ) )
utils.log ( ( " Detected finish pattern: %q " ) : format ( config.FINISH_PATTERN ) )
-- Check if user is currently logged into a desktop session
-- Check if user is currently logged into a desktop session
@ -64,13 +66,25 @@ local function handle_finish_pattern(config, powered_on)
if user_logged_in then
if user_logged_in then
utils.log ( ( " User '%s' is currently logged into a desktop session. Skipping shutdown to avoid interruption. " ) : format (
utils.log ( ( " User '%s' is currently logged into a desktop session. Skipping shutdown to avoid interruption. " ) : format (
config.SSH_USER ) )
config.SSH_USER ) )
return powered_on -- Exit without shutting down
-- If service was started, stop it since user is now active
if service_started then
utils.log ( " Stopping Ollama service since user is now active on desktop " )
ollama_manager.stop_service ( config )
service_started = false
end
return powered_on , service_started -- Exit without shutting down host
end
end
utils.log ( ( " User '%s' is not logged into a desktop session. Proceeding with shutdown. " ) : format ( config.SSH_USER ) )
utils.log ( ( " User '%s' is not logged into a desktop session. Proceeding with shutdown. " ) : format ( config.SSH_USER ) )
ollama_manager.stop_service_and_shutdown ( config )
if service_started then
ollama_manager.stop_service ( config )
end
ollama_manager.shutdown_host ( config )
powered_on = false
powered_on = false
return powered_on
service_started = false
return powered_on , service_started
end
end
-- Main application logic
-- Main application logic
@ -80,6 +94,7 @@ local function main()
local cmd = ( " docker logs -f --since %q %q 2>&1 " ) : format ( config.SINCE , config.CONTAINER_NAME )
local cmd = ( " docker logs -f --since %q %q 2>&1 " ) : format ( config.SINCE , config.CONTAINER_NAME )
local powered_on = false
local powered_on = false
local service_started = false
while true do
while true do
local fh = assert ( io.popen ( cmd , " r " ) )
local fh = assert ( io.popen ( cmd , " r " ) )
@ -87,12 +102,12 @@ local function main()
for line in fh : lines ( ) do
for line in fh : lines ( ) do
-- Handle error pattern detection
-- Handle error pattern detection
if line : find ( config.ERROR_PATTERN , 1 , true ) ~= nil then
if line : find ( config.ERROR_PATTERN , 1 , true ) ~= nil then
powered_on = handle_error_pattern ( config , powered_on )
powered_on , service_started = handle_error_pattern ( config , powered_on , service_started )
end
end
-- Handle finish pattern detection
-- Handle finish pattern detection
if line : find ( config.FINISH_PATTERN , 1 , true ) ~= nil and powered_on == true then
if line : find ( config.FINISH_PATTERN , 1 , true ) ~= nil and powered_on == true then
powered_on = handle_finish_pattern ( config , powered_on )
powered_on , service_started = handle_finish_pattern ( config , powered_on , service_started )
break
break
end
end
end
end