blob: 8706bed2ff0228cf301c34727db95bb6ad304186 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#pragma once
#include <Processors/QueryPlan/IQueryPlanStep.h>
#include <rapidjson/prettywriter.h>
namespace local_engine
{
class RelMetric;
using RelMetricPtr = std::shared_ptr<RelMetric>;
struct RelMetricTimes
{
// Number of time this processor was executing.
size_t time;
// Number of time this processor was waiting for data (from other processor).
size_t input_wait_elapsed_us;
// Number of time this processor was waiting because output port was full.
size_t output_wait_elapsed_us;
};
class RelMetric
{
public:
explicit RelMetric(size_t id, const String & name, std::vector<DB::IQueryPlanStep *> & steps);
explicit RelMetric(const String & name, const std::vector<RelMetricPtr> & inputs, std::vector<DB::IQueryPlanStep *> & steps);
size_t getId() const;
const String & getName() const;
const std::vector<DB::IQueryPlanStep *> & getSteps() const;
const std::vector<RelMetricPtr> & getInputs() const;
RelMetricTimes getTotalTime() const;
void serialize(rapidjson::Writer<rapidjson::StringBuffer> & writer, bool summary = true) const;
private:
size_t id;
String name;
// query plan is from query plan
std::vector<DB::IQueryPlanStep *> steps;
std::vector<RelMetricPtr> inputs;
};
class RelMetricSerializer
{
public:
static std::string serializeRelMetric(const RelMetricPtr & rel_metric, bool flatten = true);
};
}