File indexing completed on 2024-04-28 05:45:39
0001 // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0002 // SPDX-FileCopyrightText: 2021-2022 Harald Sitter <sitter@kde.org> 0003 0004 #include <QCoreApplication> 0005 #include <QJsonArray> 0006 #include <QJsonDocument> 0007 #include <QJsonObject> 0008 #include <QTextStream> 0009 0010 #include "entries.h" 0011 0012 QJsonObject entryToJsonObject(const Entry &entry) 0013 { 0014 return QJsonObject({ 0015 {QStringLiteral("uid"), QJsonValue::fromVariant(entry.uid)}, 0016 {QStringLiteral("pid"), QJsonValue::fromVariant(entry.pid)}, 0017 {QStringLiteral("instances"), QJsonValue::fromVariant(entry.instances)}, 0018 {QStringLiteral("watches"), QJsonValue::fromVariant(entry.watches)}, 0019 {QStringLiteral("cmdline"), QJsonValue::fromVariant(entry.cmdline)}, 0020 }); 0021 } 0022 0023 QJsonArray entryVectorToJsonArray(const std::vector<Entry> &entries) 0024 { 0025 QJsonArray ary; 0026 for (const auto &entry : entries) { 0027 ary.append(entryToJsonObject(entry)); 0028 } 0029 return ary; 0030 } 0031 0032 int main(int argc, char **argv) 0033 { 0034 Q_UNUSED(argc); 0035 Q_UNUSED(argv); 0036 0037 const auto entries = collectEntries(); 0038 0039 qulonglong allInstances = 0; 0040 qulonglong allWatches = 0; 0041 for (const auto &entry : entries) { 0042 allInstances += entry.instances; 0043 allWatches += entry.watches; 0044 } 0045 0046 const auto capacity = inotifyCapacity(); 0047 constexpr auto percent = 100; 0048 const auto instancePercent = percent * allInstances / capacity.max_user_instances; 0049 const auto watchPercent = percent * allWatches / capacity.max_user_watches; 0050 0051 const QJsonObject totalsObject({ 0052 {QStringLiteral("instances"), QJsonValue::fromVariant(allInstances)}, 0053 {QStringLiteral("maxInstances"), QJsonValue::fromVariant(capacity.max_user_instances)}, 0054 {QStringLiteral("instancePercent"), QJsonValue::fromVariant(instancePercent)}, 0055 {QStringLiteral("watches"), QJsonValue::fromVariant(allWatches)}, 0056 {QStringLiteral("maxWatches"), QJsonValue::fromVariant(capacity.max_user_watches)}, 0057 {QStringLiteral("watchPercent"), QJsonValue::fromVariant(watchPercent)}, 0058 }); 0059 0060 QTextStream(stdout) << QJsonDocument(QJsonObject({ 0061 {QStringLiteral("processes"), entryVectorToJsonArray(entries)}, 0062 {QStringLiteral("totals"), totalsObject}, 0063 })) 0064 .toJson(QJsonDocument::JsonFormat::Indented); 0065 0066 return 0; 0067 }