def create_monitors(self): """モニタのリストを作成する Returns: list: モニタのリスト """ # 現在日時でのコミュニティ階層構造を取得する outline = community_outline( datetime.datetime.now(datetime.timezone.utc)) result = [] # コミュニティごとに for community in outline.get('communities', {}).values(): # クラスタごとに for cluster in community.get('clusters', {}).values(): community_id = community.get('id') cluster_id = cluster.get('id') # 有効 ? if config.is_active(community_id, cluster_id, self.type()): units = cluster.get('units') # ユニットが 1 つ以上定義されている ? if units: # モニタを作成しリストに追加 m = Monitor(community_id, cluster_id) result.append(m) return result
def do_all(): """一回の集計処理 全コミュニティ中の全クラスタに対し, 新しいスレッドを作成し, do_units() を実行する. """ unit_data_fetch_limit = settings.DOWNTIME['unit_data_fetch_limit'] data_loss_tolerance_sec = settings.DOWNTIME['data_loss_tolerance_sec'] logger.debug('**** downtime.job unit_data_fetch_limit : {}'.format( unit_data_fetch_limit)) logger.debug('**** downtime.job data_loss_tolerance_sec : {}'.format( data_loss_tolerance_sec)) outline = community_outline() threads = [] for community in outline.get('communities', {}).values(): for cluster in community.get('clusters', {}).values(): units = cluster.get('units') if units: t = Thread(target=do_units, args=(units.values(), unit_data_fetch_limit, data_loss_tolerance_sec), name='downtime.job.units') t.daemon = False threads.append(t) for t in threads: t.start() for t in threads: t.join()