def haopan_charts(sakuya_db): try: prod = int(request.params['prod']) cities = [int(i) for i in request.params['cities'].split(',')] channels = [int(i) for i in request.params['channels'].split(',')] entries = [int(i) for i in request.params['entries'].split(',')] charts = [int(i) for i in request.params['charts'].split(',')] except Exception: return util.output('error', msg='Invalid parameters.') d_charts = haopan.get_charts() chart_list = [] for k, v in d_charts.iteritems(): if k[0] == prod\ and k[1] in charts\ and k[2] in cities\ and k[3] in channels\ and k[4] in entries: titles = [] if k[2]: titles.append(haopan.D_CITIES[k[2]]) if k[3]: titles.append(haopan.D_CHANNELS[k[3]]) if k[4]: titles.append(haopan.D_ENTRIES[k[4]]) titles.append(haopan.D_CHARTS_DISPLAY[k[1]]) if k[1] == 2: k_ = list(k); k_[1] = 3; k_ = tuple(k_) if k_ in d_charts: chart_list.append((' - '.join(titles), '%d/%d' % (v, d_charts[k_]))) else: chart_list.append((' - '.join(titles), v)) else: chart_list.append((' - '.join(titles), v)) return util.output('ok', charts=chart_list)
def stats(self): if not self.data: return try: rows = haopan.fill_data(self.data) logging.info('stats time: %s' % self.next_dt.strftime('%Y-%m-%d %H:%M')) d_charts = haopan.get_charts(True) stats = [0, 0] for k, v in rows.iteritems(): id = d_charts.get(k) if id is None: logging.info('key %s not found.' % str(k)) stats[1] += 1 continue row = ChartdataTmpl.gen(self.next_dt.strftime('%Y%m%d'))() row.ds_id = id row.time = self.next_dt row.data = v self.sakuya_db.add(row) stats[0] += 1 logging.info('key: %s, id: %d, data: %d' % (str(k), id, v)) self.sakuya_db.commit() logging.info('%d rows inserted, %d failed.' % tuple(stats)) except Exception: self.sakuya_db.rollback() logging.exception('Fail to stats') self.stats_extra()