Skip to content

Commit

Permalink
Add introspect command to show task summary
Browse files Browse the repository at this point in the history
Change-Id: Icaf23c5e185106e93ca21d55fd6c98ab74a6658f
Closes-Bug: 1561860
  • Loading branch information
Nischal Sheth committed Mar 25, 2016
1 parent 52996c7 commit 427c21d
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 16 deletions.
5 changes: 4 additions & 1 deletion src/base/sandesh/task.sandesh
Expand Up @@ -27,7 +27,7 @@ struct SandeshTaskGroup {
1: string name;
2: u32 task_id;
3: list <SandeshTaskEntry> task_entry_list;
4: list <SandeshTaskPolicyEntry> task_policy_list;
4: optional list <SandeshTaskPolicyEntry> task_policy_list;
}

response sandesh SandeshTaskScheduler {
Expand All @@ -40,6 +40,9 @@ response sandesh SandeshTaskScheduler {
request sandesh SandeshTaskRequest {
}

request sandesh SandeshTaskSummaryRequest {
}

/**
* @description: Running tasks information
* @severity: DEBUG
Expand Down
11 changes: 7 additions & 4 deletions src/base/task.cc
Expand Up @@ -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(); }
Expand Down Expand Up @@ -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<SandeshTaskEntry> list;
TaskEntry *task_entry = QueryTaskEntry(-1);
Expand All @@ -1380,6 +1380,9 @@ void TaskGroup::GetSandeshData(SandeshTaskGroup *resp) const {
}
resp->set_task_entry_list(list);

if (summary)
return;

std::vector<SandeshTaskPolicyEntry> policy_list;
for (TaskGroupPolicyList::const_iterator it = policy_.begin();
it != policy_.end(); ++it) {
Expand All @@ -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_);
Expand All @@ -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);
Expand Down
2 changes: 1 addition & 1 deletion src/base/task.h
Expand Up @@ -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);
Expand Down
24 changes: 14 additions & 10 deletions src/base/task_sandesh.cc
Expand Up @@ -2,22 +2,26 @@
* Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
*/

#include <iostream>
#include <fstream>
#include <tbb/task.h>
#include <base/task.h>
#include <base/logging.h>

#include <sandesh/sandesh_types.h>
#include <sandesh/sandesh.h>
#include <sandesh/sandesh_types.h>
#include <base/sandesh/task_types.h>

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);
}

0 comments on commit 427c21d

Please sign in to comment.