Exemple #1
0
def filesystem_diff(container):
    client = Client()
    raw_changes = client.diff(container)
    changes = {}
    for raw_change in raw_changes:
        changes[raw_change['Path']] = raw_change['Kind']
    return changes
Exemple #2
0
def track_state_changes(container_name, persisted_fs_changes):
    fout_cmd = open(get_command_track_filename(container_name), 'ab', 0)
    fout_fs = open(get_filesystem_track_filename(container_name), 'ab', 0)
    # react to every line added in the 'diff_trigger' file by the instrumented container
    client = Client()
    previous_changes = set()
    fs_changes = persisted_fs_changes
    print(fs_changes)
    for line in execute_lines(['docker', 'exec', container_name, 'tail', '-f', '/tmp/record/diff_trigger']):
        # store changes for every command
        raw_changes = client.diff(container_name)
        current_command_changes = []
        for raw_change in raw_changes:
            path = raw_change['Path']
            if not path in fs_changes:
                previous_changes.add(path)
                path_change_timestamp = get_container_file_timestamp(container_name, path)
                fs_changes[path] = path_change_timestamp
                current_command_changes.append({'path': path, 'timestamp': path_change_timestamp})
        fout_cmd.write((line.rstrip() + "\n").encode())
        write_filesystem_changes(current_command_changes, fout_fs)

    fout_fs.close()
    fout_cmd.close()