コード例 #1
0
ファイル: notify.py プロジェクト: dkcira/redis-uni
def print_statistics(stop_event):
    """Thread that prints current event statsistics."""
    from binascii import hexlify
    sum_key = keynamehelper.create_key_name("sales_summary")
    print("\n === START")
    print("{:8} | {:12} | {:3} |  Histogram by hour".format(
        "T/S", "Event", "#"),
          end=' ')
    while not stop_event.is_set():
        ts = time.strftime("%H:%M:%S")
        e_key = keynamehelper.create_key_name("event", "*")
        for event in redis.scan_iter(match=e_key):
            (_, event_sku) = event.rsplit(":", 1)
            field_key = keynamehelper.create_field_name(
                event_sku, "total_tickets_sold")
            t_tickets = redis.hget(sum_key, field_key)
            t_tickets = int(t_tickets) if t_tickets != None else 0
            tod_hist_key = keynamehelper.create_key_name(
                "sales_histogram", "time_of_day", event_sku)
            hist = redis.get(tod_hist_key)
            if hist != None:
                hist_vals = [hist[i:i + 2] for i in range(0, len(hist), 2)]
                print("\n{:8} | {:12} | {:3d} | ".format(
                    ts, event_sku, t_tickets),
                      end=' ')
                for i in range(0, 24):
                    num = int(hexlify(hist_vals[i].encode(
                        encoding='utf-8')), 16) if i < len(hist_vals) else 0
                    print("{:02d}/{:03d}".format(i, num), end=' ')
        time.sleep(1)
    print("\n === END")
コード例 #2
0
def create_event(event,
                 venue,
                 capacity=None,
                 geo=None,
                 add_faceted_search=False,
                 add_hashed_search=False,
                 add_seatmap=False):
    """Create event details"""
    sku = redisu.ru101.common.generate.sku()
    p.sadd(create_key_name("events"), sku)
    p.sadd(create_key_name("event", "skus", event), sku)
    p.sadd(create_key_name("venues", sku), venue)
    attrs = {
        'name': event,
        'venue': venue,
        'medal_event': fake.random_element((True, False)),
        'disabled_access': fake.random_element((True, False))
    }
    if capacity is not None:
        event_capacity = random.randint(capacity / 10, capacity / 2)
        attrs['capacity'] = event_capacity
        tiers_availbale = random.randint(1, 3)
        tier_capacity = int(round(event_capacity / tiers_availbale))
        for k in range(tiers_availbale, 0, -1):
            attrs[create_field_name('available',
                                    ticket_tiers[k])] = tier_capacity
            attrs[create_field_name('price', ticket_tiers[k])] =\
              random.randint(10 * (k+1), 10 * (k+1) + 9)
        p.hmset(create_key_name("event", sku), attrs)
        if add_seatmap:
            create_seatmap(sku, tiers_availbale, tier_capacity)
    attrs['sku'] = sku
    if geo is not None:
        p.geoadd(create_key_name("geo", "venues", venue), geo['long'],
                 geo['lat'], venue)
        p.geoadd(create_key_name("geo", "events", event), geo['long'],
                 geo['lat'], venue)
    if add_faceted_search:
        create_faceted_search(attrs)
    if add_hashed_search:
        create_hashed_search(attrs)
    events.append(sku)
    return attrs
コード例 #3
0
ファイル: notify.py プロジェクト: redislabs-training/ru101
def listener_events_analytics(channel):
  """Listener to summarize total sales by ticket numbers and order value."""
  l = redis.pubsub(ignore_subscribe_messages=True)
  c_key = keynamehelper.create_key_name(channel)
  l.subscribe(c_key)
  p = redis.pipeline()
  for message in l.listen():
    order_id = message['data']
    so_key = keynamehelper.create_key_name("sales_order", order_id)
    (cost, qty, event_sku) = redis.hmget(so_key, 'cost', 'qty', 'event')
    so_set_key = keynamehelper.create_key_name("sales", event_sku)
    p.sadd(so_set_key, order_id)
    sum_key = keynamehelper.create_key_name("sales_summary")
    p.hincrbyfloat(sum_key,
                   keynamehelper.create_field_name(event_sku, "total_sales"),
                   cost)
    p.hincrby(sum_key,
              keynamehelper.create_field_name(event_sku, "total_tickets_sold"),
              qty)
    p.execute()
コード例 #4
0
ファイル: notify.py プロジェクト: dkcira/redis-uni
def listener_ceremony_alerter(channel):
    """Listener that looks for either 'Opening Ceremony' or 'Closing Ceremony'
  events only. If then tracks a Lottery content, award a prize for every 5th
  order for this event only."""
    l = redis.pubsub(ignore_subscribe_messages=True)
    c_key = keynamehelper.create_key_name(channel, "*Ceremony")
    l.psubscribe(c_key)
    for message in l.listen():
        order_id = message['data']
        _, event = message['channel'].rsplit(":", 1)
        sum_key = keynamehelper.create_key_name("sales_summary")
        field_key = keynamehelper.create_field_name(event, "total_orders")
        total_orders = redis.hincrby(sum_key, field_key, 1)
        if total_orders % 5 == 0:
            print("===> Winner!!!!! Ceremony Lottery - Order Id: {}"\
              .format(order_id))
コード例 #5
0
def create_orders(num_customers, max_orders_per_customer=20):
  """Create orders"""
  import time
  import datetime
  for _ in range(num_customers):
    print('.', end='', flush=True)
    num_orders = random.randint(1, max_orders_per_customer)
    customer_id = customers[random.randint(0, len(customers)-1)]
    customer_name = redis.hget(create_key_name("customer", customer_id),
                               "customer_name")
    for _ in range(num_orders):
      order_id = redisu.ru101.common.generate.order_id()
      event_sku = events[random.randint(0, len(events)-1)]
      for k in range(len(ticket_tiers)-1, 0, -1):
        event_k = create_key_name("event", event_sku)
        ticket_tier = ticket_tiers[k]
        if redis.hexists(event_k, create_field_name("available", ticket_tier)):
          price = float(redis.hget(event_k,
                                   create_field_name("price", ticket_tier)))
          abailable = int(redis.hget(event_k,
                                      create_field_name("available",
                                                        ticket_tier)))
          event_name = redis.hget(event_k, "name")
          if abailable > 1:
            qty = random.randint(1, min(75, abailable // 2))
          elif abailable == 1:
            qty = 1
          else:
            continue
          res = find_seats(event_sku, ticket_tiers[k], qty)
          ts = int(time.time())
          qty_allocated = res['assigned']
          order_total = qty_allocated * price
          purchase = {'customer': customer_id,
                      'customer_name': customer_name,
                      'order_id': order_id,
                      'event': event_sku,
                      'event_name': event_name,
                      'tier': ticket_tiers[k],
                      'qty': qty_allocated,
                      'cost': order_total,
                      'seats' : str(res['seats']),
                      'ts': ts}
          p.hmset(create_key_name("sales_order", order_id), purchase)
          inv = {'customer': customer_id,
                 'order_date': ts,
                 'due_date': str(datetime.date.fromtimestamp(ts) +
                             datetime.timedelta(days=90)),
                 'amount_due': order_total,
                 'status': "Invoiced"}
          p.hmset(create_key_name("invoice", order_id), inv)
          p.rpush(create_key_name("invoices", customer_id), order_id)
          p.zadd(create_key_name("invoice_totals"), {order_id: order_total})
          p.hincrby(create_key_name("event", event_sku),
                    create_field_name("available", ticket_tiers[k]),
                    -qty_allocated)
          p.sadd(create_key_name("event", event_sku, "sales_orders"),
                 order_id)
          sum_key = create_key_name("sales_summary", event_name)
          p.hincrbyfloat(sum_key, "total_sales", order_total)
          p.hincrby(sum_key, "total_tickets_sold", qty_allocated)
          p.hincrbyfloat(sum_key,
                         create_field_name("total_sales", ticket_tiers[k]),
                         order_total)
          p.hincrby(sum_key,
                    create_field_name("total_tickets_sold", ticket_tiers[k]),
                    qty_allocated)
          sum_key = create_key_name("sales_summary")
          p.hincrbyfloat(sum_key, "total_sales", order_total)
          p.hincrby(sum_key, "total_tickets_sold", qty_allocated)
          p.hincrbyfloat(sum_key,
                         create_field_name("total_sales", ticket_tiers[k]),
                         order_total)
          p.hincrby(sum_key,
                    create_field_name("total_tickets_sold", ticket_tiers[k]),
                    qty_allocated)
          p.execute()
          break