diff --git a/src/base/sandesh/task.sandesh b/src/base/sandesh/task.sandesh index 8d6bd1bef45..33b7b1791d2 100644 --- a/src/base/sandesh/task.sandesh +++ b/src/base/sandesh/task.sandesh @@ -27,7 +27,7 @@ struct SandeshTaskGroup { 1: string name; 2: u32 task_id; 3: list task_entry_list; - 4: list task_policy_list; + 4: optional list task_policy_list; } response sandesh SandeshTaskScheduler { @@ -40,6 +40,9 @@ response sandesh SandeshTaskScheduler { request sandesh SandeshTaskRequest { } +request sandesh SandeshTaskSummaryRequest { +} + /** * @description: Running tasks information * @severity: DEBUG diff --git a/src/base/task.cc b/src/base/task.cc index 3acc394e78e..64a0aa7646a 100644 --- a/src/base/task.cc +++ b/src/base/task.cc @@ -187,7 +187,7 @@ class TaskGroup { void ClearTaskGroupStats(); void ClearTaskStats(); void ClearTaskStats(int instance_id); - void GetSandeshData(SandeshTaskGroup *resp) const; + void GetSandeshData(SandeshTaskGroup *resp, bool summary) const; int task_id() const { return task_id_; } int deferq_size() const { return deferq_.size(); } @@ -1358,7 +1358,7 @@ void TaskEntry::GetSandeshData(SandeshTaskEntry *resp) const { resp->set_waitq_size(waitq_.size()); resp->set_deferq_size(deferq_->size()); } -void TaskGroup::GetSandeshData(SandeshTaskGroup *resp) const { +void TaskGroup::GetSandeshData(SandeshTaskGroup *resp, bool summary) const { TaskScheduler *scheduler = TaskScheduler::GetInstance(); std::vector list; TaskEntry *task_entry = QueryTaskEntry(-1); @@ -1380,6 +1380,9 @@ void TaskGroup::GetSandeshData(SandeshTaskGroup *resp) const { } resp->set_task_entry_list(list); + if (summary) + return; + std::vector policy_list; for (TaskGroupPolicyList::const_iterator it = policy_.begin(); it != policy_.end(); ++it) { @@ -1391,7 +1394,7 @@ void TaskGroup::GetSandeshData(SandeshTaskGroup *resp) const { resp->set_task_policy_list(policy_list); } -void TaskScheduler::GetSandeshData(SandeshTaskScheduler *resp) { +void TaskScheduler::GetSandeshData(SandeshTaskScheduler *resp, bool summary) { tbb::mutex::scoped_lock lock(mutex_); resp->set_running(running_); @@ -1406,7 +1409,7 @@ void TaskScheduler::GetSandeshData(SandeshTaskScheduler *resp) { resp_group.set_task_id(it->second); resp_group.set_name(it->first); if (group) - group->GetSandeshData(&resp_group); + group->GetSandeshData(&resp_group, summary); list.push_back(resp_group); } resp->set_task_group_list(list); diff --git a/src/base/task.h b/src/base/task.h index 5af1ea5763f..3850d69d31c 100644 --- a/src/base/task.h +++ b/src/base/task.h @@ -199,7 +199,7 @@ class TaskScheduler { uint64_t cancel_count() const { return cancel_count_; } // Force number of threads void SetMaxThreadCount(int n); - void GetSandeshData(SandeshTaskScheduler *resp); + void GetSandeshData(SandeshTaskScheduler *resp, bool summary); void Log(const char *file_name, uint32_t line_no, const Task *task, const char *description, uint32_t delay); void RegisterLog(LogFn fn); diff --git a/src/base/task_sandesh.cc b/src/base/task_sandesh.cc index a9f322a3385..4ae9bea6bfc 100644 --- a/src/base/task_sandesh.cc +++ b/src/base/task_sandesh.cc @@ -2,22 +2,26 @@ * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved. */ -#include -#include -#include #include -#include - -#include #include +#include #include -using namespace std; -void SandeshTaskRequest::HandleRequest() const { +using std::string; + +static void HandleRequestCommon(const string &context, bool summary) { SandeshTaskScheduler *resp = new SandeshTaskScheduler; TaskScheduler *scheduler = TaskScheduler::GetInstance(); - scheduler->GetSandeshData(resp); - resp->set_context(context()); + scheduler->GetSandeshData(resp, summary); + resp->set_context(context); resp->set_more(false); resp->Response(); } + +void SandeshTaskRequest::HandleRequest() const { + HandleRequestCommon(context(), false); +} + +void SandeshTaskSummaryRequest::HandleRequest() const { + HandleRequestCommon(context(), true); +}