Skip to content

Commit

Permalink
Write mounts to/from .scap files.
Browse files Browse the repository at this point in the history
  • Loading branch information
mstemm committed Sep 9, 2016
1 parent e08488c commit 1857952
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 11 deletions.
42 changes: 31 additions & 11 deletions userspace/libsinsp/container.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,20 @@ along with sysdig. If not, see <http://www.gnu.org/licenses/>.
#include "container.h"
#include "utils.h"

void sinsp_container_info::parse_json_mounts(const Json::Value &mnt_obj, vector<sinsp_container_info::container_mount_info> &mounts)
{
if(!mnt_obj.isNull() && mnt_obj.isArray())
{
for(uint32_t i=0; i<mnt_obj.size(); i++)
{
const Json::Value &mount = mnt_obj[i];
mounts.emplace_back(mount["Source"], mount["Destination"],
mount["Mode"], mount["RW"],
mount["Propagation"]);
}
}
}

sinsp_container_info::container_mount_info *sinsp_container_info::mount_by_idx(uint32_t idx)
{
if (idx >= m_mounts.size())
Expand Down Expand Up @@ -448,6 +462,22 @@ string sinsp_container_manager::container_to_json(const sinsp_container_info& co
container["image"] = container_info.m_image;
container["privileged"] = container_info.m_privileged;

Json::Value mounts = Json::arrayValue;

for (auto &mntinfo : container_info.m_mounts)
{
Json::Value mount;

mount["Source"] = mntinfo.m_source;
mount["Destination"] = mntinfo.m_dest;
mount["Mode"] = mntinfo.m_mode;
mount["RW"] = mntinfo.m_rdwr;
mount["Propagation"] = mntinfo.m_propagation;

mounts.append(mount);
}

container["Mounts"] = mounts;

char addrbuff[100];
uint32_t iph = ntohl(container_info.m_container_ip);
Expand Down Expand Up @@ -656,17 +686,7 @@ bool sinsp_container_manager::parse_docker(sinsp_container_info* container)
container->m_privileged = privileged.asBool();
}

const Json::Value &mounts = root["Mounts"];
if(!mounts.isNull() && mounts.isArray())
{
for(uint32_t i=0; i<mounts.size(); i++)
{
const Json::Value &mount = mounts[i];
container->m_mounts.emplace_back(mount["Source"], mount["Destination"],
mount["Mode"], mount["RW"],
mount["Propagation"]);
}
}
sinsp_container_info::parse_json_mounts(root["Mounts"], container->m_mounts);

return true;
}
Expand Down
2 changes: 2 additions & 0 deletions userspace/libsinsp/container.h
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,8 @@ class sinsp_container_info
{
}

static void parse_json_mounts(const Json::Value &mnt_obj, vector<container_mount_info> &mounts);

container_mount_info *mount_by_idx(uint32_t idx);
container_mount_info *mount_by_source(std::string &source);
container_mount_info *mount_by_dest(std::string &dest);
Expand Down
2 changes: 2 additions & 0 deletions userspace/libsinsp/parsers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3953,6 +3953,8 @@ void sinsp_parser::parse_container_json_evt(sinsp_evt *evt)
{
container_info.m_privileged = privileged.asBool();
}

sinsp_container_info::parse_json_mounts(container["Mounts"], container_info.m_mounts);
const Json::Value& contip = container["ip"];
if(!contip.isNull() && contip.isConvertibleTo(Json::stringValue))
{
Expand Down

0 comments on commit 1857952

Please sign in to comment.