Esempio n. 1
0
    def _make_pay(self, data: dict) -> Response:
        trade_point = safe_int(data.get("TRADE_POINT"))
        receipt_num = safe_int(data.get("RECEIPT_NUM"))
        pay_account = data.get("PAY_ACCOUNT")
        pay_id = data.get("PAY_ID")
        pay_amount = safe_float(data.get("PAY_AMOUNT"))
        customer = Customer.objects.get(username=pay_account,
                                        sites__in=[self.request.site])
        pays = AllTimePayLog.objects.filter(pay_id=pay_id)
        if pays.exists():
            return self._bad_ret(-100, "Pay already exists")

        with transaction.atomic():
            customer.add_balance(
                profile=None,
                cost=pay_amount,
                comment=f"{self._lazy_object.title} {pay_amount:.2f}")
            customer.save(update_fields=("balance", ))

            AllTimePayLog.objects.create(
                customer=customer,
                pay_id=pay_id,
                sum=pay_amount,
                trade_point=trade_point,
                receipt_num=receipt_num,
                pay_gw=self._lazy_object,
            )
        customer_check_service_for_expiration(customer_id=customer.pk)
        return Response({
            "pay_id": pay_id,
            "service_id": data.get("SERVICE_ID"),
            "amount": round(pay_amount, 2),
            "status_code": 22,
            "time_stamp": self.current_date,
        })
Esempio n. 2
0
 def get_chart_data(self, request):
     customer_id = safe_int(request.query_params.get("customer_id"))
     start_time = safe_float(request.query_params.get("start_time"))
     end_date = safe_float(request.query_params.get("end_date"))
     if 0 in [customer_id, start_time]:
         return Response("customer_id and start_date is required",
                         status=status.HTTP_403_FORBIDDEN)
     if end_date <= 0:
         end_date = None
     customer_id = customer_id if customer_id > 0 else 0
     start_date = start_time if start_time > 0 else 0
     charts = TrafficArchiveModel.objects.get_chart_data(
         customer_id=customer_id,
         start_date=datetime.fromtimestamp(start_date),
         end_date=datetime.fromtimestamp(end_date) if end_date else None,
     )
     return Response(charts)
Esempio n. 3
0
    def scan_onu_list(self) -> Generator[ONUdevPort, None, None]:
        """
        If fast operation then just return tuple.
        If long operation then return the generator of ports count first,
        then max chunk size, and ports in next in generations
        """
        # numbers
        # fiber_nums = (safe_int(i) for i in self.get_list('.1.3.6.1.4.1.3320.101.6.1.1.1'))
        # numbers
        fiber_onu_counts = self.get_list(".1.3.6.1.4.1.3320.101.6.1.1.2")

        # comma separated strings, remember to remove empty elements
        fiber_onu_id_nums = self.get_list_keyval(
            ".1.3.6.1.4.1.3320.101.6.1.1.23")

        # All onu's count
        yield sum(safe_int(i) for i in fiber_onu_counts)

        # chunk max size
        yield 200

        try:
            for fiber_onu_num, fiber_id in fiber_onu_id_nums:
                for onu_num in fiber_onu_num.split(b","):
                    if not onu_num:
                        continue
                    onu_num = safe_int(onu_num)
                    if onu_num == 0:
                        continue
                    status = safe_int(
                        self.get_item(".1.3.6.1.4.1.3320.101.10.1.1.26.%d" %
                                      onu_num))
                    signal = safe_float(
                        self.get_item(".1.3.6.1.4.1.3320.101.10.5.1.5.%d" %
                                      onu_num))
                    mac = self.get(".1.3.6.1.4.1.3320.101.10.1.1.3.%d" %
                                   onu_num)
                    yield ONUdevPort(
                        num=onu_num,
                        name=self.get_item(".1.3.6.1.2.1.2.2.1.2.%d" %
                                           onu_num),
                        status=status == 3,
                        mac=macbin2str(mac.value),
                        signal=signal / 10 if signal else "—",
                        uptime=safe_int(
                            self.get_item(".1.3.6.1.2.1.2.2.1.9.%d" %
                                          onu_num)),
                        fiberid=safe_int(fiber_id),
                    )
        except EasySNMPTimeoutError as e:
            raise EasySNMPTimeoutError("{} ({})".format(
                gettext("wait for a reply from the SNMP Timeout"), e))
Esempio n. 4
0
 def calc_cost_to_return(self):
     """
     calculates total proportional cost from elapsed time,
     and return reminder to the account if reminder more than 0
     :return: None
     """
     customer_service = self.active_service()
     if not customer_service:
         return
     service = customer_service.service
     if not service:
         return
     calc = service.get_calc_type()(customer_service=customer_service)
     elapsed_cost = calc.calc_cost()
     total_cost = safe_float(service.cost)
     return total_cost - elapsed_cost
Esempio n. 5
0
 def task_state_percent(task_state: int) -> Tuple[int, float]:
     """
     Returns percent of specified task state
     :param task_state: int of task state
     :return: tuple(state_count: int, state_percent: float)
     """
     with connection.cursor() as c:
         c.execute(
             "SELECT count(id) as cnt, "
             "round(count(id) * 100.0 / (SELECT count(id) FROM task), 6) AS prc "
             "FROM task WHERE task_state=%s::int",
             [int(task_state)],
         )
         r = c.fetchone()
     state_count, state_percent = r
     return safe_int(state_count), safe_float(state_percent)
Esempio n. 6
0
 def get_details(self):
     if self.dev_instance is None:
         return
     num = safe_int(self.dev_instance.snmp_extra)
     if not num:
         return
     status_map = {3: "ok", 2: "down"}
     try:
         # https://www.zabbix.com/documentation/1.8/ru/manual/advanced_snmp
         status = safe_int(
             self.get_item(".1.3.6.1.4.1.3320.101.10.1.1.26.%d" % num))
         signal = safe_float(
             self.get_item(".1.3.6.1.4.1.3320.101.10.5.1.5.%d" % num))
         # distance = self.get_item('.1.3.6.1.4.1.3320.101.10.1.1.27.%d' % num)
         mac = self.get_item_plain(".1.3.6.1.4.1.3320.101.10.1.1.3.%d" %
                                   num)
         uptime = safe_int(self.get_item(".1.3.6.1.2.1.2.2.1.9.%d" % num))
         if uptime > 0:
             uptime = RuTimedelta(seconds=uptime / 100)
         # speed = self.get_item('.1.3.6.1.2.1.2.2.1.5.%d' % num)
         if status > 0:
             return {
                 "status":
                 status_map.get(status, "unknown"),
                 "signal":
                 signal / 10 if signal else "—",
                 "mac":
                 macbin2str(mac),
                 "info": (
                     # IF-MIB::ifDescr
                     (_("name"),
                      self.get_item(".1.3.6.1.2.1.2.2.1.2.%d" % num)),
                     # IF-MIB::ifMtu
                     (_("mtu"),
                      self.get_item(".1.3.6.1.2.1.2.2.1.4.%d" % num)),
                     # IF-MIB::ifInOctets
                     (_("in_octets"),
                      bytes2human(
                          safe_float(
                              self.get_item(".1.3.6.1.2.1.2.2.1.10.%d" %
                                            num)))),
                     # IF-MIB::ifInUcastPkts
                     (_("in_ucst_pkts"),
                      self.get_item(".1.3.6.1.2.1.2.2.1.11.%d" % num)),
                     # IF-MIB::ifInNUcastPkts
                     (_("in_not_ucst_pkts"),
                      self.get_item(".1.3.6.1.2.1.2.2.1.12.%d" % num)),
                     # IF-MIB::ifInDiscards
                     (_("in_discards"),
                      self.get_item(".1.3.6.1.2.1.2.2.1.13.%d" % num)),
                     # IF-MIB::ifInErrors
                     (_("in_errors"),
                      self.get_item(".1.3.6.1.2.1.2.2.1.14.%d" % num)),
                     # IF-MIB::ifOutOctets
                     (_("out_octets"),
                      bytes2human(
                          safe_float(
                              self.get_item(".1.3.6.1.2.1.2.2.1.16.%d" %
                                            num)))),
                     # IF-MIB::ifOutUcastPkts
                     (_("out_ucst_pkts"),
                      self.get_item(".1.3.6.1.2.1.2.2.1.17.%d" % num)),
                     # IF-MIB::ifOutNUcastPkts
                     (_("out_not_ucst_pkts"),
                      self.get_item(".1.3.6.1.2.1.2.2.1.18.%d" % num)),
                     # IF-MIB::ifOutDiscards
                     (_("out_discards"),
                      self.get_item(".1.3.6.1.2.1.2.2.1.19.%d" % num)),
                     # IF-MIB::ifOutErrors
                     (_("out_errors"),
                      self.get_item(".1.3.6.1.2.1.2.2.1.20.%d" % num)),
                     (_("uptime"), str(uptime)),
                 ),
             }
     except EasySNMPTimeoutError as e:
         return {"err": "{}: {}".format(_("ONU not connected"), e)}
Esempio n. 7
0
 def calc_cost(self, model_object, request, customer) -> float:
     return safe_float(model_object.cost)