Move from regex to LVM Field options
This commit is contained in:
parent
3170e0a6a9
commit
aeaecad6fb
|
@ -61,7 +61,7 @@ void LvmDevice::initPartitions()
|
||||||
pTable->append(p);
|
pTable->append(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
this->setPartitionTable(pTable);
|
setPartitionTable(pTable);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -78,7 +78,7 @@ QList<Partition*> LvmDevice::scanPartitions(const Device& dev, PartitionTable* p
|
||||||
QStringLiteral("B"),
|
QStringLiteral("B"),
|
||||||
dev.name()});
|
dev.name()});
|
||||||
if (cmd.run(-1) && cmd.exitCode() == 0) {
|
if (cmd.run(-1) && cmd.exitCode() == 0) {
|
||||||
QRegularExpression pathRE(QStringLiteral("LV Path\\h+((\\w|\/)+)"));
|
QRegularExpression pathRE(QStringLiteral("LV Path\\h+((\\w|/)+)"));
|
||||||
QRegularExpressionMatchIterator pathMatch = pathRE.globalMatch(cmd.output());
|
QRegularExpressionMatchIterator pathMatch = pathRE.globalMatch(cmd.output());
|
||||||
while (pathMatch.hasNext()) {
|
while (pathMatch.hasNext()) {
|
||||||
QRegularExpressionMatch path = pathMatch.next();
|
QRegularExpressionMatch path = pathMatch.next();
|
||||||
|
@ -87,7 +87,7 @@ QList<Partition*> LvmDevice::scanPartitions(const Device& dev, PartitionTable* p
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (QString lvNode, lvNodeList) {
|
foreach (QString lvNode, lvNodeList) {
|
||||||
pList.append(this->scanPartition(lvNode, dev, pTable));
|
pList.append(scanPartition(lvNode, dev, pTable));
|
||||||
}
|
}
|
||||||
|
|
||||||
return pList;
|
return pList;
|
||||||
|
@ -136,87 +136,66 @@ Partition* LvmDevice::scanPartition(const QString& lvPath, const Device& dev, Pa
|
||||||
return part;
|
return part;
|
||||||
}
|
}
|
||||||
|
|
||||||
qint32 LvmDevice::getPeSize(const QString& vgname)
|
QList<QString> LvmDevice::deviceNodeList() const
|
||||||
{
|
{
|
||||||
ExternalCommand cmd(QStringLiteral("lvm"),
|
QList<QString> devPathList;
|
||||||
{ QStringLiteral("vgdisplay"),
|
QString cmdOutput = getField(QStringLiteral("pv_name"), name());
|
||||||
QStringLiteral("--units"),
|
|
||||||
QStringLiteral("B"),
|
if (cmdOutput.size()) {
|
||||||
vgname});
|
QList<QString> tempPathList = cmdOutput.split(QStringLiteral("\n"), QString::SkipEmptyParts);
|
||||||
if (cmd.run(-1) && cmd.exitCode() == 0) {
|
foreach(QString devPath, tempPathList) {
|
||||||
QRegularExpression re(QStringLiteral("PE Size\\h+(\\d+)"));
|
devPathList.append(devPath.trimmed());
|
||||||
QRegularExpressionMatch match = re.match(cmd.output());
|
|
||||||
if (match.hasMatch()) {
|
|
||||||
return match.captured(1).toInt();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return -1;
|
|
||||||
|
return devPathList;
|
||||||
|
}
|
||||||
|
|
||||||
|
qint32 LvmDevice::getPeSize(const QString& vgname)
|
||||||
|
{
|
||||||
|
QString val = getField(QStringLiteral("vg_extent_size"), vgname);
|
||||||
|
return val.isEmpty() ? -1 : val.toInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
qint32 LvmDevice::getTotalPE(const QString& vgname)
|
qint32 LvmDevice::getTotalPE(const QString& vgname)
|
||||||
{
|
{
|
||||||
ExternalCommand cmd(QStringLiteral("lvm"),
|
QString val = getField(QStringLiteral("vg_extent_count"), vgname);
|
||||||
{ QStringLiteral("vgdisplay"),
|
return val.isEmpty() ? -1 : val.toInt();
|
||||||
QStringLiteral("--units"),
|
|
||||||
QStringLiteral("B"),
|
|
||||||
vgname});
|
|
||||||
if (cmd.run(-1) && cmd.exitCode() == 0) {
|
|
||||||
QRegularExpression re(QStringLiteral("Total PE\\h+(\\d+)"));
|
|
||||||
QRegularExpressionMatch match = re.match(cmd.output());
|
|
||||||
if (match.hasMatch()) {
|
|
||||||
return match.captured(1).toInt();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
qint32 LvmDevice::getAllocatedPE(const QString& vgname)
|
qint32 LvmDevice::getAllocatedPE(const QString& vgname)
|
||||||
{
|
{
|
||||||
ExternalCommand cmd(QStringLiteral("lvm"),
|
return getTotalPE(vgname) - getFreePE(vgname);
|
||||||
{ QStringLiteral("vgdisplay"),
|
|
||||||
QStringLiteral("--units"),
|
|
||||||
QStringLiteral("B"),
|
|
||||||
vgname});
|
|
||||||
if (cmd.run(-1) && cmd.exitCode() == 0) {
|
|
||||||
QRegularExpression re(QStringLiteral("Alloc PE / Size\\h+(\\d+)"));
|
|
||||||
QRegularExpressionMatch match = re.match(cmd.output());
|
|
||||||
if (match.hasMatch()) {
|
|
||||||
return match.captured(1).toInt();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
qint32 LvmDevice::getFreePE(const QString& vgname)
|
qint32 LvmDevice::getFreePE(const QString& vgname)
|
||||||
{
|
{
|
||||||
ExternalCommand cmd(QStringLiteral("lvm"),
|
QString val = getField(QStringLiteral("vg_free_count"), vgname);
|
||||||
{ QStringLiteral("vgdisplay"),
|
return val.isEmpty() ? -1 : val.toInt();
|
||||||
QStringLiteral("--units"),
|
|
||||||
QStringLiteral("B"),
|
|
||||||
vgname});
|
|
||||||
if (cmd.run(-1) && cmd.exitCode() == 0) {
|
|
||||||
QRegularExpression re(QStringLiteral("Free PE / Size\\h+(\\d+)"));
|
|
||||||
QRegularExpressionMatch match = re.match(cmd.output());
|
|
||||||
if (match.hasMatch()) {
|
|
||||||
return match.captured(1).toInt();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QString LvmDevice::getUUID(const QString& vgname)
|
QString LvmDevice::getUUID(const QString& vgname)
|
||||||
|
{
|
||||||
|
QString val = getField(QStringLiteral("vg_uuid"), vgname);
|
||||||
|
return val.isEmpty() ? QStringLiteral("---") : val;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
QString LvmDevice::getField(const QString& fieldName, const QString& vgname)
|
||||||
{
|
{
|
||||||
ExternalCommand cmd(QStringLiteral("lvm"),
|
ExternalCommand cmd(QStringLiteral("lvm"),
|
||||||
{ QStringLiteral("vgdisplay"),
|
{ QStringLiteral("vgs"),
|
||||||
|
QStringLiteral("--foreign"),
|
||||||
|
QStringLiteral("--readonly"),
|
||||||
|
QStringLiteral("--noheadings"),
|
||||||
QStringLiteral("--units"),
|
QStringLiteral("--units"),
|
||||||
QStringLiteral("B"),
|
QStringLiteral("B"),
|
||||||
vgname});
|
QStringLiteral("--nosuffix"),
|
||||||
|
QStringLiteral("--options"),
|
||||||
|
fieldName,
|
||||||
|
vgname });
|
||||||
if (cmd.run(-1) && cmd.exitCode() == 0) {
|
if (cmd.run(-1) && cmd.exitCode() == 0) {
|
||||||
QRegularExpression re(QStringLiteral("LV UUID\\h+(\\w+)"));
|
return cmd.output().trimmed();
|
||||||
QRegularExpressionMatch match = re.match(cmd.output());
|
|
||||||
if (match.hasMatch()) {
|
|
||||||
return match.captured(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return QStringLiteral("---");
|
return QString();
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,9 +56,11 @@ public:
|
||||||
static qint32 getAllocatedPE(const QString& name);
|
static qint32 getAllocatedPE(const QString& name);
|
||||||
static qint32 getFreePE(const QString& name);
|
static qint32 getFreePE(const QString& name);
|
||||||
static QString getUUID(const QString& name);
|
static QString getUUID(const QString& name);
|
||||||
|
static QString getField(const QString& fieldName, const QString& vgname = QString());
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void initPartitions();
|
void initPartitions();
|
||||||
|
QList<QString> deviceNodeList() const override;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
qint32 peSize() const {
|
qint32 peSize() const {
|
||||||
|
|
|
@ -34,3 +34,16 @@ VolumeManagerDevice::VolumeManagerDevice(const QString& name,
|
||||||
: Device(name, devicenode, logicalSize, totalLogical, iconname, type)
|
: Device(name, devicenode, logicalSize, totalLogical, iconname, type)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString VolumeManagerDevice::prettyDeviceNodeList() const
|
||||||
|
{
|
||||||
|
QString rval;
|
||||||
|
foreach (QString devNode, deviceNodeList()) {
|
||||||
|
rval += devNode + QStringLiteral(",");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rval.size()) {
|
||||||
|
rval.chop(1);
|
||||||
|
}
|
||||||
|
return rval;
|
||||||
|
}
|
||||||
|
|
|
@ -45,10 +45,14 @@ class LIBKPMCORE_EXPORT VolumeManagerDevice : public Device
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
VolumeManagerDevice(const QString& name, const QString& devicenode, const qint32 logicalSize, const qint64 totalLogical, const QString& iconname = QString(), Device::Type type = Device::Unknown_Device);
|
VolumeManagerDevice(const QString& name, const QString& devicenode, const qint32 logicalSize, const qint64 totalLogical, const QString& iconname = QString(), Device::Type type = Device::Unknown_Device);
|
||||||
|
virtual QList<QString> deviceNodeList() const = 0; /** Return list of physical device or partitions that makes up volumeManagerDevice */
|
||||||
|
|
||||||
public:
|
public:
|
||||||
//virtual void refresh() const = 0; /* VG infos can be changed, unlike disk_device */
|
//virtual void refresh() const = 0; /* VG infos can be changed, unlike disk_device */
|
||||||
//virtual Qlist<Partition*> listDevices() const = 0;
|
//virtual Qlist<Partition*> listDevices() const = 0;
|
||||||
|
virtual QString prettyDeviceNodeList() const;
|
||||||
|
|
||||||
|
private:
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -60,7 +60,7 @@ ExternalCommand::ExternalCommand(Report& report, const QString& cmd, const QStri
|
||||||
|
|
||||||
void ExternalCommand::setup()
|
void ExternalCommand::setup()
|
||||||
{
|
{
|
||||||
setEnvironment(QStringList() << QStringLiteral("LC_ALL=C") << QStringLiteral("PATH=") + QString::fromUtf8(getenv("PATH")));
|
setEnvironment(QStringList() << QStringLiteral("LC_ALL=C") << QStringLiteral("PATH=") + QString::fromUtf8(getenv("PATH")) << QStringLiteral("LVM_SUPPRESS_FD_WARNINGS=1"));
|
||||||
setProcessChannelMode(MergedChannels);
|
setProcessChannelMode(MergedChannels);
|
||||||
|
|
||||||
connect(this, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished), this, &ExternalCommand::onFinished);
|
connect(this, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished), this, &ExternalCommand::onFinished);
|
||||||
|
|
Loading…
Reference in New Issue