| // 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; |
| } |