Beispiel #1
0
 def _register_user(self, uaid, router_type, router_data):
     # type: (uuid.UUID, str, JSONDict) -> None
     """Save a new user record"""
     self.db.router.register_user(dict(
         uaid=uaid.hex,
         router_type=router_type,
         router_data=router_data,
         connected_at=ms_time(),
         last_connect=generate_last_connect(),
     ))
Beispiel #2
0
    def _router_completed(self,
                          response,
                          uaid_data,
                          warning="",
                          router_type=None,
                          vapid=None):
        """Called after router has completed successfully"""
        # Log the time taken for routing
        self._timings["route_time"] = time.time() - self._router_time
        # Were we told to update the router data?
        time_diff = time.time() - self._start_time
        if response.router_data is not None:
            if not response.router_data:
                # An empty router_data object indicates that the record should
                # be deleted. There is no longer valid route information for
                # this record.
                self.log.debug(format="Dropping User",
                               code=100,
                               uaid_hash=hasher(uaid_data["uaid"]),
                               uaid_record=dump_uaid(uaid_data),
                               client_info=self._client_info)
                d = deferToThread(self.db.router.drop_user, uaid_data["uaid"])
                d.addCallback(lambda x: self._router_response(response))
                return d
            # The router data needs to be updated to include any changes
            # requested by the bridge system
            uaid_data["router_data"] = response.router_data
            # set the AWS mandatory data
            uaid_data["connected_at"] = ms_time()
            d = deferToThread(self.db.router.register_user, uaid_data)
            response.router_data = None
            d.addCallback(lambda x: self._router_completed(
                response, uaid_data, warning, router_type, vapid))
            return d
        else:
            # No changes are requested by the bridge system, proceed as normal
            dest = 'Direct'
            if response.status_code == 200 or response.logged_status == 200:
                self.log.debug(format="Successful delivery",
                               client_info=self._client_info)
            elif response.status_code == 202 or response.logged_status == 202:
                self.log.debug(format="Router miss, message stored.",
                               client_info=self._client_info)
                dest = 'Stored'
            self.metrics.timing("notification.request_time",
                                duration=time_diff)
            self.metrics.increment('notification.message.success',
                                   tags=make_tags(destination=dest,
                                                  router=router_type,
                                                  vapid=(vapid is not None)))

            response.response_body = (response.response_body + " " +
                                      warning).strip()
            self._router_response(response)
Beispiel #3
0
    def _register_user(self, uaid, router_type, router_data):
        # type: (uuid.UUID, str, JSONDict) -> None
        """Save a new user record

        We set the expiry to 0 here because mobile users never check back,
        so the record may be incorrectly expired. (Expiry records older than
        5 years are not automatically deleted.)
        """
        self.db.router.register_user(
            dict(uaid=uaid.hex,
                 router_type=router_type,
                 router_data=router_data,
                 connected_at=ms_time(),
                 last_connect=generate_last_connect(),
                 expiry=0))