GCC Code Coverage Report


Directory: cvmfs/
File: cvmfs/swissknife_filestats.h
Date: 2025-06-22 02:36:02
Exec Total Coverage
Lines: 0 6 0.0%
Branches: 0 0 -%

Line Branch Exec Source
1 /**
2 * This file is part of the CernVM File System.
3 */
4
5 #ifndef CVMFS_SWISSKNIFE_FILESTATS_H_
6 #define CVMFS_SWISSKNIFE_FILESTATS_H_
7
8 #include <pthread.h>
9
10 #include <string>
11
12 #include "catalog_traversal.h"
13 #include "sql.h"
14 #include "swissknife.h"
15 #include "util/atomic.h"
16
17 using namespace std; // NOLINT
18
19 namespace swissknife {
20
21 // Database class for storing repo statistics, the class design
22 // follows StatisticsDatabase's design
23 class FileStatsDatabase : public sqlite::Database<FileStatsDatabase> {
24 public:
25 bool CreateEmptyDatabase();
26
27 // Following Store* functions return the primary key value of the
28 // inserted entry
29 int64_t StoreCatalog(int64_t num_entries, int64_t file_size);
30 int64_t StoreFile(int64_t catalog_id, int64_t object_id);
31 int64_t StoreObject(const void *hash, int hash_size, int64_t size);
32 int64_t StoreChunkedFile(int64_t catalog_id);
33 int64_t StoreChunk(const void *hash, int hash_size, int64_t size,
34 int64_t file_id);
35 int64_t StoreSymlink(int64_t length);
36 void InitStatements();
37 void DestroyStatements();
38
39 static float kLatestSchema;
40 static unsigned kLatestSchemaRevision;
41
42 protected:
43 sqlite::Sql *query_insert_catalog;
44 sqlite::Sql *query_insert_object;
45 sqlite::Sql *query_insert_file;
46 sqlite::Sql *query_insert_file_object;
47 sqlite::Sql *query_insert_symlink;
48 sqlite::Sql *query_lookup_object;
49 friend class sqlite::Database<FileStatsDatabase>;
50 FileStatsDatabase(const std::string &filename, const OpenMode open_mode)
51 : sqlite::Database<FileStatsDatabase>(filename, open_mode) { }
52 };
53
54
55 class CommandFileStats : public Command {
56 public:
57 ~CommandFileStats() { }
58 virtual std::string GetName() const { return "filestats"; }
59 virtual std::string GetDescription() const {
60 return "CernVM File System repository statistics exporter.";
61 }
62 virtual ParameterList GetParams() const;
63 int Main(const ArgumentList &args);
64
65 protected:
66 string db_path_;
67 string tmp_db_path_;
68 FileStatsDatabase *db_;
69
70 pthread_t thread_processing_;
71 atomic_int32 num_downloaded_;
72 atomic_int32 finished_;
73
74 template<class ObjectFetcherT>
75 bool Run(ObjectFetcherT *object_fetcher);
76
77 void CatalogCallback(const CatalogTraversalData<catalog::Catalog> &data);
78
79 static void *MainProcessing(void *data);
80
81 void ProcessCatalog(string db_path);
82 };
83
84 } // namespace swissknife
85
86 #endif // CVMFS_SWISSKNIFE_FILESTATS_H_
87