Skip to content

Commit

Permalink
refactor(libsinsp/threadinfo): export static fields via static method
Browse files Browse the repository at this point in the history
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
  • Loading branch information
ekoops committed Feb 28, 2025
1 parent 8ea1c41 commit 782ed13
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 33 deletions.
75 changes: 42 additions & 33 deletions userspace/libsinsp/threadinfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,54 +59,63 @@ sinsp_threadinfo::sinsp_threadinfo(
}

libsinsp::state::static_struct::field_infos sinsp_threadinfo::static_fields() const {
return get_static_fields();
}

libsinsp::state::static_struct::field_infos sinsp_threadinfo::get_static_fields() {
libsinsp::state::static_struct::field_infos ret;

// Use a zero-initialized pointer as define_static_field only use it to evaluate the offset of
// the provided field (i.e. pointer is never dereferenced to access a field value).
const auto* ptr = static_cast<const sinsp_threadinfo*>(0);

// todo(jasondellaluce): support missing fields that are vectors, maps, or sub-tables
define_static_field(ret, this, &m_tid, "tid");
define_static_field(ret, this, &m_pid, "pid");
define_static_field(ret, this, &m_ptid, "ptid");
define_static_field(ret, this, &m_reaper_tid, "reaper_tid");
define_static_field(ret, this, &m_sid, "sid");
define_static_field(ret, this, &m_comm, "comm");
define_static_field(ret, this, &m_exe, "exe");
define_static_field(ret, this, &m_exepath, "exe_path");
define_static_field(ret, this, &m_exe_writable, "exe_writable");
define_static_field(ret, this, &m_exe_upper_layer, "exe_upper_layer");
define_static_field(ret, this, &m_exe_lower_layer, "exe_lower_layer");
define_static_field(ret, this, &m_exe_from_memfd, "exe_from_memfd");
define_static_field(ret, this, &m_args_table_adapter.table_ptr(), "args", true);
define_static_field(ret, this, &m_env_table_adapter.table_ptr(), "env", true);
define_static_field(ret, this, &m_cgroups_table_adapter.table_ptr(), "cgroups", true);
define_static_field(ret, this, &m_flags, "flags");
define_static_field(ret, this, &m_fdlimit, "fd_limit");
define_static_field(ret, this, &m_uid, "uid");
define_static_field(ret, this, &m_gid, "gid");
define_static_field(ret, this, &m_loginuid, "loginuid");
define_static_field(ret, ptr, &ptr->m_tid, "tid");
define_static_field(ret, ptr, &ptr->m_pid, "pid");
define_static_field(ret, ptr, &ptr->m_ptid, "ptid");
define_static_field(ret, ptr, &ptr->m_reaper_tid, "reaper_tid");
define_static_field(ret, ptr, &ptr->m_sid, "sid");
define_static_field(ret, ptr, &ptr->m_comm, "comm");
define_static_field(ret, ptr, &ptr->m_exe, "exe");
define_static_field(ret, ptr, &ptr->m_exepath, "exe_path");
define_static_field(ret, ptr, &ptr->m_exe_writable, "exe_writable");
define_static_field(ret, ptr, &ptr->m_exe_upper_layer, "exe_upper_layer");
define_static_field(ret, ptr, &ptr->m_exe_lower_layer, "exe_lower_layer");
define_static_field(ret, ptr, &ptr->m_exe_from_memfd, "exe_from_memfd");
define_static_field(ret, ptr, &ptr->m_args_table_adapter.table_ptr(), "args", true);
define_static_field(ret, ptr, &ptr->m_env_table_adapter.table_ptr(), "env", true);
define_static_field(ret, ptr, &ptr->m_cgroups_table_adapter.table_ptr(), "cgroups", true);
define_static_field(ret, ptr, &ptr->m_flags, "flags");
define_static_field(ret, ptr, &ptr->m_fdlimit, "fd_limit");
define_static_field(ret, ptr, &ptr->m_uid, "uid");
define_static_field(ret, ptr, &ptr->m_gid, "gid");
define_static_field(ret, ptr, &ptr->m_loginuid, "loginuid");
// m_cap_permitted
// m_cap_effective
// m_cap_inheritable
define_static_field(ret, this, &m_exe_ino, "exe_ino");
define_static_field(ret, this, &m_exe_ino_ctime, "exe_ino_ctime");
define_static_field(ret, this, &m_exe_ino_mtime, "exe_ino_mtime");
define_static_field(ret, ptr, &ptr->m_exe_ino, "exe_ino");
define_static_field(ret, ptr, &ptr->m_exe_ino_ctime, "exe_ino_ctime");
define_static_field(ret, ptr, &ptr->m_exe_ino_mtime, "exe_ino_mtime");
// m_exe_ino_ctime_duration_clone_ts
// m_exe_ino_ctime_duration_pidns_start
// m_vmsize_kb
// m_vmrss_kb
// m_vmswap_kb
// m_pfmajor
// m_pfminor
define_static_field(ret, this, &m_vtid, "vtid");
define_static_field(ret, this, &m_vpid, "vpid");
define_static_field(ret, this, &m_vpgid, "vpgid");
define_static_field(ret, this, &m_pgid, "pgid");
define_static_field(ret, this, &m_pidns_init_start_ts, "pidns_init_start_ts");
define_static_field(ret, this, &m_root, "root");
define_static_field(ret, this, &m_tty, "tty");
define_static_field(ret, ptr, &ptr->m_vtid, "vtid");
define_static_field(ret, ptr, &ptr->m_vpid, "vpid");
define_static_field(ret, ptr, &ptr->m_vpgid, "vpgid");
define_static_field(ret, ptr, &ptr->m_pgid, "pgid");
define_static_field(ret, ptr, &ptr->m_pidns_init_start_ts, "pidns_init_start_ts");
define_static_field(ret, ptr, &ptr->m_root, "root");
define_static_field(ret, ptr, &ptr->m_tty, "tty");
// m_category
// m_clone_ts
// m_lastexec_ts
// m_latency
define_static_field(ret, this, &m_main_fdtable, "file_descriptors", true);
define_static_field(ret, this, &m_cwd, "cwd", true);
define_static_field(ret, ptr, &ptr->m_main_fdtable, "file_descriptors", true);
define_static_field(ret, ptr, &ptr->m_cwd, "cwd", true);
// m_parent_loop_detected
return ret;
}
Expand Down Expand Up @@ -1322,7 +1331,7 @@ static void fd_to_scap(scap_fdinfo* dst, sinsp_fdinfo* src) {
}
}

static const auto s_threadinfo_static_fields = sinsp_threadinfo().static_fields();
static const auto s_threadinfo_static_fields = sinsp_threadinfo::get_static_fields();

///////////////////////////////////////////////////////////////////////////////
// sinsp_thread_manager implementation
Expand Down
6 changes: 6 additions & 0 deletions userspace/libsinsp/threadinfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -584,6 +584,12 @@ class SINSP_PUBLIC sinsp_threadinfo : public libsinsp::state::table_entry {

void set_exepath(std::string&& exepath);

/*!
\brief A static version of static_fields()
\return The group of field infos available.
*/
static static_struct::field_infos get_static_fields();

private:
sinsp_threadinfo* get_cwd_root();
bool set_env_from_proc();
Expand Down

0 comments on commit 782ed13

Please sign in to comment.