Exemplo n.º 1
0
    def __init__(self):
        #############################
        # ジョブクラスの生成
        self.OBJ_Job = CLS_Botjob()

        #############################
        # ユーザ一覧取得
        wUserList = CLS_UserData.sGetUserList()

        #############################
        # クラス変数に辞書型として納める
        self.UserList = {}
        for wUser in wUserList:
            self.UserList.update({wUser: False})

##		###バックグラウンドユーザの追加
##		self.UserList.update({ gVal.DEF_CRON_ACCOUNT_BACKGROUND : False })
        return
Exemplo n.º 2
0
	def MasterSetup(self):
		#############################
		# フォルダの存在チェック
		if CLS_File.sExist( gVal.DEF_STR_FILE['MasterConfig_path'] )==True :
			CLS_OSIF.sPrn( "フォルダが既に存在します。セットアップを中止します。" )
			return False	#既にある
		
		wStr = '\n' + "Master環境情報のセットアップを開始します。"
		wStr = wStr + "データのテンプレートをコピーします....."
		CLS_OSIF.sPrn( wStr )
		
		#############################
		# テンプレートデータのコピー(データ作成)
		if CLS_File.sCopytree(
			gVal.DEF_STR_FILE['defMasterdata_path'],
			gVal.DEF_STR_FILE['MasterConfig_path'] )!=True :
			###テンプレートが消えてる (IOエラーはOSが出す)
			CLS_OSIF.sPrn( "CLS_Config: MasterSetup: Master Data Template is not found" )
			return False
		
		#############################
		# フォルダの存在チェック
		if CLS_File.sExist( gVal.DEF_STR_FILE['MasterConfig_path'] )!=True :
			CLS_OSIF.sPrn( "CLS_Config: MasterSetup: Data Copy check failed" )
			return False	#失敗
		
		#############################
		# コピー完了
		CLS_OSIF.sPrn( "Master環境情報のコピーが完了しました。" + '\n' )
		
		#############################
		# 使うクラスの作成
		wCLS_Config = CLS_Config()
		wCLS_Regist = CLS_Regist()
		wCLS_Botjob = CLS_Botjob()
		wCLS_Bot_Ctrl = CLS_Bot_Ctrl()
		
		#############################
		# Master環境情報の変更
		wStr = "Master環境情報の変更をおこないますか?" + '\n'
		wStr = wStr + "(あとで変更することもできます)"
		CLS_OSIF.sPrn( wStr )
		wSelect = CLS_OSIF.sInp( "変更する?(y/N)=> " )
		if wSelect=="y" :
			wRes = wCLS_Config.CnfMasterConfig()
			if wRes!=True :
				##失敗
				CLS_File.sRmtree( gVal.DEF_STR_FILE['MasterConfig_path'] )
				return False
		
		#############################
		# 初期起動直後なので、メンテをOFFにする
		# cronを全て剥がす
##		gVal.STR_MasterConfig['mMainte'] = "off"
##		wCLS_Botjob.Stop()
		wCLS_Bot_Ctrl.CronAllStop()
		
		#############################
		# ユーザ登録=0の時、ユーザ登録させる
		wList = CLS_UserData.sGetUserList()
		if len(wList)==0 :
			wFLG_regist = False
			while True:
				wStr = '\n' + "Master User(mastodonでbotとして使うユーザ)の登録をおこないます。" + '\n'
				wStr = wStr + "ユーザ名をドメインを含めて入力してください。: 例= " + gVal.DEF_EXAMPLE_ACCOUNT
				CLS_OSIF.sPrn( wStr )
				wMasterUser = CLS_OSIF.sInp( "MasterUser?=> " )
				wRes = wCLS_Regist.Regist( wMasterUser )
				if wRes==True :
					###登録できたので次へ
					wFLG_regist = True
					break
				else :
					###登録できないと、登録できるまで継続したい
					CLS_OSIF.sPrn( "ユーザの登録がないとbotが動作できません。" )
					wRes = CLS_OSIF.sInp( "登録を中止しますか?(y)=> " )
					if wRes=='y' :
						return False	#セットアップいちお完了だけどユーザ未登録
			
			if wFLG_regist!=True :
				##中止なので消す
				CLS_File.sRmtree( gVal.DEF_STR_FILE['MasterConfig_path'] )
				return False
		
		#############################
		# ユーザ登録がされている時
		# もしくは1件だけ登録した時
		# masterユーザを登録する
		wRes = wCLS_Config.CnfMasterUser()
		if wRes!=True :
			##失敗
			CLS_File.sRmtree( gVal.DEF_STR_FILE['MasterConfig_path'] )
			return False
		
		#############################
		# AdminUserの変更
		wCLS_Config.CnfAdminUser()
		
##		#############################
##		# MasterとBackgroundのbotを起動する
##		wRes = wCLS_Botjob.Put( gVal.DEF_CRON_MASTER, gVal.STR_MasterConfig['MasterUser'] )
##		if wRes['Result']!=True :
##			wStr = "Master botの起動に失敗しました。: " + wRes['Reason']
##			CLS_OSIF.sPrn( wStr )
##			return False
##		
##		wRes = wCLS_Botjob.Put( gVal.DEF_CRON_BACK, gVal.DEF_CRON_ACCOUNT_BACKGROUND )
##		if wRes['Result']!=True :
##			wStr = "Background botの起動に失敗しました。: " + wRes['Reason']
##			CLS_OSIF.sPrn( wStr )
##			return False
		
		#############################
		# Databaseの作成
		
		#############################
		# DB接続情報ファイルのチェック
		if CLS_File.sExist( gVal.DEF_STR_FILE['DBinfo_File'] )!=True :
##			###DB接続情報ファイルの作成(空ファイル)
##			if CLS_File.sCopy(
##				gVal.STR_File['defDBinfo_File'], gVal.STR_File['DBinfo_File'] )!=True :
##				##失敗
##				CLS_File.sRmtree( gVal.STR_File['MasterConfig_path'] )
##				CLS_File.sRmtree( gVal.DEF_USERDATA_PATH + gVal.STR_MasterConfig['MasterUser'] )
##				
##				wStr = "CLS_Setup: DataBase file copy failed: src=" + gVal.STR_File['defDBinfo_File']
##				wStr = wStr + " dst=" + gVal.STR_File['DBinfo_File']
##				CLS_OSIF.sPrn( wStr  )
##				return False
##			
			wOBJ_DB = CLS_PostgreSQL_Use()
##			if wOBJ_DB.CreateDBdata( gVal.STR_File['DBinfo_File'] )!=True :
			if wOBJ_DB.CreateDBdata( gVal.DEF_STR_FILE['DBinfo_File'], gVal.DEF_STR_FILE['defDBinfo_File'] )!=True :
				##失敗
				CLS_File.sRmtree( gVal.DEF_STR_FILE['MasterConfig_path'] )
				CLS_File.sRmtree( gVal.DEF_USERDATA_PATH + gVal.STR_MasterConfig['MasterUser'] )
				
				wStr = "CLS_Setup: DataBase file create failed: src=" + gVal.DEF_STR_FILE['defDBinfo_File']
				wStr = wStr + " dst=" + gVal.DEF_STR_FILE['DBinfo_File']
				CLS_OSIF.sPrn( wStr  )
				return False
##			
##			wOBJ_DB = CLS_PostgreSQL_Use( gVal.DEF_STR_FILE['DBinfo_File'] )
		
		else :
			###DB接続情報変更
			wStr = "DataBaseの接続情報の更新をおこないます。DataBaseの接続情報の更新をおこないますか?"
			print( wStr )
			wSelect = input( "更新する?(y/N)=> " ).strip()
			if wSelect=="y" :
				wOBJ_DB = CLS_PostgreSQL_Use()
##				if wOBJ_DB.CreateDBdata( gVal.DEF_STR_FILE['DBinfo_File'] )!=True :
				if wOBJ_DB.CreateDBdata( gVal.DEF_STR_FILE['DBinfo_File'], gVal.DEF_STR_FILE['defDBinfo_File'] )!=True :
					##失敗
					CLS_File.sRmtree( gVal.DEF_STR_FILE['MasterConfig_path'] )
					CLS_File.sRmtree( gVal.DEF_USERDATA_PATH + gVal.STR_MasterConfig['MasterUser'] )
					
					wStr = "CLS_Setup: DataBase file create failed: src=" + gVal.DEF_STR_FILE['defDBinfo_File']
					wStr = wStr + " dst=" + gVal.DEF_STR_FILE['DBinfo_File']
					CLS_OSIF.sPrn( wStr  )
					return False
##				
##				wOBJ_DB = CLS_PostgreSQL_Use( gVal.DEF_STR_FILE['DBinfo_File'] )
		
##		#############################
##		# DBの状態チェック
##		wRes = wOBJ_DB.GetIniStatus()
##		if wRes['Result']!=True :
##			###失敗
##			CLS_File.sRmtree( gVal.DEF_STR_FILE['MasterConfig_path'] )
##			CLS_File.sRmtree( gVal.DEF_USERDATA_PATH + gVal.STR_MasterConfig['MasterUser'] )
##			
##			wStr = "CLS_Setup: DB Connect test is failed: " + wRes['Reason']
##			CLS_OSIF.sPrn( wStr  )
##			return False
##		
##		wStr = "テーブルの作成中......" + '\n'
##		print( wStr )
##		#############################
##		# テーブルの作成
##		self.__create_TBL_USER_DATA( wOBJ_DB )
##		self.__create_TBL_TRAFFIC_DATA( wOBJ_DB )
##		self.__create_TBL_WORD_CORRECT( wOBJ_DB )
##		self.__create_TBL_CLAZ_LIST( wOBJ_DB )
##		
##		#############################
##		# DBのクローズ
##		wOBJ_DB.Close()
##		wStr = "作成完了!!  DataBaseから切断しました。" + '\n'
##		print( wStr )
##		
		#############################
		# DBの初期化
		wRes = self.__initDB()
		if wRes!=True :
			###失敗
			CLS_File.sRmtree( gVal.DEF_STR_FILE['MasterConfig_path'] )
			CLS_File.sRmtree( gVal.DEF_USERDATA_PATH + gVal.STR_MasterConfig['MasterUser'] )
			
			wStr = "CLS_Setup: DB Connect test is failed: " + wRes['Reason']
			CLS_OSIF.sPrn( wStr  )
			return False
		
		#############################
		# Twitter接続情報の作成
		wOBJ_Twitter = CLS_Twitter_Use()
		wOBJ_Twitter.CreateTwitter( gVal.DEF_STR_FILE['Twitter_File'], gVal.DEF_STR_FILE['defTwitter_File']  )
		wCLS_Config.CnfTwitter()	#有効無効設定
		
		#############################
		# MasterとBackgroundのbotを起動する
		wRes = wCLS_Botjob.Put( gVal.DEF_CRON_MASTER, gVal.STR_MasterConfig['MasterUser'] )
		if wRes['Result']!=True :
			##失敗
			CLS_File.sRmtree( gVal.DEF_STR_FILE['MasterConfig_path'] )
			CLS_File.sRmtree( gVal.DEF_USERDATA_PATH + gVal.STR_MasterConfig['MasterUser'] )
			
			wStr = "Master botの起動に失敗しました。: " + wRes['Reason']
			CLS_OSIF.sPrn( wStr )
			return False
		
		return True
Exemplo n.º 3
0
	def Delete( self, inFulluser=None ):
		#############################
		# 1件しかない場合か、MasterUserは削除できない
		#   ※1件しかない場合はそれがMasterUserなので
		wList = CLS_UserData.sGetUserList()
		if len(wList)==1 :
			CLS_OSIF.sPrn( "残り1件しかないので、そのユーザは削除できません。" )
			return False
		
		if gVal.STR_MasterConfig['MasterUser']==inFulluser :
			CLS_OSIF.sPrn( "MasterUserは削除できません。" )
			return False
		
		#############################
		# ユーザ名がない場合、名前を入力する
		if inFulluser==None :
			wStr = gVal.STR_SystemInfo['Client_Name'] + " から削除するユーザ名を入力します。" + '\n'
			wStr = wStr + "削除するユーザ名をドメインを含めて入力してください。 例= " + gVal.DEF_EXAMPLE_ACCOUNT
			CLS_OSIF.sPrn( wStr )
			inFulluser = CLS_OSIF.sInp( "User?=> " )
		
		#############################
		# ユーザ名の妥当性チェック
		wSTR_user = CLS_UserData.sUserCheck( inFulluser )
		if wSTR_user['Result']!=True :
			CLS_OSIF.sPrn( wSTR_user['Reason'] )
			return False
		elif wSTR_user['Registed']==False :
			CLS_OSIF.sPrn( "そのユーザは登録されていません。: " + inFulluser )
			return False
		
		#############################
		# 削除の確認
		CLS_OSIF.sPrn( "ユーザデータの削除をおこないます。データの復旧はできません。" )
		wRes = CLS_OSIF.sInp("本当に削除してよろしいでしょうか(y/N)=> " )
		if wRes!="y" :
			CLS_OSIF.sPrn( "削除を中止しました" + '\n' )
			return False
		
		CLS_OSIF.sPrn( '\n' + "データ削除中......(2分かかります)" )
		#############################
		# cron削除
		wCLS_botjib = CLS_Botjob()
		wDelRes = wCLS_botjib.Del( gVal.DEF_CRON_SUB, inFulluser )
		if wDelRes['Result']==True :
			#############################
			# 実行中のcronが処理が終わるまで待機
			CLS_OSIF.sSleep( 120 )
		else :
##			CLS_OSIF.sPrn( "cronの削除に失敗しました: " + wDelRes['Reason'] )
			CLS_OSIF.sPrn( "cronの削除をスキップします: " + wDelRes['Reason'] )
		
		#############################
		# データ削除
		wGetPath = CLS_UserData.sGetUserPath( inFulluser )
		if wGetPath['Result']!=True :
			CLS_OSIF.sPrn( "CLS_Regist: Delete: User path ng: " + wGetPath['Reason'] )
			return False
		
		if CLS_File.sRmtree( wGetPath['Responce'] )!=True :
			CLS_OSIF.sPrn( "CLS_Regist: Delete: Data is not found: " + wGetPath['Responce'] )
			return False
		
		#############################
		# トラヒックの削除
		wRes = self.__delTrafficUser( inFulluser )
		if wRes['Result']!=True :
			CLS_OSIF.sPrn( "CLS_Regist: Delete: " + wRes['Reason'] )
			return False
		if wRes['Update']==True :
			CLS_OSIF.sPrn( "DBからトラヒック情報が削除されました" )
##		else :
##			CLS_OSIF.sPrn( "トラヒックを計測するユーザが切り替わります" )
		
		#############################
		# 完了
		wStr = inFulluser + " のデータは全て削除されました" + '\n'
		wStr = wStr + "mastodon側の認証済みアプリ情報は手で消してください。" + '\n'
		CLS_OSIF.sPrn( wStr )
		return True
Exemplo n.º 4
0
	def Regist( self, inFulluser=None ):
		#############################
		# ユーザ名がない場合、名前を入力する
		if inFulluser==None :
			wStr = gVal.STR_SystemInfo['Client_Name'] + " に新しいユーザ名を入力します。" + '\n'
			wStr = wStr + "登録するユーザ名をドメインを含めて入力してください。 例= " + gVal.DEF_EXAMPLE_ACCOUNT
			CLS_OSIF.sPrn( wStr )
			inFulluser = CLS_OSIF.sInp( "User?=> " )
		
		#############################
		# ユーザ名の妥当性チェック
		wSTR_user = CLS_UserData.sUserCheck( inFulluser )
		if wSTR_user['Result']!=True :
			CLS_OSIF.sPrn( wSTR_user['Reason'] )
			return False
		elif wSTR_user['Registed']==True :
			CLS_OSIF.sPrn( "既に登録されているユーザです。: " + inFulluser )
			return False
		
		#############################
		# メールアドレス、パスワードの入力
		wStr = '\n' + inFulluser + " を登録します。"
		wStr = wStr + "mastodonに登録したメールアドレスとパスワードを入力してください。"
		CLS_OSIF.sPrn( wStr )
		
		###入力受け付け
		wMail = CLS_OSIF.sInp( "Mailaddr: " )
		wPass = CLS_OSIF.sGpp( "Password: "******"mastodon ID: " + inFulluser + '\n'
		wStr = wStr + "Mailaddress: " + wMail
		CLS_OSIF.sPrn( wStr )
		wRes = CLS_OSIF.sInp( "以上の内容で登録します(y/N): " )
		if wRes!="y" :
			CLS_OSIF.sPrn( "登録を中止しました" + '\n' )
			return False
		
		#############################
		# 入力チェック
		wRes = self.__registUser( inFulluser, wMail, wPass )
		if wRes['Result']!=True :
			CLS_OSIF.sPrn( wRes['Reason'] )
			return False
		
		CLS_OSIF.sPrn( '\n' + "通信テスト中..." )
		#############################
		# mastodonアクセス前 ping疎通チェック
		if CLS_OSIF.sPing( wSTR_user['Domain'] )!=True :
			CLS_OSIF.sPrn( "mastodonサーバ " + wSTR_user['Domain'] + " が応答しません。登録を中止します。" )
			return False
		
		CLS_OSIF.sPrn( "通信OK" + '\n' + "データ登録中......" )
		#############################
		# テンプレートデータのコピー(データ作成)
		wGetPath = CLS_UserData.sGetUserPath( inFulluser )
##		if wGetPath['Result']!=True :
##			CLS_OSIF.sPrn( "CLS_Regist: Regist: User path ng: " + wGetPath['Reason'] )
##			return False
		
		if CLS_File.sCopytree(
			gVal.DEF_STR_FILE['defUserdata_path'],
			wGetPath['Responce'] )!=True :
			###ありえない
			CLS_OSIF.sPrn( "CLS_Regist: Regist: defaultデータコピー失敗" )
			return False
		
		if CLS_File.sFolderExist( gVal.DEF_USERDATA_PATH, inFulluser )!=True :
			CLS_OSIF.sPrn( "CLS_Regist: Regist: ユーザデータの登録に失敗しました" )
			return False
		
		#############################
		# mastodonアカウントへの関連付け(本レジスト)
		wRes = self.sRegistMastodon( inFulluser, wMail, wPass )
		if wRes['Result']!=True :
			wStr = "mastodonへの関連付けに失敗しました" + '\n'
			wStr = wStr + "メールアドレス、パスワード、mastodonが運用中か確認してください。" + '\n'
			wStr = wStr + wRes['Reason']
			CLS_OSIF.sPrn( wStr )
			# データ削除
			CLS_File.sRmtree( wGetPath['Responce'] )
			return False
		
		CLS_OSIF.sPrn( "登録OK" + '\n' + "mastodon登録テスト中......" )
		#############################
		# 通信テスト
		wRes = self.CreateMastodon( inFulluser )
		if wRes['Result']!=True :
			wStr = "mastodonへの関連付けに失敗しました" + '\n'
			wStr = wStr + "メールアドレス、パスワード、mastodonが運用中か確認してください。" + '\n'
			wStr = wStr + wRes['Reason']
			CLS_OSIF.sPrn( wStr )
			# データ削除
			CLS_File.sRmtree( wGetPath['Responce'] )
			return False
		
		CLS_OSIF.sPrn( "mastodon登録OK" + '\n' )
		
		#############################
		# cron作成
		if inFulluser == gVal.STR_MasterConfig['MasterUser'] :
			wKind = gVal.DEF_CRON_MASTER
		else:
			wKind = gVal.DEF_CRON_SUB
		
		wCLS_botjib = CLS_Botjob()
		wPutRes = wCLS_botjib.Put( wKind, inFulluser )
		if wPutRes['Result']!=True :
##			CLS_OSIF.sPrn( "CLS_Regist: Regist: cron create failed: " + wPutRes['Reason'] )
##			return False
##		
##		CLS_OSIF.sPrn( '\n' + "cronを起動しました" )
			CLS_OSIF.sPrn( "cronの起動に失敗しました: " + wPutRes['Reason'] )
		else :
			CLS_OSIF.sPrn( '\n' + "cronを起動しました" )
		
		#############################
		# トラヒックの登録
		wRes = self.__regTrafficUser( inFulluser )
		if wRes['Result']!=True :
			CLS_OSIF.sPrn( "CLS_Regist: Regist: " + wRes['Reason'] )
			return False
		if wRes['Update']==True :
			CLS_OSIF.sPrn( "DBにトラヒック情報が追加されました" )
		
		#############################
		# 完了
		CLS_OSIF.sPrn( inFulluser + " の登録が完了しました" + '\n' )
		return True
Exemplo n.º 5
0
class CLS_Bot_Ctrl():
    #####################################################

    OBJ_Job = ""
    UserList = {}
    WaitRestart = []
    FLG_AllStop = False
    FLG_On = False

    #####################################################
    # 初期化
    #####################################################
    def __init__(self):
        #############################
        # ジョブクラスの生成
        self.OBJ_Job = CLS_Botjob()

        #############################
        # ユーザ一覧取得
        wUserList = CLS_UserData.sGetUserList()

        #############################
        # クラス変数に辞書型として納める
        self.UserList = {}
        for wUser in wUserList:
            self.UserList.update({wUser: False})

##		###バックグラウンドユーザの追加
##		self.UserList.update({ gVal.DEF_CRON_ACCOUNT_BACKGROUND : False })
        return

#####################################################
# ぼっと起動
#####################################################

    def __start(self):
        #############################
        # 全停止の場合は、再開処理にする
        #  =再開コマンド
        if self.FLG_AllStop == True:
            self.__reStart()
            return

        #############################
        # ユーザ名の入力
        wStr = "bot起動するユーザ名をドメインを含める形で入力してください。"
        CLS_OSIF.sPrn(wStr)
        wUser = CLS_OSIF.sInp("User?=> ")

        #############################
        # ユーザ名の確認
        wKeylist = self.UserList.keys()
        if wUser not in wKeylist:
            wStr = "登録のないユーザです。[RT]"
            CLS_OSIF.sInp(wStr)
            return

        if self.UserList[wUser] == True:
            wStr = "既に起動してます。[RT]"
            CLS_OSIF.sInp(wStr)
            return

        #############################
        # 種別の設定
        wKind = self.__getKind(wUser)

        #############################
        # ジョブの作成
        wRes = self.OBJ_Job.Put(wKind, wUser)

        #############################
        # 結果
        if wRes['Result'] == True:
            ###成功
            wStr = "cronに登録成功しました。"
            CLS_OSIF.sPrn(wStr)
        else:
            ###失敗
            wStr = "cronへの登録が失敗しました。 Reason: " + wRes['Reason']
            CLS_OSIF.sPrn(wStr)

        CLS_OSIF.sInp("確認したらリターンキーを押してください。[RT]")
        return

#####################################################
# ぼっと停止
#####################################################

    def __stop(self):
        #############################
        # ユーザ名の入力
        wStr = "bot停止するユーザ名をドメインを含める形で入力してください。"
        CLS_OSIF.sPrn(wStr)
        wUser = CLS_OSIF.sInp("User?=> ")

        #############################
        # ユーザ名の確認
        wKeylist = self.UserList.keys()
        if wUser not in wKeylist:
            wStr = "登録のないユーザです。[RT]"
            CLS_OSIF.sInp(wStr)
            return

        if self.UserList[wUser] == False:
            wStr = "既に停止してます。[RT]"
            CLS_OSIF.sInp(wStr)
            return

        #############################
        # 種別の設定
        wKind = self.__getKind(wUser)

        #############################
        # ジョブの削除
        wRes = self.OBJ_Job.Del(wKind, wUser)

        #############################
        # 結果
        if wRes['Result'] == True:
            ###成功
            wStr = "cronを削除しました。2分以内にはbotが止まります。"
            CLS_OSIF.sPrn(wStr)
        else:
            ###失敗
            wStr = "cronの削除が失敗しました。 Reason: " + wRes['Reason']
            CLS_OSIF.sPrn(wStr)

        CLS_OSIF.sInp("確認したらリターンキーを押してください。[RT]")
        return

#####################################################
# 全ぼっと停止
#####################################################

    def __allStop(self):
        #############################
        # フラグの確認
        if self.FLG_AllStop == True:
            ###ありえない
            wStr = "CLS_Bot_Ctrl: __allStop: FLG_AllStop flag contradiction" + '\n'
            wStr = wStr + "フラグをリセットしました。再度やり直してください。[RT]"
            CLS_OSIF.sInp(wStr)
            self.FLG_AllStop = False
            return False

        #############################
        # 起動中のbotがあるか
        # あれば停止していく
        self.WaitRestart = []
        wKeylist = self.UserList.keys()
        for wUser in wKeylist:
            if self.UserList[wUser] == True:
                #############################
                # 種別の設定
                wKind = self.__getKind(wUser)

                #############################
                # ジョブの削除
                wRes = self.OBJ_Job.Del(wKind, wUser)
                if wRes['Result'] != True:
                    ###失敗
                    wStr = "cronの削除が失敗しました。 User:"******" Reason: " + wRes[
                        'Reason']
                    CLS_OSIF.sPrn(wStr)
                    continue

                self.WaitRestart.append(wUser)

        #############################
        # 処理結果
        if len(self.WaitRestart) == 0:
            wStr = "停止したbotはありませんでした。[RT]"
            CLS_OSIF.sInp(wStr)
            return False

        wStr = "起動中のbotを停止しました。[RT]"
        CLS_OSIF.sInp(wStr)
        self.FLG_AllStop = True
        return True

#####################################################
# 全ぼっと起動
#####################################################

    def __allRun(self):
        #############################
        # フラグの確認
        if self.FLG_On == True:
            ###ありえない
            wStr = "CLS_Bot_Ctrl: __allStop: __allRun flag contradiction" + '\n'
            wStr = wStr + "フラグをリセットしました。再度やり直してください。[RT]"
            CLS_OSIF.sInp(wStr)
            self.FLG_On = False
            return

        #############################
        # 起動中のbotがあるか
        # あれば停止していく
        wKeylist = self.UserList.keys()
        for wUser in wKeylist:
            #############################
            # 種別の設定
            wKind = self.__getKind(wUser)

            #############################
            # ジョブの登録
            wRes = self.OBJ_Job.Put(wKind, wUser)
            if wRes['Result'] != True:
                ###失敗
                wStr = "cronの登録が失敗しました。 User:"******" Reason: " + wRes[
                    'Reason']
                CLS_OSIF.sPrn(wStr)
                continue

        self.WaitRestart = []

        #############################
        # 処理結果
        wStr = "全botを起動しました。[RT]"
        CLS_OSIF.sInp(wStr)
        self.FLG_AllStop = False
        return

#####################################################
# 再開
#####################################################

    def __reStart(self):
        #############################
        # コマンド受かったので一回フラグを落とす
        self.FLG_AllStop = False

        #############################
        # 再開待ちリストで再開中のユーザを起動していく
        wFLG_Start = False
        for wUser in self.WaitRestart:
            #############################
            # 種別の設定
            wKind = self.__getKind(wUser)

            #############################
            # ジョブの作成
            wRes = self.OBJ_Job.Put(wKind, wUser)
            if wRes['Result'] != True:
                ###失敗
                wStr = "cronの作成が失敗しました。 User:"******" Reason: " + wRes[
                    'Reason']
                CLS_OSIF.sPrn(wStr)
                continue

            wFLG_Start = True

        #############################
        # 処理結果
        if wFLG_Start == False:
            ###ジョブ作成失敗以外はありえない
            wStr = "起動したbotはありませんでした。[RT]"
            CLS_OSIF.sInp(wStr)
            return

        wStr = "起動中だったbotを再開しました。[RT]"
        CLS_OSIF.sInp(wStr)
        return

#####################################################
# 種別の取得
#####################################################

    def __getKind(self, inFulluser):
        #############################
        # 種別の設定
        if inFulluser == gVal.STR_MasterConfig['MasterUser']:
            wKind = gVal.DEF_CRON_MASTER

##		elif inFulluser==gVal.DEF_CRON_ACCOUNT_BACKGROUND :
##			wKind = gVal.DEF_CRON_BACK

        else:
            wKind = gVal.DEF_CRON_SUB

        return wKind

#####################################################
# コマンド実行
#####################################################

    def __runCommand(self, inCommand):
        #############################
        # 起動 or 再開
        if inCommand == "\\r":
            self.__start()

        #############################
        # 停止
        elif inCommand == "\\s":
            self.__stop()

        #############################
        # 全停止
        elif inCommand == "\\as":
            self.__allStop()

        #############################
        # 全起動
        elif inCommand == "\\ar":
            self.__allRun()

        return

#####################################################
# ぼっとコンソール
#####################################################

    def Console(self):
        while True:
            wCommand = self.__consoleViewList()
            if wCommand.find("\\q") >= 0:
                ###終了
                break

            self.__runCommand(wCommand)

        return

#####################################################

    def __consoleViewList(self):
        #############################
        # List取得
        wRes = self.OBJ_Job.GetList()
        if wRes['Result'] != True:
            return False
        ## wRes['Responce']['List']:

        #############################
        # ヘッダ
        wStr = "--------------------" + '\n'
        wStr = wStr + " bot一覧 (crontab)" + '\n'
        wStr = wStr + "--------------------" + '\n'

        #############################
        # 内容
        #   crontabにユーザが登録されていれば *ON
        #   crontabにユーザが未登録なら        OFF
        self.FLG_On = False
        wKeylist = self.UserList.keys()
        for wUser in wKeylist:
            wFlg_Online = False
            for wJob in wRes['Responce']['List']:
                if wJob.find(wUser) >= 0:
                    wFlg_Online = True

            if wFlg_Online == True:
                self.UserList[wUser] = True
                wStat = "*ON "
                self.FLG_On = True
            else:
                self.UserList[wUser] = False
                wStat = " OFF"

            wStr = wStr + "    " + wStat + "    " + wUser + '\n'

        #############################
        # コマンド見本
##		if self.FLG_AllStop==False :
##			wStr = wStr + "コマンド= [\\q] 終了 / [\\r] 起動 / [\\s] 停止 / [\\as] 全停止" + '\n'
##		else:
##			wStr = wStr + "コマンド= [\\q] 終了 / [\\r] 再開" + '\n'
        if self.FLG_On == True:
            if self.FLG_AllStop == False:
                wStr = wStr + "コマンド= [\\q] 終了 / [\\r] 起動 / [\\s] 停止 / [\\as] 全停止" + '\n'
            else:
                wStr = wStr + "コマンド= [\\q] 終了 / [\\r] 再開" + '\n'

        else:
            ###どこも起動してない場合
            wStr = wStr + "コマンド= [\\q] 終了 / [\\r] 再開 / [\\ar] 全起動" + '\n'

        #############################
        # 出力
        CLS_OSIF.sDispClr()
        CLS_OSIF.sPrn(wStr)

        #############################
        # コマンド
        wCommand = CLS_OSIF.sInp("コマンド?=> ")
        return wCommand

#####################################################
# cron全停止 ※コンソール外
#####################################################

    def CronAllStop(self):
        #############################
        # List取得
        wRes = self.OBJ_Job.GetList()
        if wRes['Result'] != True:
            return False

        #############################
        # 登録ユーザのうちcrontabに登録されているものを True とする
        self.FLG_On = False
        wKeylist = self.UserList.keys()
        for wUser in wKeylist:
            wFlg_Online = False
            for wJob in wRes['Responce']['List']:
                if wJob.find(wUser) >= 0:
                    wFlg_Online = True

            if wFlg_Online == True:
                self.UserList[wUser] = True
                self.FLG_On = True
            else:
                self.UserList[wUser] = False

        #############################
        # 全停止を実行する
        wRes = self.__allStop()
        ## True= 停止あり
        ## False= 停止なし

        return wRes

#####################################################
# 全再開 ※コンソール外
#####################################################

    def CronReStart(self):
        #############################
        # 全停止したcronを再実行する
        self.__reStart()

        return True
Exemplo n.º 6
0
    def Run(self):
        #############################
        # 応答形式の取得
        #   "Result" : False, "Reason" : None, "Responce" : None
        wRes = CLS_OSIF.sGet_Resp()

        #############################
        # 引数取得
        wArg = CLS_OSIF.sGetArg()
        if len(wArg) == 3:  #テストモードか
            if wArg[2] == gVal.DEF_TEST_MODE:
                gVal.FLG_Test_Mode = True

        elif len(wArg) != 2:  #引数が足りない
            wStr = "CLS_CronTest: Argument deficiency: argument=" + str(wArg)
            CLS_OSIF.sPrn(wStr)  #メールに頼る
            return wRes

        wKind = wArg[0]
        wAccount = wArg[1]

        ##		#############################
        ##		# Backgroundのチェックは別でやる
        ##		if wKind==gVal.DEF_CRON_BACK and wAccount==gVal.DEF_CRON_ACCOUNT_BACKGROUND :
        ##			wRes = self.__backgroundTest( outRes=wRes )
        ##			return wRes

        #############################
        # 1.jobチェック
        #     実行ファイルチェック
        #     ユーザ登録チェック(Master、Subの場合)
        wCLS_Botjob = CLS_Botjob()
        wRes = wCLS_Botjob.isJob(wKind, wAccount)
        if wRes['Result'] != True:
            wStr = "CLS_CronTest: Job check NG: " + wRes['Reason']
            CLS_OSIF.sPrn(wStr)  #メールに頼る
            return wRes

        if wRes['Responce']['isJob'] == False and gVal.FLG_Test_Mode == False:
            ##			wStr = "CLS_CronTest: Job is not found: kind=" + wKind + ": account=" + wAccount
            wStr = "CLS_CronTest: Job is not found: kind=" + wKind + ": account=" + wAccount + " current: " + CLS_OSIF.sGetCwd(
            )
            CLS_OSIF.sPrn(wStr)  #メールに頼る

            wRes['Result'] = False  #テストはNG
            return wRes

        wFlg_ok = True
        #############################
        # 2.データフォルダのチェック
        if CLS_File.sExist(gVal.DEF_USERDATA_PATH) != True:
            wFlg_ok = False

        #############################
        # 3.Master環境情報の読み込み
        if CLS_Config.sGetMasterConfig() != True:
            wFlg_ok = False

        #############################
        # Master環境情報に異常はないか
        if wFlg_ok == False:
            ##			wRes = wCLS_Botjob.Stop()	#全cronを削除する
            ##			if wRes['Result']!=True :
            ##				wStr = "CLS_CronTest: Cron stop failed: " + wRes['Reason']
            ##				CLS_OSIF.sPrn( wStr  )	#メールに頼る
            ##
            ##			wStr = "Master環境情報に異常があったため、" + gVal.STR_SystemInfo['Client_Name']
            ##			wStr = wStr + "で登録した全cronを停止しました。"
            wStr = "Master環境情報に異常があったため、処理を中止します。"
            CLS_OSIF.sPrn(wStr)  #メールに頼る

            wRes['Result'] = False  #テストはNG
            return wRes

        #############################
        # 4.Userフォルダチェック
        wRes = CLS_UserData.sGetUserPath(wAccount)
        if wRes['Result'] != True:
            wRes = wCLS_Botjob.Del(wKind, wAccount)  #cronを削除する
            if wRes['Result'] != True:
                wStr = "CLS_CronTest: Cron delete failed: " + wRes['Reason']
                CLS_OSIF.sPrn(wStr)  #メールに頼る

            wStr = "Userフォルダが存在しないため、" + wAccount
            wStr = wStr + "のcronを停止しました。"
            CLS_OSIF.sPrn(wStr)  #メールに頼る

            wRes['Result'] = False  #テストはNG
            return wRes

        wUserPath = wRes['Responce']

        ##		#############################
        ##		# 5.User環境情報の読み込み
        ##		wRes = CLS_Config.sGetUserConfig( wAccount )
        ##		if wRes['Result']!=True :
        ##			wRes = wCLS_Botjob.Del( wKind, wAccount )	#cronを削除する
        ##			if wRes['Result']!=True :
        ##				wStr = "CLS_CronTest: Cron delete failed: " + wRes['Reason']
        ##				CLS_OSIF.sPrn( wStr  )	#メールに頼る
        ##
        ##			wStr = "User環境情報に異常があったため、" + wAccount
        ##			wStr = wStr + "のcronを停止しました。"
        ##			CLS_OSIF.sPrn( wStr  )		#メールに頼る
        ##
        ##			wRes['Result'] = False	#テストはNG
        ##			return wRes

        #############################
        # 5.実行権限チェック
        wFlg_Authority = True
        #############################
        # コマンドの組み立て
        if wKind == gVal.DEF_CRON_MASTER:  # Masuer User以外か
            if wAccount != gVal.STR_MasterConfig['MasterUser']:
                wFlg_Authority = False

##		elif wKind==gVal.DEF_CRON_BACK :	# Background以外か
##			if wAccount!=gVal.DEF_CRON_ACCOUNT_BACKGROUND :
##				wFlg_Authority = False

        elif wKind == gVal.DEF_CRON_SUB:  # Sub以外か
            ##			if wAccount==gVal.STR_MasterConfig['MasterUser'] or \
            ##			   wAccount==gVal.DEF_CRON_ACCOUNT_BACKGROUND :
            if wAccount == gVal.STR_MasterConfig['MasterUser']:
                wFlg_Authority = False

        else:
            ###ここではありえない
            wFlg_Authority = False

        if wFlg_Authority == False:
            wRes = wCLS_Botjob.Del(wKind, wAccount)  #cronを削除する
            if wRes['Result'] != True:
                wStr = "CLS_CronTest: Cron delete failed: " + wRes['Reason']
                CLS_OSIF.sPrn(wStr)  #メールに頼る

            wStr = "実行権限に問題があったため、" + wAccount
            wStr = wStr + "のcronを停止しました。"
            CLS_OSIF.sPrn(wStr)  #メールに頼る

            wRes['Result'] = False  #テストはNG
            return wRes

        # ここまででtestは合格してる
        #############################

        #############################
        # 6.testログ
        self.__testLog(wKind, wAccount)

        wRes['Responce'] = {}
        wRes['Responce'].update({
            "Kind": wKind,
            "Account": wAccount,
            "User_path": wUserPath
        })
        wRes['Result'] = True
        return wRes
Exemplo n.º 7
0
    def __cnfMasterUser(self, inFulluser):
        wCLS_botjib = CLS_Botjob()
        #############################
        # cronの再登録
        if gVal.STR_MasterConfig['MasterUser'] != "":
            wDelRes = wCLS_botjib.Del(gVal.DEF_CRON_MASTER,
                                      gVal.STR_MasterConfig['MasterUser'])
            if wDelRes['Result'] != True:
                ##				return False
                CLS_OSIF.sPrn("cronの削除をスキップしました: user="******" : " +
                              wDelRes['Reason'])

            wDelRes = wCLS_botjib.Del(gVal.DEF_CRON_SUB, inFulluser)
            if wDelRes['Result'] != True:
                ##				return False
                CLS_OSIF.sPrn("cronの削除をスキップしました: user="******" : " +
                              wDelRes['Reason'])

            #############################
            # 実行中のcronが処理が終わるまで待機
            wStr = '\n' + "cronの切替中(2分かかります)......" + '\n'
            CLS_OSIF.sPrn(wStr)
            CLS_OSIF.sSleep(120)

            wDelRes = wCLS_botjib.Put(gVal.DEF_CRON_MASTER, inFulluser)
            if wDelRes['Result'] != True:
                CLS_OSIF.sPrn("cronの登録が失敗しました: user="******" : " +
                              wDelRes['Reason'])
                return False

            wDelRes = wCLS_botjib.Put(gVal.DEF_CRON_SUB,
                                      gVal.STR_MasterConfig['MasterUser'])
            if wDelRes['Result'] != True:
                CLS_OSIF.sPrn("cronの登録が失敗しました: user="******" : " +
                              wDelRes['Reason'])
                return False

        #############################
        # 変更&反映
        wOldMaster = gVal.STR_MasterConfig['MasterUser']
        gVal.STR_MasterConfig['MasterUser'] = inFulluser
        wRes = self.sSetMasterConfig()
        if wRes != True:
            return False

        #############################
        # トラヒック計測ユーザの場合、切替る
        if CLS_UserData.sChangeTrafficUser(inFulluser) != True:
            CLS_OSIF.sPrn("トラヒック計測ユーザの切替が失敗しました: user="******" master=" + gVal.STR_MasterConfig['MasterUser'])
##			return False

        wStr = inFulluser + " をMasterUserに設定しました。" + '\n'
        wStr = wStr + "このユーザをmastodon上でbotとして動作させます。" + '\n'
        wStr = wStr + "Master環境情報をセーブしました: " + gVal.DEF_STR_FILE[
            'MasterConfig'] + '\n'
        CLS_OSIF.sPrn(wStr)
        CLS_OSIF.sInp("確認したらリターンキーを押してください。[RT]")
        return True