blob: 8348bed9b567e112090ccd56f687116678318bc4 [file] [log] [blame]
// Copyright 2018 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "init/file_attrs_cleaner.h"
#include <sysexits.h>
#include <string>
#include <vector>
#include <base/command_line.h>
#include <base/files/file_path.h>
#include <base/files/file_util.h>
#include <base/logging.h>
#include <brillo/flag_helper.h>
#include <brillo/syslog_logging.h>
#include <metrics/metrics_library.h>
using file_attrs_cleaner::ScanDir;
int main(int argc, char* argv[]) {
DEFINE_string(skip_dir, "", "Subdirectory name to skip.");
DEFINE_bool(enable_metrics, false, "Report URL xattr metrics.");
brillo::FlagHelper::Init(argc, argv, "Chromium OS File Attrs Cleaner");
brillo::InitLog(brillo::kLogToSyslog | brillo::kLogToStderrIfTty);
MetricsLibrary metrics;
if (argc <= 1) {
LOG(ERROR) << "Need at least one directory to scan.";
return EX_USAGE;
}
std::vector<std::string> skip_recurse;
if (!FLAGS_skip_dir.empty())
skip_recurse.push_back(FLAGS_skip_dir);
auto args = base::CommandLine::ForCurrentProcess()->GetArgs();
bool ret = true;
int total_url_xattrs_count = 0;
for (const auto& arg : args) {
if (base::DirectoryExists(base::FilePath(arg))) {
int url_xattrs_count = 0;
ret &= ScanDir(arg, skip_recurse, &url_xattrs_count);
total_url_xattrs_count += url_xattrs_count;
} else {
LOG(ERROR) << "Directory '" << arg << "' does not exist.";
ret = false;
}
}
VLOG(1) << "total_url_xattrs_count is " << total_url_xattrs_count;
if (FLAGS_enable_metrics) {
constexpr int min = 1;
constexpr int max = 1000;
constexpr int nbuckets = 10;
if (!metrics.SendToUMA("ChromeOS.UrlXattrsCount", total_url_xattrs_count,
min, max, nbuckets)) {
LOG(ERROR) << "Failed to send |url_xattrs_count| to UMA.";
}
}
return ret ? EX_OK : 1;
}