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 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
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
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
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
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
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