Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 14 additions & 4 deletions userspace/libsinsp/container.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -122,9 +122,9 @@ bool sinsp_container_manager::remove_inactive_containers()
{
if(containers_in_use.find(it->first) == containers_in_use.end())
{
if(m_inspector->m_parser->m_fd_listener)
for(const auto &remove_cb : m_remove_callbacks)
{
m_inspector->m_parser->m_fd_listener->on_remove_container(m_containers[it->first]);
remove_cb(m_containers[it->first]);
}
m_containers.erase(it++);
}
Expand Down Expand Up @@ -976,9 +976,9 @@ void sinsp_container_manager::add_container(const sinsp_container_info& containe
{
m_containers[container_info.m_id] = container_info;

if(m_inspector->m_parser->m_fd_listener)
for(const auto &new_cb : m_new_callbacks)
{
m_inspector->m_parser->m_fd_listener->on_new_container(container_info, thread_info);
new_cb(m_containers[container_info.m_id], thread_info);
}
}

Expand Down Expand Up @@ -1025,3 +1025,13 @@ string sinsp_container_manager::get_container_name(sinsp_threadinfo* tinfo)

return res;
}

void sinsp_container_manager::subscribe_on_new_container(new_container_cb callback)
{
m_new_callbacks.emplace_back(callback);
}

void sinsp_container_manager::subscribe_on_remove_container(remove_container_cb callback)
{
m_remove_callbacks.emplace_back(callback);
}
7 changes: 7 additions & 0 deletions userspace/libsinsp/container.h
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,11 @@ class sinsp_container_manager
bool set_mesos_task_id(sinsp_container_info* container, sinsp_threadinfo* tinfo);
string get_mesos_task_id(const string& container_id);

typedef std::function<void(const sinsp_container_info&, sinsp_threadinfo *)> new_container_cb;
typedef std::function<void(const sinsp_container_info&)> remove_container_cb;
void subscribe_on_new_container(new_container_cb callback);
void subscribe_on_remove_container(remove_container_cb callback);

private:
string container_to_json(const sinsp_container_info& container_info);
bool container_to_sinsp_event(const string& json, sinsp_evt* evt);
Expand All @@ -171,4 +176,6 @@ class sinsp_container_manager
sinsp* m_inspector;
unordered_map<string, sinsp_container_info> m_containers;
uint64_t m_last_flush_time_ns;
list<new_container_cb> m_new_callbacks;
list<remove_container_cb> m_remove_callbacks;
};
2 changes: 0 additions & 2 deletions userspace/libsinsp/sinsp_int.h
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,4 @@ class sinsp_fd_listener
virtual void on_execve(sinsp_evt* evt) = 0;
virtual void on_clone(sinsp_evt* evt, sinsp_threadinfo* newtinfo) = 0;
virtual void on_bind(sinsp_evt* evt) = 0;
virtual void on_new_container(const sinsp_container_info& container_info, sinsp_threadinfo *tinfo) = 0;
virtual void on_remove_container(const sinsp_container_info& container_info) = 0;
};