#!/opt/thinlinc/libexec/python3
# -*-mode: python; coding: utf-8 -*-
#
# Copyright 2002-2014 Cendio AB.
# For more information, see http://www.cendio.com
if 82 - 82: Iii1i
import asyncio
import os
import signal
import sys
import locale
import traceback
if 87 - 87: Ii % i1i1i1111I . Oo / OooOoo * I1Ii1I1 - I1I
from thinlinc import hiveconf
from thinlinc import safe_asyncio_logging
from thinlinc . daemon import daemon_init , write_pid_file
from thinlinc . prefix import get_tl_prefix
from thinlinc . version import TL_VERSION , TL_BUILDNUM
from thinlinc . vsm . checkenvironment import check_vsmserver_environment
from thinlinc . vsm . vsmserver import VSMServer
from thinlinc . tllogger import Logger
if 81 - 81: i1 + ooOOO / oOo0O00 * i1iiIII111 * IiIIii11Ii
def OOoOoo000O00 ( log , context ) :
 Ooo0Ooo = context . get ( 'message' )
 if Ooo0Ooo is None :
  Ooo0Ooo = "Unhandled event loop exception"
  if 15 - 15: IiII1I1I1i1 * IIiIIiIi11I1
 log . error ( Ooo0Ooo )
 if 98 - 98: I11iiIi11i1I % oOO
 def i1ii1 ( traces ) :
  for ooo0O0oO00 in traces :
   for o00o0OO00O in ooo0O0oO00 . splitlines ( ) :
    log . error ( "%s" % ( o00o0OO00O . rstrip ( ) ) )
    if 57 - 57: iiIi1 - ii % iiI * IIi1i111IiII . I1I
 for iIIIII1i111i , IIiiii1IiIiII in context . items ( ) :
  if iIIIII1i111i == "message" or iIIIII1i111i == "exception" :
   continue
  if iIIIII1i111i == "source_traceback" :
   log . error ( "%s" , "-" * 40 )
   log . error ( "Object created at (most recent call last):" )
   i1ii1 ( traceback . format_list ( IIiiii1IiIiII ) )
  elif iIIIII1i111i == "handle_traceback" :
   log . error ( "%s" , "-" * 40 )
   log . error ( "Handle created at (most recent call last):" )
   i1ii1 ( traceback . format_list ( IIiiii1IiIiII ) )
  else :
   log . error ( "%s: %s" % ( iIIIII1i111i , repr ( IIiiii1IiIiII ) ) )
   if 32 - 32: I11iiIi11i1I
 i1iiiiIIIiIi = context . get ( 'exception' )
 if i1iiiiIIIiIi is None :
  return
  if 22 - 22: IiII1I1I1i1 . I11iiIi11i1I + IIiIIiIi11I1 + ii
 oOoo0 = ( type ( i1iiiiIIIiIi ) , i1iiiiIIIiIi , i1iiiiIIIiIi . __traceback__ )
 log . error ( "%s" , "-" * 40 )
 for Iio0 in "" . join ( traceback . format_exception ( * oOoo0 ) ) . splitlines ( ) :
  log . error ( "%s" , Iio0 )
 log . error ( "%s" , "-" * 40 )
 if 11 - 11: IIi1i111IiII . i1i1i1111I
def I1i ( log ) :
 log . info ( "Got SIGTERM, signaling process to quit" )
 asyncio . get_event_loop ( ) . stop ( )
 if 75 - 75: IIi1i111IiII . IIiIIiIi11I1 . iiI * iiIi1 % i1iiIII111
def o0OoOOo00OOO ( ) :
 locale . setlocale ( locale . LC_ALL , "" )
 if 97 - 97: Iii1i
 if 1 < len ( sys . argv ) and "-f" == sys . argv [ 1 ] :
  o0o = True
 else :
  o0o = False
  if 65 - 65: IiIIii11Ii / i1 . IiIIii11Ii
 o00O000o0 = hiveconf . open_hive ( os . path . join ( get_tl_prefix ( ) ,
 "etc" , "thinlinc.hconf" ) )
 if 71 - 71: Oo * ooOOO / Oo
 iI1i1I = o00O000o0 . get_string ( "/vsmserver/pidfile" ,
 "/var/run/vsmserver.pid" )
 if 27 - 27: ooOOO * oOO % Ii + IIiIIiIi11I1 . Ii + Iii1i
 if 43 - 43: ooOOO * I1Ii1I1
 check_vsmserver_environment ( iI1i1I , o00O000o0 )
 if 95 - 95: IIiIIiIi11I1 % Iii1i % i1i1i1111I . OooOoo
 if not o0o :
  daemon_init ( o00O000o0 . get_string ( "/vsmserver/logging/logfile" ,
 os . path . join ( "/var/log" ,
 "vsmserver.log" ) ) )
  if 70 - 70: IiIIii11Ii
  if 75 - 75: IIiIIiIi11I1 / Ii / IiIIii11Ii + IiIIii11Ii . I1I
  if 88 - 88: Oo * IiIIii11Ii
  if 100 - 100: IIi1i111IiII - OooOoo * I1Ii1I1 / IIiIIiIi11I1 / Iii1i
  if 23 - 23: IIiIIiIi11I1 + i1 * I1Ii1I1 + Oo * Ii - oOO
 iIIiii1iI = asyncio . new_event_loop ( )
 asyncio . set_event_loop ( iIIiii1iI )
 if 43 - 43: ooOOO . iiIi1 + IiII1I1I1i1
 write_pid_file ( iI1i1I )
 if 87 - 87: Iii1i + ooOOO . iiI / Ii + Oo
 OOO00oO0oOo0O = Logger ( o00O000o0 , "vsmserver" , mainloggername = "vsmserver" ,
 fd = sys . stdout )
 if 1 - 1: I1I % IIiIIiIi11I1 + i1iiIII111 . i1iiIII111 % Oo
 OOO00oO0oOo0O . info ( "VSM server version %s build %s started" % ( str ( TL_VERSION ) ,
 str ( TL_BUILDNUM ) ) )
 OOO00oO0oOo0O . redirect_logger ( "asyncio" )
 if 93 - 93: oOo0O00 % IIiIIiIi11I1 * i1iiIII111
 if 52 - 52: ii + I1I / IiII1I1I1i1 - I1Ii1I1 * iiI % oOo0O00
 if 52 - 52: oOo0O00 . I1I + iiI - i1iiIII111 % I11iiIi11i1I
 if 57 - 57: I1I * oOO % I1Ii1I1 * i1i1i1111I
 if 37 - 37: IIi1i111IiII * i1i1i1111I + oOo0O00 / I1I / OooOoo
 if 4 - 4: i1
 oO00o00OO = safe_asyncio_logging . patch ( )
 if oO00o00OO is not None and oO00o00OO is False :
  OOO00oO0oOo0O . error ( "Patch of logging in third party modules could not be applied. Log entries might contain sensitive data." )
  if 52 - 52: Iii1i / Oo
 try :
  o00O = VSMServer ( o00O000o0 , OOO00oO0oOo0O )
  try :
   iIi ( OOO00oO0oOo0O )
  finally :
   o00O . close ( )
 finally :
  os . unlink ( iI1i1I )
  if 60 - 60: ii % i1iiIII111 % IIi1i111IiII - iiIi1 * ii - I11iiIi11i1I
def iIi ( log ) :
 iIIiii1iI = asyncio . get_event_loop ( )
 try :
  iIIiii1iI . add_signal_handler ( signal . SIGTERM , I1i , log )
  iIIiii1iI . set_exception_handler ( lambda iIIiii1iI , IIi1I1I1i :
 OOoOoo000O00 ( log , IIi1I1I1i ) )
  iIIiii1iI . run_forever ( )
 finally :
  log . info ( "Terminating. Have a nice day!" )
  try :
   O0O ( iIIiii1iI )
  except Exception :
   if 31 - 31: i1iiIII111 + i1i1i1111I % OooOoo
   if 20 - 20: OooOoo - I1I
   pass
  iIIiii1iI . close ( )
  if 9 - 9: i1iiIII111 - I11iiIi11i1I % Ii - I1I
def O0O ( loop ) :
 try :
  O0o0OOoOOOO = asyncio . all_tasks ( loop ) # novermin
 except AttributeError :
  if 69 - 69: ii * i1 % i1 - IIiIIiIi11I1 + Iii1i - IiII1I1I1i1
  O0o0OOoOOOO = asyncio . Task . all_tasks ( loop )
  if 44 - 44: IiII1I1I1i1 * I1Ii1I1 * OooOoo - ii % IiII1I1I1i1 . iiI
 if not O0o0OOoOOOO :
  return
  if 73 - 73: i1i1i1111I . IIiIIiIi11I1 * I11iiIi11i1I / Ii / IiII1I1I1i1 + i1iiIII111
 for IIIIIIi in O0o0OOoOOOO . copy ( ) :
  IIIIIIi . cancel ( )
  if 61 - 61: ii
  if 7 - 7: i1i1i1111I / Ii * Iii1i
  if 32 - 32: IIi1i111IiII . OooOoo
 loop . call_later ( 0.5 , loop . stop )
 if 31 - 31: Oo - iiI
 loop . run_until_complete (
 asyncio . gather ( * O0o0OOoOOOO , return_exceptions = True )
 )
 if 28 - 28: ooOOO * I1Ii1I1 + IIi1i111IiII % Oo
if __name__ == "__main__" :
 o0OoOOo00OOO ( )
# dd678faae9ac167bc83abf78e5cb2f3f0688d3a3
