Beispiel #1
0
  def get_all_users_data(self):
    """Returns all the user's data for database table."""
    metrics_table = []

    # Create Stub to communicate with performance database server
    with perf_db_pb2.early_adopter_create_PerfDbTransfer_stub(
        self.hostname, self.port) as stub:
      all_users_retrieve_request = perf_db_pb2.AllUsersRetrieveRequest()

      timeouts_secs = 10  # Max waiting time before timeout, in seconds

      # Request data and receive data from performance database server
      # asynchronously
      all_users_data_future = stub.RetrieveAllUsersData.async(
          all_users_retrieve_request, timeouts_secs)
      all_users_data = all_users_data_future.result()

      for user_data in all_users_data.all_users_data:
        for data_detail in user_data.data_details:
          user_metrics_dict = {
              'username': str(user_data.username),
              'timestamp': str(data_detail.timestamp),
              'test_name': str(data_detail.test_name),
              'qps': str(self.valid_value(data_detail.metrics.qps)),
              'qps_per_core': str(
                  self.valid_value(data_detail.metrics.qps_per_core)),
              'perc_lat_50': str(
                  self.valid_value(data_detail.metrics.perc_lat_50)),
              'perc_lat_90': str(
                  self.valid_value(data_detail.metrics.perc_lat_90)),
              'perc_lat_95': str(
                  self.valid_value(data_detail.metrics.perc_lat_95)),
              'perc_lat_99': str(
                  self.valid_value(data_detail.metrics.perc_lat_99)),
              'perc_lat_99_point_9': str(
                  self.valid_value(data_detail.metrics.perc_lat_99_point_9)),
              'server_system_time': str(
                  self.valid_value(data_detail.metrics.server_system_time)),
              'server_user_time': str(
                  self.valid_value(data_detail.metrics.server_user_time)),
              'client_system_time': str(
                  self.valid_value(data_detail.metrics.client_system_time)),
              'client_user_time': str(
                  self.valid_value(data_detail.metrics.client_user_time)),
              'server_config': self.get_server_config_dict(
                  data_detail.server_config),
              'client_config': self.get_client_config_dict(
                  data_detail.client_config),
              'sys_info': self.get_sys_info_dict(data_detail.sys_info),
              'tag': str(data_detail.tag)
          }
          metrics_table.append(user_metrics_dict)

    return metrics_table
Beispiel #2
0
    def get_all_users_single_metric_data(self, metric):
        """Returns a particular metric data for all the users."""
        metric_list = []

        # Create Stub to communicate with performance database server
        with perf_db_pb2.early_adopter_create_PerfDbTransfer_stub(
                self.hostname, self.port) as stub:
            all_users_retrieve_request = perf_db_pb2.AllUsersRetrieveRequest()

            timeouts_secs = 10  # Max waiting time before timeout, in seconds

            # Request data and receive data from performance database server
            # asynchronously
            all_users_data_future = stub.RetrieveAllUsersData. async (
                all_users_retrieve_request, timeouts_secs)
            all_users_data = all_users_data_future.result()

            for user_data in all_users_data.all_users_data:
                for data_detail in user_data.data_details:
                    value = {
                        'qps':
                        round(data_detail.metrics.qps, 1),
                        'qpspercore':
                        round(data_detail.metrics.qps_per_core, 1),
                        'perc50':
                        round(data_detail.metrics.perc_lat_50, 1),
                        'perc90':
                        round(data_detail.metrics.perc_lat_90, 1),
                        'perc95':
                        round(data_detail.metrics.perc_lat_95, 1),
                        'perc99':
                        round(data_detail.metrics.perc_lat_99, 1),
                        'perc99point9':
                        round(data_detail.metrics.perc_lat_99_point_9, 1),
                        'serversystime':
                        round(data_detail.metrics.server_system_time, 1),
                        'serverusertime':
                        round(data_detail.metrics.server_user_time, 1),
                        'clientsystime':
                        round(data_detail.metrics.client_system_time, 1),
                        'clientusertime':
                        round(data_detail.metrics.client_user_time, 1)
                    }[metric]

                    user_metrics_dict = {
                        'timestamp': str(data_detail.timestamp),
                        'value': value
                    }

                    metric_list.append(user_metrics_dict)

        return metric_list
Beispiel #3
0
  def get_all_users_single_metric_data(self, metric):
    """Returns a particular metric data for all the users."""
    metric_list = []

    # Create Stub to communicate with performance database server
    with perf_db_pb2.early_adopter_create_PerfDbTransfer_stub(
        self.hostname, self.port) as stub:
      all_users_retrieve_request = perf_db_pb2.AllUsersRetrieveRequest()

      timeouts_secs = 10  # Max waiting time before timeout, in seconds

      # Request data and receive data from performance database server
      # asynchronously
      all_users_data_future = stub.RetrieveAllUsersData.async(
          all_users_retrieve_request, timeouts_secs)
      all_users_data = all_users_data_future.result()

      for user_data in all_users_data.all_users_data:
        for data_detail in user_data.data_details:
          value = {
              'qps': round(data_detail.metrics.qps, 1),
              'qpspercore': round(data_detail.metrics.qps_per_core, 1),
              'perc50': round(data_detail.metrics.perc_lat_50, 1),
              'perc90': round(data_detail.metrics.perc_lat_90, 1),
              'perc95': round(data_detail.metrics.perc_lat_95, 1),
              'perc99': round(data_detail.metrics.perc_lat_99, 1),
              'perc99point9': round(data_detail.metrics.perc_lat_99_point_9, 1),
              'serversystime': round(data_detail.metrics.server_system_time, 1),
              'serverusertime': round(data_detail.metrics.server_user_time, 1),
              'clientsystime': round(data_detail.metrics.client_system_time, 1),
              'clientusertime': round(data_detail.metrics.client_user_time, 1)
          }[metric]

          user_metrics_dict = {
              'timestamp': str(data_detail.timestamp),
              'value': value
          }

          metric_list.append(user_metrics_dict)

    return metric_list
Beispiel #4
0
    def get_single_user_data(self, username):
        """Returns a single user's data."""

        # Create Stub to communicate with performance database server
        with perf_db_pb2.early_adopter_create_PerfDbTransfer_stub(
                self.hostname, self.port) as stub:
            single_user_retrieve_request = perf_db_pb2.SingleUserRetrieveRequest(
            )
            single_user_retrieve_request.username = username

            timeouts_secs = 10  # Max waiting time before timeout, in seconds

            # Request data and receive data from performance database server
            user_data_future = stub.RetrieveSingleUserData. async (
                single_user_retrieve_request, timeouts_secs)
            user_data = user_data_future.result()

            # Sort the data
            sorted_user_data = sorted(
                user_data.single_user_data.data_details,
                key=lambda data_detail: data_detail.timestamp)

            # Lists for various metrics
            qps_list = []
            qps_per_core_list = []
            lat_list = []
            times_list = []

            for data_detail in sorted_user_data:
                # qps present
                if data_detail.metrics.qps != 0.0:
                    single_data_dict = self.init_single_data_dict(data_detail)
                    single_data_dict['qps'] = round(data_detail.metrics.qps, 1)

                    qps_list.append(single_data_dict)

                # qps per core present
                if data_detail.metrics.qps_per_core != 0.0:
                    single_data_dict = self.init_single_data_dict(data_detail)
                    single_data_dict['qps_per_core'] = round(
                        data_detail.metrics.qps_per_core, 1)

                    qps_per_core_list.append(single_data_dict)

                # percentile latenices present
                if (data_detail.metrics.perc_lat_50 != 0.0
                        and data_detail.metrics.perc_lat_90 != 0.0
                        and data_detail.metrics.perc_lat_95 != 0.0
                        and data_detail.metrics.perc_lat_99 != 0.0
                        and data_detail.metrics.perc_lat_99_point_9 != 0.0):
                    single_data_dict = self.init_single_data_dict(data_detail)

                    lat_dict = {
                        'perc_lat_50':
                        round(data_detail.metrics.perc_lat_50, 1),
                        'perc_lat_90':
                        round(data_detail.metrics.perc_lat_90, 1),
                        'perc_lat_95':
                        round(data_detail.metrics.perc_lat_95, 1),
                        'perc_lat_99':
                        round(data_detail.metrics.perc_lat_99, 1),
                        'perc_lat_99_point_9':
                        round(data_detail.metrics.perc_lat_99_point_9, 1)
                    }

                    single_data_dict['lat'] = lat_dict
                    lat_list.append(single_data_dict)

                # Server and client times present
                if (data_detail.metrics.server_system_time != 0.0
                        and data_detail.metrics.server_user_time != 0.0
                        and data_detail.metrics.client_system_time != 0.0
                        and data_detail.metrics.client_user_time != 0.0):
                    single_data_dict = self.init_single_data_dict(data_detail)

                    times_dict = {
                        'server_system_time':
                        round(data_detail.metrics.server_system_time, 1),
                        'server_user_time':
                        round(data_detail.metrics.server_user_time, 1),
                        'client_system_time':
                        round(data_detail.metrics.client_system_time, 1),
                        'client_user_time':
                        round(data_detail.metrics.client_user_time, 1)
                    }

                    single_data_dict['times'] = times_dict
                    times_list.append(single_data_dict)

            data_dict = defaultdict(list)
            data_dict = {
                'qpsData': qps_list,
                'qpsPerCoreData': qps_per_core_list,
                'latData': lat_list,
                'timesData': times_list
            }

            # Return user's personal details and user's data
            return [user_data.single_user_data.username, data_dict]
Beispiel #5
0
    def get_all_users_data(self):
        """Returns all the user's data for database table."""
        metrics_table = []

        # Create Stub to communicate with performance database server
        with perf_db_pb2.early_adopter_create_PerfDbTransfer_stub(
                self.hostname, self.port) as stub:
            all_users_retrieve_request = perf_db_pb2.AllUsersRetrieveRequest()

            timeouts_secs = 10  # Max waiting time before timeout, in seconds

            # Request data and receive data from performance database server
            # asynchronously
            all_users_data_future = stub.RetrieveAllUsersData. async (
                all_users_retrieve_request, timeouts_secs)
            all_users_data = all_users_data_future.result()

            for user_data in all_users_data.all_users_data:
                for data_detail in user_data.data_details:
                    user_metrics_dict = {
                        'username':
                        str(user_data.username),
                        'timestamp':
                        str(data_detail.timestamp),
                        'test_name':
                        str(data_detail.test_name),
                        'qps':
                        str(self.valid_value(data_detail.metrics.qps)),
                        'qps_per_core':
                        str(self.valid_value(
                            data_detail.metrics.qps_per_core)),
                        'perc_lat_50':
                        str(self.valid_value(data_detail.metrics.perc_lat_50)),
                        'perc_lat_90':
                        str(self.valid_value(data_detail.metrics.perc_lat_90)),
                        'perc_lat_95':
                        str(self.valid_value(data_detail.metrics.perc_lat_95)),
                        'perc_lat_99':
                        str(self.valid_value(data_detail.metrics.perc_lat_99)),
                        'perc_lat_99_point_9':
                        str(
                            self.valid_value(
                                data_detail.metrics.perc_lat_99_point_9)),
                        'server_system_time':
                        str(
                            self.valid_value(
                                data_detail.metrics.server_system_time)),
                        'server_user_time':
                        str(
                            self.valid_value(
                                data_detail.metrics.server_user_time)),
                        'client_system_time':
                        str(
                            self.valid_value(
                                data_detail.metrics.client_system_time)),
                        'client_user_time':
                        str(
                            self.valid_value(
                                data_detail.metrics.client_user_time)),
                        'server_config':
                        self.get_server_config_dict(data_detail.server_config),
                        'client_config':
                        self.get_client_config_dict(data_detail.client_config),
                        'sys_info':
                        self.get_sys_info_dict(data_detail.sys_info),
                        'tag':
                        str(data_detail.tag)
                    }
                    metrics_table.append(user_metrics_dict)

        return metrics_table
Beispiel #6
0
  def get_single_user_data(self, username):
    """Returns a single user's data."""

    # Create Stub to communicate with performance database server
    with perf_db_pb2.early_adopter_create_PerfDbTransfer_stub(
        self.hostname, self.port) as stub:
      single_user_retrieve_request = perf_db_pb2.SingleUserRetrieveRequest()
      single_user_retrieve_request.username = username

      timeouts_secs = 10  # Max waiting time before timeout, in seconds

      # Request data and receive data from performance database server
      user_data_future = stub.RetrieveSingleUserData.async(
          single_user_retrieve_request, timeouts_secs)
      user_data = user_data_future.result()

      # Sort the data
      sorted_user_data = sorted(user_data.single_user_data.data_details,
                                key=lambda data_detail: data_detail.timestamp)

      # Lists for various metrics
      qps_list = []
      qps_per_core_list = []
      lat_list = []
      times_list = []

      for data_detail in sorted_user_data:
        # qps present
        if data_detail.metrics.qps != 0.0:
          single_data_dict = self.init_single_data_dict(data_detail)
          single_data_dict['qps'] = round(data_detail.metrics.qps, 1)

          qps_list.append(single_data_dict)

        # qps per core present
        if data_detail.metrics.qps_per_core != 0.0:
          single_data_dict = self.init_single_data_dict(data_detail)
          single_data_dict['qps_per_core'] = round(
              data_detail.metrics.qps_per_core, 1)

          qps_per_core_list.append(single_data_dict)

        # percentile latenices present
        if (data_detail.metrics.perc_lat_50 != 0.0 and
            data_detail.metrics.perc_lat_90 != 0.0 and
            data_detail.metrics.perc_lat_95 != 0.0 and
            data_detail.metrics.perc_lat_99 != 0.0 and
            data_detail.metrics.perc_lat_99_point_9 != 0.0):
          single_data_dict = self.init_single_data_dict(data_detail)

          lat_dict = {
              'perc_lat_50': round(data_detail.metrics.perc_lat_50, 1),
              'perc_lat_90': round(data_detail.metrics.perc_lat_90, 1),
              'perc_lat_95': round(data_detail.metrics.perc_lat_95, 1),
              'perc_lat_99': round(data_detail.metrics.perc_lat_99, 1),
              'perc_lat_99_point_9': round(
                  data_detail.metrics.perc_lat_99_point_9, 1)
          }

          single_data_dict['lat'] = lat_dict
          lat_list.append(single_data_dict)

        # Server and client times present
        if (data_detail.metrics.server_system_time != 0.0 and
            data_detail.metrics.server_user_time != 0.0 and
            data_detail.metrics.client_system_time != 0.0 and
            data_detail.metrics.client_user_time != 0.0):
          single_data_dict = self.init_single_data_dict(data_detail)

          times_dict = {
              'server_system_time': round(
                  data_detail.metrics.server_system_time, 1),
              'server_user_time': round(data_detail.metrics.server_user_time,
                                        1),
              'client_system_time': round(
                  data_detail.metrics.client_system_time, 1),
              'client_user_time': round(data_detail.metrics.client_user_time, 1)
          }

          single_data_dict['times'] = times_dict
          times_list.append(single_data_dict)

      data_dict = defaultdict(list)
      data_dict = {
          'qpsData': qps_list,
          'qpsPerCoreData': qps_per_core_list,
          'latData': lat_list,
          'timesData': times_list
      }

      # Return user's personal details and user's data
      return [user_data.single_user_data.username, data_dict]