diff options
author | Jesper Schmitz Mouridsen <jsm@FreeBSD.org> | 2018-07-30 15:00:40 +0000 |
---|---|---|
committer | Jesper Schmitz Mouridsen <jsm@FreeBSD.org> | 2018-07-30 15:00:40 +0000 |
commit | 9c1a3531d4e5af327eb6a4c41395feecd7024bc2 (patch) | |
tree | bfd51854a6f2482e00a6c2bfa1c3539f562027a2 | |
parent | 1111df16e49043944d6aeb942e2e2fbf034ab906 (diff) | |
download | ports-9c1a3531d4e5af327eb6a4c41395feecd7024bc2.tar.gz ports-9c1a3531d4e5af327eb6a4c41395feecd7024bc2.zip |
Notes
-rw-r--r-- | sysutils/Makefile | 1 | ||||
-rw-r--r-- | sysutils/libsysstat/Makefile | 21 | ||||
-rw-r--r-- | sysutils/libsysstat/distinfo | 3 | ||||
-rw-r--r-- | sysutils/libsysstat/files/config.h.in | 3 | ||||
-rw-r--r-- | sysutils/libsysstat/files/patch-CMakeLists.txt | 32 | ||||
-rw-r--r-- | sysutils/libsysstat/files/patch-cpustat.cpp | 264 | ||||
-rw-r--r-- | sysutils/libsysstat/files/patch-cpustat.h | 26 | ||||
-rw-r--r-- | sysutils/libsysstat/files/patch-cpustat__p.h | 62 | ||||
-rw-r--r-- | sysutils/libsysstat/files/patch-memstat.cpp | 125 | ||||
-rw-r--r-- | sysutils/libsysstat/files/patch-memstat.h | 25 | ||||
-rw-r--r-- | sysutils/libsysstat/files/patch-netstat.cpp | 122 | ||||
-rw-r--r-- | sysutils/libsysstat/pkg-descr | 4 | ||||
-rw-r--r-- | sysutils/libsysstat/pkg-plist | 20 |
13 files changed, 708 insertions, 0 deletions
diff --git a/sysutils/Makefile b/sysutils/Makefile index dbdf269057aa..77031a8496be 100644 --- a/sysutils/Makefile +++ b/sysutils/Makefile @@ -598,6 +598,7 @@ SUBDIR += libieee1284 SUBDIR += libretto-config SUBDIR += libsunacl + SUBDIR += libsysstat SUBDIR += liburcu SUBDIR += libutempter SUBDIR += life-preserver diff --git a/sysutils/libsysstat/Makefile b/sysutils/libsysstat/Makefile new file mode 100644 index 000000000000..3bae8d431a78 --- /dev/null +++ b/sysutils/libsysstat/Makefile @@ -0,0 +1,21 @@ +# Created by: Olivier Duchateau +# $FreeBSD$ + +PORTNAME= libsysstat +PORTVERSION= 0.4.1 +CATEGORIES= sysutils +MASTER_SITES= LXQT/${PORTNAME} + +MAINTAINER= jsm@FreeBSD.org +COMMENT= Library used to query system info and statistics + +LICENSE= LGPL21 + +USES= cmake:outsource lxqt pkgconfig tar:xz qt:5 +USE_QT= qmake_build buildtools_build core +USE_LXQT= buildtools + +post-extract: + @${CP} ${FILESDIR}/config.h.in ${WRKSRC}; + +.include <bsd.port.mk> diff --git a/sysutils/libsysstat/distinfo b/sysutils/libsysstat/distinfo new file mode 100644 index 000000000000..07f367046631 --- /dev/null +++ b/sysutils/libsysstat/distinfo @@ -0,0 +1,3 @@ +TIMESTAMP = 1532774948 +SHA256 (lxqt/libsysstat-0.4.1.tar.xz) = c376e5c3a650d56873f2bd757292282f6b6b5af7ecc6d24c7a4df7b8c646ff59 +SIZE (lxqt/libsysstat-0.4.1.tar.xz) = 17304 diff --git a/sysutils/libsysstat/files/config.h.in b/sysutils/libsysstat/files/config.h.in new file mode 100644 index 000000000000..05211acde503 --- /dev/null +++ b/sysutils/libsysstat/files/config.h.in @@ -0,0 +1,3 @@ +#cmakedefine HAVE_SYSCTL_H +#cmakedefine HAVE_IF_H +#cmakedefine HAVE_KVM_H diff --git a/sysutils/libsysstat/files/patch-CMakeLists.txt b/sysutils/libsysstat/files/patch-CMakeLists.txt new file mode 100644 index 000000000000..e30d36bc414b --- /dev/null +++ b/sysutils/libsysstat/files/patch-CMakeLists.txt @@ -0,0 +1,32 @@ +--- CMakeLists.txt.orig 2018-05-21 17:16:59 UTC ++++ CMakeLists.txt +@@ -24,6 +24,16 @@ include(LXQtCreatePkgConfigFile) + include(LXQtCreatePortableHeaders) + include(LXQtCompilerSettings NO_POLICY_SCOPE) + ++include(CheckIncludeFiles) ++include(CheckLibraryExists) ++ ++check_include_files("sys/socket.h;net/if.h;net/if_mib.h;net/if_types.h" HAVE_IF_H) ++check_library_exists(kvm kvm_getswapinfo "kvm.h" HAVE_KVM_H) ++check_library_exists(c sysctlbyname "sys/sysctl.h" HAVE_SYSCTL_H) ++ ++configure_file(config.h.in config.h) ++add_definitions("-DHAVE_CONFIG_H=1") ++ + set(CMAKE_AUTOMOC ON) + set(CMAKE_INCLUDE_CURRENT_DIR ON) + +@@ -81,7 +91,11 @@ add_library(${SYSSTAT_LIBRARY_NAME} + ${SYSSTAT_QM_FILES} + ) + +-target_link_libraries(${SYSSTAT_LIBRARY_NAME} Qt5::Core) ++if(HAVE_SYSCTL_H AND HAVE_KVM_H) ++ target_link_libraries(${SYSSTAT_LIBRARY_NAME} c kvm Qt5::Core) ++else() ++ target_link_libraries(${SYSSTAT_LIBRARY_NAME} Qt5::Core) ++endif() + + set_target_properties(${SYSSTAT_LIBRARY_NAME} PROPERTIES + VERSION ${SYSSTAT_VERSION} diff --git a/sysutils/libsysstat/files/patch-cpustat.cpp b/sysutils/libsysstat/files/patch-cpustat.cpp new file mode 100644 index 000000000000..39b971899d44 --- /dev/null +++ b/sysutils/libsysstat/files/patch-cpustat.cpp @@ -0,0 +1,264 @@ +--- cpustat.cpp.orig 2018-05-21 17:16:59 UTC ++++ cpustat.cpp +@@ -25,13 +25,64 @@ + + + #include <unistd.h> +- + #include "cpustat.h" ++#ifdef HAVE_SYSCTL_H ++extern "C" ++{ ++ #include <stdlib.h> ++ #include <limits.h> ++ #include <string.h> ++ #include <sys/resource.h> /* CPUSTATES */ ++ ++ #include <sys/types.h> ++ #include <sys/sysctl.h> ++} ++#endif ++ + #include "cpustat_p.h" + + + namespace SysStat { ++#ifdef HAVE_SYSCTL_H ++char *GetFirstFragment(char *string, const char *delim) ++{ ++ char *token = NULL; ++ ++ token = strsep(&string, delim); ++ if (token != NULL) ++ { ++ /* We need only the first fragment, so no loop! */ ++ return token; ++ } ++ else ++ return NULL; ++} ++ ++int GetCpu(void) ++{ ++ static int mib[] = { CTL_HW, HW_NCPU }; ++ int buf; ++ size_t len = sizeof(int); ++ ++ if (sysctl(mib, 2, &buf, &len, NULL, 0) < 0) ++ return 0; ++ else ++ return buf; ++} ++ ++/* Frequence is in MHz */ ++ulong CurrentFreq(void) ++{ ++ ulong freq=0; ++ size_t len = sizeof(freq); ++ ++ if (sysctlbyname("dev.cpu.0.freq", &freq, &len, NULL, 0) < 0) // man cpufreq BUGS section all cores have the same frequency. ++ return 0; ++ else ++ return freq; + ++} ++#endif + CpuStatPrivate::CpuStatPrivate(CpuStat *parent) + : BaseStatPrivate(parent) + , mMonitoring(CpuStat::LoadAndFrequency) +@@ -39,7 +90,11 @@ CpuStatPrivate::CpuStatPrivate(CpuStat * + mSource = defaultSource(); + + connect(mTimer, SIGNAL(timeout()), SLOT(timeout())); +- ++#ifdef HAVE_SYSCTL_H ++ size_t flen=2; ++ sysctlnametomib("kern.cp_times",mib0,&flen); ++ sysctlnametomib("kern.cp_time",mib1,&flen); ++#endif + mUserHz = sysconf(_SC_CLK_TCK); + + updateSources(); +@@ -47,6 +102,49 @@ CpuStatPrivate::CpuStatPrivate(CpuStat * + + void CpuStatPrivate::addSource(const QString &source) + { ++#ifdef HAVE_SYSCTL_H ++ char buf[1024]; ++ char *tokens, *t; ++ ulong min = 0, max = 0; ++ size_t len = sizeof(buf); ++ ++ /* The string returned by the dev.cpu.0.freq_levels sysctl ++ * is a space separated list of MHz/milliwatts. ++ */ ++ if (sysctlbyname("dev.cpu.0.freq_levels", buf, &len, NULL, 0) < 0) ++ return; ++ ++ t = strndup(buf, len); ++ if (t == NULL) ++ { ++ free(t); ++ return; ++ } ++ ++ while ((tokens = strsep(&t, " ")) != NULL) ++ { ++ char *freq; ++ ulong res; ++ ++ freq = GetFirstFragment(tokens, "/"); ++ if (freq != NULL) ++ { ++ res = strtoul(freq, &freq, 10); ++ if (res > max) ++ { ++ max = res; ++ } ++ else ++ { ++ if ((min == 0) || (res < min)) ++ min = res; ++ } ++ } ++ } ++ ++ free(t); ++ mBounds[source] = qMakePair(min, max); ++#else + bool ok; + + uint min = readAllFile(qPrintable(QString("/sys/devices/system/cpu/%1/cpufreq/scaling_min_freq").arg(source))).toUInt(&ok); +@@ -56,12 +154,27 @@ void CpuStatPrivate::addSource(const QSt + if (ok) + mBounds[source] = qMakePair(min, max); + } ++#endif + } + + void CpuStatPrivate::updateSources() + { + mSources.clear(); ++#ifdef HAVE_SYSCTL_H ++ mBounds.clear(); ++ int cpu; ++ ++ cpu = GetCpu(); ++ mSources.append("cpu"); // Linux has cpu in /proc/stat ++ for (int i =0;i<cpu;i++) ++ { ++ mSources.append(QString("cpu%1").arg(i)); ++ ++ + ++ addSource(QString("cpu%1").arg(i)); ++ } ++#else + const QStringList rows = readAllFile("/proc/stat").split(QChar('\n'), QString::SkipEmptyParts); + for (const QString &row : rows) + { +@@ -99,6 +212,7 @@ void CpuStatPrivate::updateSources() + addSource(QString("cpu%1").arg(number)); + } + } ++#endif + } + + CpuStatPrivate::~CpuStatPrivate() +@@ -127,6 +241,88 @@ void CpuStatPrivate::recalculateMinMax() + + void CpuStatPrivate::timeout() + { ++#ifdef HAVE_SYSCTL_H ++ if ( (mMonitoring == CpuStat::LoadOnly) ++ || (mMonitoring == CpuStat::LoadAndFrequency) ) ++ { ++ int cpuNumber=0; ++ long *cp_times=0; ++ if(mSource!="cpu") { ++ size_t cp_size = sizeof(long) * CPUSTATES * GetCpu(); ++ cp_times = (long *)malloc(cp_size); ++ cpuNumber = mSource.midRef(3).toInt(); ++ if (sysctl(mib0,2, cp_times, &cp_size, NULL, 0) < 0) ++ free(cp_times); ++ } else { ++ size_t cp_size = sizeof(long)*CPUSTATES; ++ cp_times = (long *)malloc(cp_size); ++ if(sysctl(mib1,2,cp_times,&cp_size,NULL,0) < 0) ++ free(cp_times); ++ } ++ Values current; ++ current.user = static_cast<ulong>(cp_times[CP_USER+cpuNumber*CPUSTATES]); ++ current.nice = static_cast<ulong>(cp_times[CP_NICE+cpuNumber*CPUSTATES]); ++ current.system = static_cast<ulong>(cp_times[CP_SYS+cpuNumber*CPUSTATES]); ++ current.idle = static_cast<ulong>(cp_times[CP_IDLE+cpuNumber*CPUSTATES]); ++ current.other = static_cast<ulong>(cp_times[CP_INTR+cpuNumber*CPUSTATES]); ++ current.total = current.user + current.nice + current.system+current.idle+current.other; ++ ++ float sumDelta = static_cast<float>(current.total - mPrevious.total); ++ ++ if ((mPrevious.total != 0) && ((sumDelta < mIntervalMin) || (sumDelta > mIntervalMax))) ++ { ++ if (mMonitoring == CpuStat::LoadAndFrequency) ++ emit update(0.0, 0.0, 0.0, 0.0, 0.0, 0); ++ else ++ emit update(0.0, 0.0, 0.0, 0.0); ++ ++ mPrevious.clear(); ++ } ++ else ++ { ++ if (mMonitoring == CpuStat::LoadAndFrequency) ++ { ++ float freqRate = 1.0; ++ ulong freq = CurrentFreq(); ++ if (freq > 0) ++ { ++ if(mSource=="cpu") ++ freqRate = static_cast<float>(freq) / static_cast<float>(mBounds[QStringLiteral("cpu0")].second);// use max cpu0 for this case ++ else ++ freqRate = static_cast<float>(freq) / static_cast<float>(mBounds[mSource].second); ++ emit update( ++ static_cast<float>(current.user - mPrevious.user ) / sumDelta, ++ static_cast<float>(current.nice - mPrevious.nice ) / sumDelta, ++ static_cast<float>(current.system - mPrevious.system) / sumDelta, ++ static_cast<float>(current.other - mPrevious.other ) / sumDelta, ++ static_cast<float>(freqRate), ++ freq); ++ } ++ } ++ else ++ { ++ emit update( ++ static_cast<float>(current.user - mPrevious.user ) / sumDelta, ++ static_cast<float>(current.nice - mPrevious.nice ) / sumDelta, ++ static_cast<float>(current.system - mPrevious.system) / sumDelta, ++ static_cast<float>(current.other - mPrevious.other ) / sumDelta); ++ } ++ ++ ++ mPrevious = current; ++ } ++ ++ free(cp_times); ++ } ++ else ++ { ++ ulong freq = 0; ++ ++ freq = CurrentFreq(); ++ if (freq > 0) ++ emit update(freq); ++ } ++#else + if ( (mMonitoring == CpuStat::LoadOnly) + || (mMonitoring == CpuStat::LoadAndFrequency) ) + { +@@ -261,6 +457,7 @@ void CpuStatPrivate::timeout() + } + emit update(freq); + } ++#endif + } + + QString CpuStatPrivate::defaultSource() diff --git a/sysutils/libsysstat/files/patch-cpustat.h b/sysutils/libsysstat/files/patch-cpustat.h new file mode 100644 index 000000000000..cca9c5ce905d --- /dev/null +++ b/sysutils/libsysstat/files/patch-cpustat.h @@ -0,0 +1,26 @@ +--- cpustat.h.orig 2018-07-28 14:34:23 UTC ++++ cpustat.h +@@ -27,7 +27,9 @@ + #ifndef LIBSYSSTAT__CPU_STAT__INCLUDED + #define LIBSYSSTAT__CPU_STAT__INCLUDED + +- ++#ifdef HAVE_CONFIG_H ++#include "config.h" ++#endif + #include <QtCore/QObject> + + #include "basestat.h" +@@ -35,6 +37,12 @@ + + namespace SysStat { + ++#ifdef HAVE_SYSCTL_H ++ char *GetFirstFragment(char *string, const char *delim); ++ int GetCpu(void); ++ ulong CurrentFreq(void); ++#endif ++ + class CpuStatPrivate; + + class SYSSTATSHARED_EXPORT CpuStat : public BaseStat diff --git a/sysutils/libsysstat/files/patch-cpustat__p.h b/sysutils/libsysstat/files/patch-cpustat__p.h new file mode 100644 index 000000000000..3b7d44490d46 --- /dev/null +++ b/sysutils/libsysstat/files/patch-cpustat__p.h @@ -0,0 +1,62 @@ +--- cpustat_p.h.orig 2018-07-28 14:34:10 UTC ++++ cpustat_p.h +@@ -27,6 +27,9 @@ + #ifndef LIBSYSSTAT__CPU_STAT__PRIVATE__INCLUDED + #define LIBSYSSTAT__CPU_STAT__PRIVATE__INCLUDED + ++#ifdef HAVE_CONFIG_H ++#include "config.h" ++#endif + + #include <QtCore/QObject> + #include <QtCore/QtGlobal> +@@ -52,8 +55,13 @@ public: + CpuStat::Monitoring monitoring() const; + void setMonitoring(CpuStat::Monitoring value); + ++#ifdef HAVE_SYSCTL_H ++ ulong minFreq(const QString &source) const; ++ ulong maxFreq(const QString &source) const; ++#else + uint minFreq(const QString &source) const; + uint maxFreq(const QString &source) const; ++#endif + + signals: + void update(float user, float nice, float system, float other); +@@ -74,12 +82,21 @@ private: + { + Values(); + ++#ifdef HAVE_SYSCTL_H ++ ulong user; ++ ulong nice; ++ ulong system; ++ ulong idle; ++ ulong other; ++ ulong total; ++#else + qulonglong user; + qulonglong nice; + qulonglong system; + qulonglong idle; + qulonglong other; + qulonglong total; ++#endif + + void sum(); + +@@ -89,7 +106,13 @@ private: + + CpuStat::Monitoring mMonitoring; + ++#ifdef HAVE_SYSCTL_H ++ typedef QMap<QString, QPair<ulong, ulong> > Bounds; ++ int mib0[2]; ++ int mib1[2]; ++#else + typedef QMap<QString, QPair<uint, uint> > Bounds; ++#endif + Bounds mBounds; + + int mUserHz; diff --git a/sysutils/libsysstat/files/patch-memstat.cpp b/sysutils/libsysstat/files/patch-memstat.cpp new file mode 100644 index 000000000000..938f8ac5af6e --- /dev/null +++ b/sysutils/libsysstat/files/patch-memstat.cpp @@ -0,0 +1,125 @@ +--- memstat.cpp.orig 2018-07-28 14:33:22 UTC ++++ memstat.cpp +@@ -26,10 +26,61 @@ + + #include "memstat.h" + #include "memstat_p.h" ++#ifdef HAVE_CONFIG_H ++#include "config.h" ++#endif ++#if defined(HAVE_KVM_H) && defined(HAVE_SYSCTL_H) ++extern "C" ++{ ++ #include <paths.h> ++ #include <unistd.h> ++ #include <fcntl.h> + ++ #include <kvm.h> ++ #include <sys/types.h> ++ #include <sys/sysctl.h> ++} ++#endif + + namespace SysStat { ++#ifdef HAVE_SYSCTL_H ++int SwapDevices() ++{ ++ int buf; ++ size_t len = sizeof(int); + ++ if (sysctlbyname("vm.nswapdev", &buf, &len, NULL, 0) < 0) ++ return 0; ++ else ++ return buf; ++} ++ ++qulonglong MemGetByBytes(QString property) ++{ ++ qulonglong buf=0; ++ size_t len = sizeof(qulonglong); ++ ++ std::string s = property.toStdString(); ++ const char *name = s.c_str(); ++ ++ if (sysctlbyname(name, &buf, &len, NULL, 0) < 0) ++ return 0; ++ else ++ return buf; ++} ++ ++qulonglong MemGetByPages(QString name) ++{ ++ qulonglong res = 0; ++ ++ ++ res = MemGetByBytes(name); ++ if (res > 0) ++ res = res * getpagesize(); ++ ++ return res; ++} ++#endif + MemStatPrivate::MemStatPrivate(MemStat *parent) + : BaseStatPrivate(parent) + { +@@ -52,7 +103,38 @@ void MemStatPrivate::timeout() + qulonglong memCached = 0; + qulonglong swapTotal = 0; + qulonglong swapFree = 0; ++#ifdef HAVE_SYSCTL_H ++ memTotal = MemGetByBytes("hw.physmem"); ++ memFree = MemGetByPages("vm.stats.vm.v_free_count"); ++ memBuffers = MemGetByBytes("vfs.bufspace"); ++ memCached = MemGetByPages("vm.stats.vm.v_inactive_count"); ++#endif ++#ifdef HAVE_KVM_H ++ qulonglong swapUsed = 0; ++ kvm_t *kd; ++ struct kvm_swap kswap[16]; /* size taken from pstat/pstat.c */ ++ ++ kd = kvm_open(NULL, _PATH_DEVNULL, NULL, O_RDONLY, "kvm_open"); ++ if (kd == NULL) ++ kvm_close(kd); ++ ++ if (kvm_getswapinfo(kd, kswap, (sizeof(kswap) / sizeof(kswap[0])), SWIF_DEV_PREFIX) > 0) ++ { ++ int swapd = SwapDevices(); ++ /* TODO: loop over swap devives */ ++ if (swapd >= 1) ++ { ++ swapTotal = static_cast<qulonglong>(kswap[0].ksw_total * getpagesize()); ++ swapUsed = static_cast<qulonglong>(kswap[0].ksw_used * getpagesize()); ++ } ++ ++ kvm_close(kd); ++ } ++ else ++ kvm_close(kd); ++#endif + ++#ifndef HAVE_SYSCTL_H + const QStringList rows = readAllFile("/proc/meminfo").split(QChar('\n'), QString::SkipEmptyParts); + for (const QString &row : rows) + { +@@ -73,7 +155,7 @@ void MemStatPrivate::timeout() + else if(tokens[0] == "SwapFree:") + swapFree = tokens[1].toULong(); + } +- ++#endif + if (mSource == "memory") + { + if (memTotal) +@@ -90,8 +172,11 @@ void MemStatPrivate::timeout() + { + if (swapTotal) + { ++#ifndef HAVE_KVM_H + float swapUsed_d = static_cast<float>(swapTotal - swapFree) / static_cast<float>(swapTotal); +- ++#else ++ float swapUsed_d = static_cast<float>(swapUsed) / static_cast<float>(swapTotal); ++#endif + emit swapUpdate(swapUsed_d); + } + } diff --git a/sysutils/libsysstat/files/patch-memstat.h b/sysutils/libsysstat/files/patch-memstat.h new file mode 100644 index 000000000000..1f8b2abee853 --- /dev/null +++ b/sysutils/libsysstat/files/patch-memstat.h @@ -0,0 +1,25 @@ +--- memstat.h.orig 2018-07-28 14:33:10 UTC ++++ memstat.h +@@ -27,6 +27,9 @@ + #ifndef LIBSYSSTAT__MEM_STAT__INCLUDED + #define LIBSYSSTAT__MEM_STAT__INCLUDED + ++#ifdef HAVE_CONFIG_H ++#include "config.h" ++#endif + + #include <QtCore/QObject> + +@@ -35,6 +38,12 @@ + + namespace SysStat { + ++#if defined(HAVE_SYSCTL_H) && defined(HAVE_KVM_H) ++ int SwapDevices(); ++ qulonglong MemGetByBytes(const QString property); ++ qulonglong MemGetByPages(const QString property); ++#endif ++ + class MemStatPrivate; + + class SYSSTATSHARED_EXPORT MemStat : public BaseStat diff --git a/sysutils/libsysstat/files/patch-netstat.cpp b/sysutils/libsysstat/files/patch-netstat.cpp new file mode 100644 index 000000000000..5dae935a35ae --- /dev/null +++ b/sysutils/libsysstat/files/patch-netstat.cpp @@ -0,0 +1,122 @@ +--- netstat.cpp.orig 2018-07-28 14:38:10 UTC ++++ netstat.cpp +@@ -26,7 +26,21 @@ + + #include "netstat.h" + #include "netstat_p.h" ++#ifdef HAVE_CONFIG_H ++#include "config.h" ++#endif + ++#if defined(HAVE_SYSCTL_H) && defined(HAVE_IF_H) ++extern "C" ++{ ++ #include <net/if.h> ++ #include <net/if_mib.h> ++ #include <net/if_types.h> ++ #include <sys/socket.h> /* PF_LINK */ ++ #include <sys/types.h> ++ #include <sys/sysctl.h> ++} ++#endif + + namespace SysStat { + +@@ -37,7 +51,7 @@ NetStatPrivate::NetStatPrivate(NetStat * + + connect(mTimer, SIGNAL(timeout()), SLOT(timeout())); + +- ++#ifndef HAVE_SYSCTL_H + QStringList rows(readAllFile("/proc/net/dev").split(QChar('\n'), QString::SkipEmptyParts)); + + rows.erase(rows.begin(), rows.begin() + 2); +@@ -50,6 +64,29 @@ NetStatPrivate::NetStatPrivate(NetStat * + + mSources.append(tokens[0].trimmed()); + } ++#else ++ int count; ++ size_t len; ++ int cntifmib[] = { CTL_NET, PF_LINK, NETLINK_GENERIC, IFMIB_SYSTEM, IFMIB_IFCOUNT };// net.link.generic.system.ifcount; ++ len = sizeof(int); ++ if (sysctl(cntifmib, 5, &count, &len, NULL, 0) < 0) ++ perror("sysctl"); ++ ++ ++ struct ifmibdata ifmd; ++ size_t len1 = sizeof(ifmd); ++ for (int i=1; i<=count;i++) { ++ int name[] = { CTL_NET, PF_LINK, NETLINK_GENERIC, IFMIB_IFDATA, i, IFDATA_GENERAL }; ++ ++ if (sysctl(name, 6, &ifmd, &len1, NULL, 0) < 0) { ++ perror("sysctl"); ++ } ++ if ((ifmd.ifmd_data.ifi_type == IFT_ETHER) || (ifmd.ifmd_data.ifi_type == IFT_IEEE80211)) { ++ const char *iface = ifmd.ifmd_name; ++ mSources.append(QString::fromLatin1(iface)); ++ } ++ } ++#endif + } + + NetStatPrivate::~NetStatPrivate() +@@ -58,6 +95,50 @@ NetStatPrivate::~NetStatPrivate() + + void NetStatPrivate::timeout() + { ++#if defined(HAVE_IF_H) && defined(HAVE_SYSCTL_H) ++ int count; ++ size_t len; ++ int name[] = { CTL_NET, PF_LINK, NETLINK_GENERIC, IFMIB_SYSTEM, IFMIB_IFCOUNT }; ++ struct ifmibdata ifmd; ++ ++ len = sizeof(int); ++ if (sysctl(name, 5, &count, &len, NULL, 0) < 0) ++ return; ++ ++ for (int i = 1; i <= count; i++) ++ { ++ len = sizeof(ifmd); ++ int name[] = { CTL_NET, PF_LINK, NETLINK_GENERIC, IFMIB_IFDATA, i, IFDATA_GENERAL }; ++ ++ if (sysctl(name, 6, &ifmd, &len, NULL, 0) < 0) ++ break; ++ ++ if ((ifmd.ifmd_data.ifi_type == IFT_ETHER) || (ifmd.ifmd_data.ifi_type == IFT_IEEE80211)) ++ { ++ const char *iface = ifmd.ifmd_name; ++ QString interfaceName = QString::fromLatin1(iface); ++ if ((ifmd.ifmd_data.ifi_link_state == LINK_STATE_UP) && (ifmd.ifmd_data.ifi_ipackets > 0)) ++ { ++ ++ ++ Values current; ++ current.received = ifmd.ifmd_data.ifi_ibytes; ++ current.transmitted = ifmd.ifmd_data.ifi_obytes; ++ ++ if (!mPrevious.contains(interfaceName)) ++ mPrevious.insert(interfaceName, Values()); ++ const Values &previous = mPrevious[interfaceName]; ++ ++ if (interfaceName == mSource) ++ emit update((( current.received - previous.received ) * 1000 ) / mTimer->interval(), (( current.transmitted - previous.transmitted ) * 1000 ) / mTimer->interval()); ++ ++ mPrevious[interfaceName] = current; ++ } else if(interfaceName == mSource) ++ emit(update(0,0)); ++ ++ } ++ } ++#else + QStringList rows(readAllFile("/proc/net/dev").split(QChar('\n'), QString::SkipEmptyParts)); + + +@@ -99,6 +180,7 @@ void NetStatPrivate::timeout() + + mPrevious[interfaceName] = current; + } ++#endif + } + + QString NetStatPrivate::defaultSource() diff --git a/sysutils/libsysstat/pkg-descr b/sysutils/libsysstat/pkg-descr new file mode 100644 index 000000000000..6dad55fa2870 --- /dev/null +++ b/sysutils/libsysstat/pkg-descr @@ -0,0 +1,4 @@ +Qt-based library to query system information like CPU, memory usage and +network traffic. + +WWW: http://lxqt.org/ diff --git a/sysutils/libsysstat/pkg-plist b/sysutils/libsysstat/pkg-plist new file mode 100644 index 000000000000..8b017597da8f --- /dev/null +++ b/sysutils/libsysstat/pkg-plist @@ -0,0 +1,20 @@ +include/sysstat-qt5/SysStat/BaseStat +include/sysstat-qt5/SysStat/CpuStat +include/sysstat-qt5/SysStat/Global +include/sysstat-qt5/SysStat/MemStat +include/sysstat-qt5/SysStat/NetStat +include/sysstat-qt5/SysStat/Version +include/sysstat-qt5/basestat.h +include/sysstat-qt5/cpustat.h +include/sysstat-qt5/memstat.h +include/sysstat-qt5/netstat.h +include/sysstat-qt5/sysstat_global.h +include/sysstat-qt5/version.h +lib/libsysstat-qt5.so +lib/libsysstat-qt5.so.0 +lib/libsysstat-qt5.so.%%VERSION%% +libdata/pkgconfig/sysstat-qt5.pc +share/cmake/sysstat-qt5/sysstat-qt5-config-version.cmake +share/cmake/sysstat-qt5/sysstat-qt5-config.cmake +share/cmake/sysstat-qt5/sysstat-qt5-targets-%%CMAKE_BUILD_TYPE%%.cmake +share/cmake/sysstat-qt5/sysstat-qt5-targets.cmake |