def initialize(self): self.graph = self.application.my_settings.get("graph") self.session = self.application.my_settings.get("db_session")() self._request_start_time = datetime.utcnow() stats.log_rate("requests", 1) stats.log_rate("requests_{}".format(self.__class__.__name__), 1)
def update_from_db(self, session): # type: (Session) -> None # Only allow one thread at a time to construct a fresh graph. with self._update_lock: checkpoint, checkpoint_time = self._get_checkpoint(session) if checkpoint == self.checkpoint: self._logger.debug("Checkpoint hasn't changed. Not Updating.") return self._logger.debug("Checkpoint changed; updating!") start_time = datetime.utcnow() user_metadata = self._get_user_metadata(session) groups, disabled_groups = self._get_groups(session, user_metadata) permissions = self._get_permissions(session) group_grants = self._get_group_grants(session) group_service_accounts = self._get_group_service_accounts(session) service_account_grants = all_service_account_permissions(session) nodes = self._get_nodes(groups, user_metadata) edges = self._get_edges(session) edges_without_np_owner = [ (n1, n2) for n1, n2, r in edges if GROUP_EDGE_ROLES[r["role"]] != "np-owner" ] graph = DiGraph() graph.add_nodes_from(nodes) graph.add_edges_from(edges) rgraph = graph.reverse() # We need a separate graph without np-owner edges to construct the mapping of # permissions to users with that grant. permission_graph = DiGraph() permission_graph.add_nodes_from(nodes) permission_graph.add_edges_from(edges_without_np_owner) grants_by_permission = self._get_grants_by_permission( permission_graph, group_grants, service_account_grants, user_metadata) with self.lock: self._graph = graph self._rgraph = rgraph self.checkpoint = checkpoint self.checkpoint_time = checkpoint_time self.user_metadata = user_metadata self._groups = groups self._disabled_groups = disabled_groups self._permissions = permissions self._group_grants = group_grants self._group_service_accounts = group_service_accounts self._service_account_grants = service_account_grants self._grants_by_permission = grants_by_permission duration = datetime.utcnow() - start_time stats.log_rate("graph_update_ms", int(duration.total_seconds() * 1000))
def initialize(self, *args, **kwargs): # type: (*Any, **Any) -> None self.graph = kwargs["graph"] # type: GroupGraph self.usecase_factory = kwargs["usecase_factory"] # type: UseCaseFactory self._request_start_time = datetime.utcnow() stats.log_rate("requests", 1) stats.log_rate("requests_{}".format(self.__class__.__name__), 1)
def initialize(self): self.session = self.application.my_settings.get("db_session")() self.graph = Graph() if self.get_argument("_profile", False): self.perf_collector = Collector() self.perf_trace_uuid = str(uuid4()) self.perf_collector.start() else: self.perf_collector = None self.perf_trace_uuid = None self._request_start_time = datetime.utcnow() stats.log_rate("requests", 1) stats.log_rate("requests_{}".format(self.__class__.__name__), 1)
def update_from_db(self, session): # type: (Session) -> None # Only allow one thread at a time to construct a fresh graph. with self._update_lock: checkpoint, checkpoint_time = self._get_checkpoint(session) if checkpoint == self.checkpoint: self._logger.debug("Checkpoint hasn't changed. Not Updating.") return self._logger.debug("Checkpoint changed; updating!") start_time = datetime.utcnow() user_metadata = self._get_user_metadata(session) groups, disabled_groups = self._get_groups(session, user_metadata) permissions = self._get_permissions(session) group_grants = self._get_group_grants(session) group_service_accounts = self._get_group_service_accounts(session) service_account_grants = all_service_account_permissions(session) graph = DiGraph() graph.add_nodes_from(self._get_nodes(groups, user_metadata)) graph.add_edges_from(self._get_edges(session)) rgraph = graph.reverse() grants_by_permission = self._get_grants_by_permission( graph, group_grants, service_account_grants ) with self.lock: self._graph = graph self._rgraph = rgraph self.checkpoint = checkpoint self.checkpoint_time = checkpoint_time self.user_metadata = user_metadata self._groups = groups self._disabled_groups = disabled_groups self._permissions = permissions self._group_grants = group_grants self._group_service_accounts = group_service_accounts self._service_account_grants = service_account_grants self._grants_by_permission = grants_by_permission duration = datetime.utcnow() - start_time stats.log_rate("graph_update_ms", int(duration.total_seconds() * 1000))
def on_finish(self): # log request duration duration = datetime.utcnow() - self._request_start_time duration_ms = int(duration.total_seconds() * 1000) stats.log_rate("duration_ms", duration_ms) stats.log_rate("duration_ms_{}".format(self.__class__.__name__), duration_ms) # log response status code response_status = self.get_status() stats.log_rate("response_status_{}".format(response_status), 1) stats.log_rate("response_status_{}_{}".format(self.__class__.__name__, response_status), 1)
def initialize(self, *args, **kwargs): # type: (*Any, **Any) -> None self.graph = Graph() self.session = kwargs["session"]() # type: Session self.template_env = kwargs["template_env"] # type: Environment self.usecase_factory = kwargs[ "usecase_factory"] # type: UseCaseFactory if self.get_argument("_profile", False): self.perf_collector = Collector() self.perf_trace_uuid = str(uuid4()) # type: Optional[str] self.perf_collector.start() else: self.perf_collector = None self.perf_trace_uuid = None self._request_start_time = datetime.utcnow() stats.log_rate("requests", 1) stats.log_rate("requests_{}".format(self.__class__.__name__), 1)
def initialize(self, *args, **kwargs): # type: (*Any, **Any) -> None self.graph = Graph() self.session = self.settings["session"]() # type: Session self.template_engine = self.settings["template_engine"] # type: FrontendTemplateEngine self.plugins = get_plugin_proxy() session_factory = SingletonSessionFactory(self.session) self.usecase_factory = create_graph_usecase_factory( settings(), self.plugins, session_factory ) if self.get_argument("_profile", False): self.perf_collector = Collector() self.perf_trace_uuid = str(uuid4()) # type: Optional[str] self.perf_collector.start() else: self.perf_collector = None self.perf_trace_uuid = None self._request_start_time = datetime.utcnow() stats.log_rate("requests", 1) stats.log_rate("requests_{}".format(self.__class__.__name__), 1)
def initialize(self, *args, **kwargs): # type: (*Any, **Any) -> None self.graph = Graph() self.session = self.settings["session"]() # type: Session self.template_engine = self.settings[ "template_engine"] # type: FrontendTemplateEngine self.plugins = get_plugin_proxy() session_factory = SingletonSessionFactory(self.session) self.usecase_factory = create_graph_usecase_factory( settings(), self.plugins, session_factory) if self.get_argument("_profile", False): self.perf_collector = Collector() self.perf_trace_uuid = str(uuid4()) # type: Optional[str] self.perf_collector.start() else: self.perf_collector = None self.perf_trace_uuid = None self._request_start_time = datetime.utcnow() stats.log_rate("requests", 1) stats.log_rate("requests_{}".format(self.__class__.__name__), 1)
def on_finish(self): if self.perf_collector: self.perf_collector.stop() perf_profile.record_trace(self.session, self.perf_collector, self.perf_trace_uuid) self.session.close() # log request duration duration = datetime.utcnow() - self._request_start_time duration_ms = int(duration.total_seconds() * 1000) stats.log_rate("duration_ms", duration_ms) stats.log_rate("duration_ms_{}".format(self.__class__.__name__), duration_ms) # log response status code response_status = self.get_status() stats.log_rate("response_status_{}".format(response_status), 1) stats.log_rate("response_status_{}_{}".format(self.__class__.__name__, response_status), 1)