Refactored. Add linux package.

This commit is contained in:
Christian P. MOMON 2017-05-15 19:30:51 +02:00
parent 7cc23c84ac
commit c188e1f083
14 changed files with 810 additions and 38 deletions

View file

@ -16,6 +16,7 @@
<classpathentry kind="lib" path="lib/Logs/slf4j-log4j12-1.7.5.jar" sourcepath="lib/Logs/slf4j-log4j12-1.7.5-sources.jar"/> <classpathentry kind="lib" path="lib/Logs/slf4j-log4j12-1.7.5.jar" sourcepath="lib/Logs/slf4j-log4j12-1.7.5-sources.jar"/>
<classpathentry kind="lib" path="lib/UnitTesting/hamcrest-core-1.3.jar" sourcepath="lib/UnitTesting/hamcrest-core-1.3-sources.jar"/> <classpathentry kind="lib" path="lib/UnitTesting/hamcrest-core-1.3.jar" sourcepath="lib/UnitTesting/hamcrest-core-1.3-sources.jar"/>
<classpathentry kind="lib" path="lib/UnitTesting/junit-4.11.jar" sourcepath="lib/UnitTesting/junit-4.11-sources.jar"/> <classpathentry kind="lib" path="lib/UnitTesting/junit-4.11.jar" sourcepath="lib/UnitTesting/junit-4.11-sources.jar"/>
<classpathentry kind="lib" path="lib/devinsy-cmdexec-0.4.0.jar" sourcepath="lib/devinsy-cmdexec-0.4.0-sources.zip"/> <classpathentry kind="lib" path="lib/devinsy-cmdexec-0.4.1.jar" sourcepath="lib/devinsy-cmdexec-0.4.1-sources.zip"/>
<classpathentry kind="lib" path="lib/commons-io-2.5.jar" sourcepath="lib/commons-io-2.5-src.jar"/>
<classpathentry kind="output" path="bin"/> <classpathentry kind="output" path="bin"/>
</classpath> </classpath>

Binary file not shown.

BIN
lib/commons-io-2.5-src.jar Normal file

Binary file not shown.

BIN
lib/commons-io-2.5.jar Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,57 @@
/*
* Copyright (C) 2017 Christian Pierre MOMON
*
* This file is part of Devinsy-unix.
*
* Devinsy-unix is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Devinsy-unix is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Devinsy-unix. If not, see <http://www.gnu.org/licenses/>
*/
package fr.devinsy.util;
/**
* The Class Property.
*/
public class Property
{
private String name;
private String value;
/**
* Utility class has not to have a constructor.
*/
public Property(final String name, final String value)
{
this.name = name;
this.value = value;
}
public String getName()
{
return this.name;
}
public String getValue()
{
return this.value;
}
public void setName(final String name)
{
this.name = name;
}
public void setValue(final String value)
{
this.value = value;
}
}

View file

@ -0,0 +1,169 @@
/*
* Copyright (C) 2017 Christian Pierre MOMON
*
* This file is part of Devinsy-unix.
*
* Devinsy-unix is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Devinsy-unix is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Devinsy-unix. If not, see <http://www.gnu.org/licenses/>
*/
package fr.devinsy.util;
import java.util.ArrayList;
import java.util.Collections;
/**
* The Class PropertyBeanList.
*/
public class PropertyList extends ArrayList<Property>
{
private static final long serialVersionUID = 90604210351214011L;
/**
* Instantiates a new work import beans.
*/
public PropertyList()
{
super();
}
/**
* Instantiates a new work import beans.
*
* @param initialCapacity
* the initial capacity
*/
public PropertyList(final int initialCapacity)
{
super(initialCapacity);
}
/**
* Adds the.
*
* @param key
* the key
* @param value
* the value
* @return true, if successful
*/
public boolean add(final String key, final String value)
{
boolean result;
result = add(new Property(key, value));
//
return result;
}
/**
* Put.
*
* @param name
* the name
* @param value
* the value
* @return true, if successful
*/
public boolean put(final String name, final int value)
{
boolean result;
result = add(new Property(name, String.valueOf(value)));
//
return result;
}
/**
* Put.
*
* @param name
* the name
* @param value
* the value
* @return true, if successful
*/
public boolean put(final String name, final String value)
{
boolean result;
result = add(new Property(name, value));
//
return result;
}
/**
* Reverse.
*
* @return the work import beans
*/
public PropertyList reverse()
{
PropertyList result;
Collections.reverse(this);
result = this;
//
return result;
}
/* (non-Javadoc)
* @see java.util.AbstractCollection#toString()
*/
@Override
public String toString()
{
String result;
StringBuffer buffer = new StringBuffer(100000);
for (Property property : this)
{
buffer.append("[").append(property.getName()).append(",").append(property.getValue()).append("]\n");
}
result = buffer.toString();
//
return result;
}
/**
* Webify value of the property list item.
*
* @return the property list
*/
public PropertyList webify()
{
PropertyList result;
for (Property property : this)
{
if (property.getValue() != null)
{
property.setValue(property.getValue().replaceAll("\n", "<br/>"));
}
}
result = this;
//
return result;
}
}

View file

@ -21,11 +21,13 @@ package fr.devinsy.util.unix;
import java.io.File; import java.io.File;
import java.util.Vector; import java.util.Vector;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.SystemUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fr.devinsy.util.cmdexec.CmdExec;
import fr.devinsy.util.cmdexec.CmdExecException; import fr.devinsy.util.cmdexec.CmdExecException;
import fr.devinsy.util.cmdexec.CmdExecUtils;
import fr.devinsy.util.strings.StringListUtils; import fr.devinsy.util.strings.StringListUtils;
import fr.devinsy.util.unix.acl.Acl; import fr.devinsy.util.unix.acl.Acl;
import fr.devinsy.util.unix.acl.AclManager; import fr.devinsy.util.unix.acl.AclManager;
@ -37,7 +39,9 @@ import fr.devinsy.util.unix.acl.AclManager;
*/ */
public class Unix public class Unix
{ {
private static final Logger logger = LoggerFactory.getLogger(Unix.class); private static Logger logger = LoggerFactory.getLogger(Unix.class);
public static final String BASH = "/bin/bash";
public static final String SUDO = "/usr/bin/sudo"; public static final String SUDO = "/usr/bin/sudo";
/** /**
@ -60,7 +64,7 @@ public class Unix
{ {
try try
{ {
CmdExec.run(SUDO, "bash", "-c", "echo \"" + text + "\" >> " + path); sudo("bash", "-c", "echo \"" + text + "\" >> " + path);
} }
catch (CmdExecException exception) catch (CmdExecException exception)
{ {
@ -69,6 +73,49 @@ public class Unix
} }
} }
/**
* Bash.
*
* @param command
* the command
* @return the string
* @throws CmdExecException
* the cmd exec exception
*/
public static String bash(final String command) throws CmdExecException
{
String result;
if (SystemUtils.IS_OS_LINUX)
{
result = CmdExecUtils.run(BASH + " -c " + command);
}
else
{
throw new CmdExecException("bash call requires GNU/Linux operating system.");
}
//
return result;
}
public static String bash(final String... command) throws CmdExecException
{
String result;
if (SystemUtils.IS_OS_LINUX)
{
result = CmdExecUtils.run(BASH + " -c " + command);
}
else
{
throw new CmdExecException("bash call requires GNU/Linux operating system.");
}
//
return result;
}
/** /**
* Chmod. * Chmod.
* *
@ -93,7 +140,8 @@ public class Unix
{ {
try try
{ {
CmdExec.run(SUDO, "chmod", changes, path); // CmdExec.run(SUDO, "chmod", changes, path);
sudo("chmod", changes, path);
} }
catch (CmdExecException exception) catch (CmdExecException exception)
{ {
@ -223,9 +271,11 @@ public class Unix
{ {
try try
{ {
logger.info("Creating user account for [" + login + "]."); logger.info("Creating user account for [{}].", login);
CmdExec.run(SUDO, "/usr/sbin/useradd", "-m", "-c", name, "-d", home, login); // CmdExec.run(SUDO, "/usr/sbin/useradd", "-m", "-c", name,
logger.info("User account created for [" + login + "]."); // "-d", home, login);
sudo("/usr/sbin/useradd", "-m", "-c", name, "-d", home, login);
logger.info("User account created for [{}].", login);
} }
catch (CmdExecException exception) catch (CmdExecException exception)
{ {
@ -283,9 +333,10 @@ public class Unix
{ {
try try
{ {
logger.info("Deleting group for [" + group + "]."); logger.info("Deleting group for [{}].", group);
CmdExec.run(SUDO + " groupdel " + group); // CmdExec.run(SUDO + " groupdel " + group);
logger.info("Group deleted for [" + group + "]."); sudo("groupdel " + group);
logger.info("Group deleted for [{}].", group);
} }
catch (CmdExecException exception) catch (CmdExecException exception)
{ {
@ -307,9 +358,10 @@ public class Unix
{ {
try try
{ {
logger.info("Deleting user account for [" + login + "]."); logger.info("Deleting user account for [{}].", login);
CmdExec.run(SUDO + " /usr/sbin/userdel " + login); // CmdExec.run(SUDO + " /usr/sbin/userdel " + login);
logger.info("User account delted for [" + login + "]."); sudo("/usr/sbin/userdel " + login);
logger.info("User account delted for [{}].", login);
} }
catch (CmdExecException exception) catch (CmdExecException exception)
{ {
@ -318,6 +370,32 @@ public class Unix
} }
} }
/**
* Sudo.
*
* @param command
* the command
* @return the string
* @throws CmdExecException
* the cmd exec exception
*/
public static String exec(final String command) throws CmdExecException
{
String result;
if (SystemUtils.IS_OS_LINUX)
{
result = CmdExecUtils.run(SUDO + " " + command);
}
else
{
throw new CmdExecException("sudo call requires GNU/Linux operating system.");
}
//
return result;
}
/** /**
* Gets the acl data. * Gets the acl data.
* *
@ -426,7 +504,7 @@ public class Unix
{ {
try try
{ {
CmdExec.run(SUDO, "ln", "-s", sourcePath, targetPath); CmdExecUtils.run(SUDO, "ln", "-s", sourcePath, targetPath);
} }
catch (CmdExecException exception) catch (CmdExecException exception)
{ {
@ -450,7 +528,8 @@ public class Unix
*/ */
public static void modifyLogin(final String sourceLogin, final String targetLogin, final String sourceHomeDirectory) throws UnixException public static void modifyLogin(final String sourceLogin, final String targetLogin, final String sourceHomeDirectory) throws UnixException
{ {
logger.info("Starting login modifying: [" + sourceLogin + "] -> [" + targetLogin + "]"); logger.info("Starting login modifying: [{}] -> [{}]", sourceLogin, targetLogin);
if ((sourceLogin == null) || (sourceLogin.length() == 0)) if ((sourceLogin == null) || (sourceLogin.length() == 0))
{ {
throw new IllegalArgumentException("Original login parameters undefined"); throw new IllegalArgumentException("Original login parameters undefined");
@ -477,8 +556,11 @@ public class Unix
} }
else else
{ {
String targetHomeDirectory = new File(sourceHomeDirectory).getParent().toString() + "/" + targetLogin; File targetHomeDirectory = new File(new File(sourceHomeDirectory).getParent(), targetLogin);
if (new File(targetHomeDirectory).exists()) // String targetHomeDirectory = new
// File(sourceHomeDirectory).getParent().toString() + "/" +
// targetLogin;
if (targetHomeDirectory.exists())
{ {
throw new IllegalArgumentException("Target home directory already exists: [" + targetHomeDirectory + "]."); throw new IllegalArgumentException("Target home directory already exists: [" + targetHomeDirectory + "].");
} }
@ -487,7 +569,7 @@ public class Unix
try try
{ {
logger.info("Login modifying: [" + sourceLogin + "] -> [" + targetLogin + "]"); logger.info("Login modifying: [" + sourceLogin + "] -> [" + targetLogin + "]");
CmdExec.run(SUDO + " usermod -l " + targetLogin + " " + sourceLogin); sudo("usermod -l " + targetLogin + " " + sourceLogin);
logger.info("Login modified: [" + sourceLogin + "] -> [" + targetLogin + "]"); logger.info("Login modified: [" + sourceLogin + "] -> [" + targetLogin + "]");
} }
catch (CmdExecException exception) catch (CmdExecException exception)
@ -498,9 +580,9 @@ public class Unix
// TOOD problem; // TOOD problem;
try try
{ {
logger.info("Renaming home directory: [" + sourceHomeDirectory + "] -> [" + targetLogin + "]"); logger.info("Renaming home directory: [{}] -> [{}]", sourceHomeDirectory, targetLogin);
CmdExec.run(SUDO + " mv " + sourceHomeDirectory + " " + targetHomeDirectory); sudo(" mv " + sourceHomeDirectory + " " + targetHomeDirectory);
logger.info("Home directory renamed: [" + sourceHomeDirectory + "] -> [" + targetLogin + "]"); logger.info("Home directory renamed: [{}] -> [{}]", sourceHomeDirectory, targetLogin);
} }
catch (CmdExecException exception) catch (CmdExecException exception)
{ {
@ -508,7 +590,7 @@ public class Unix
} }
} }
} }
logger.info("Login modifying done: [" + sourceLogin + "] -> [" + targetLogin + "]"); logger.info("Login modifying done: [{}] -> [{}]", sourceLogin, targetLogin);
} }
/** /**
@ -535,7 +617,7 @@ public class Unix
{ {
try try
{ {
CmdExec.run(SUDO, "chmod", "-R", changes, path); sudo("chmod", "-R", changes, path);
} }
catch (CmdExecException exception) catch (CmdExecException exception)
{ {
@ -577,16 +659,16 @@ public class Unix
{ {
try try
{ {
logger.info("Login modifying: [" + sourceGroup + "] -> [" + targetGroup + "]"); logger.info("Login modifying: [{}] -> [{}]", sourceGroup, targetGroup);
CmdExec.run(SUDO + " groupmod -n " + targetGroup + " " + sourceGroup); sudo("groupmod -n " + targetGroup + " " + sourceGroup);
logger.info("Login modified: [" + sourceGroup + "] -> [" + targetGroup + "]"); logger.info("Login modified: [{}] -> [{}]", sourceGroup, targetGroup);
} }
catch (CmdExecException exception) catch (CmdExecException exception)
{ {
throw new UnixException("Group renaming failed for [" + sourceGroup + "].", exception); throw new UnixException("Group renaming failed for [" + sourceGroup + "].", exception);
} }
} }
logger.info("Group renaming done: [" + sourceGroup + "] -> [" + targetGroup + "]"); logger.info("Group renaming done: [{}] -> [{}]", sourceGroup, targetGroup);
} }
/** /**
@ -652,7 +734,8 @@ public class Unix
{ {
try try
{ {
CmdExec.run(SUDO, "setfacl", args, 1, 6); String[] command = ArrayUtils.add(args, 0, "setfacl");
sudo(command);
} }
catch (CmdExecException exception) catch (CmdExecException exception)
{ {
@ -685,9 +768,9 @@ public class Unix
{ {
try try
{ {
logger.info("Password setting for [" + login + "]."); logger.info("Password setting for [{}].", login);
CmdExec.run(SUDO, "bash", "-c", "echo \"" + login + ":" + newPassword + "\"| chpasswd "); sudoBash("echo \"" + login + ":" + newPassword + "\"| chpasswd ");
logger.info("Password set for [" + login + "]."); logger.info("Password set for [{}].", login);
} }
catch (CmdExecException exception) catch (CmdExecException exception)
{ {
@ -720,7 +803,7 @@ public class Unix
try try
{ {
logger.info("Real name changing for user [{}]", login); logger.info("Real name changing for user [{}]", login);
CmdExec.run(SUDO, "chfn", "-f", newRealName, login); CmdExecUtils.run(SUDO, "chfn", "-f", newRealName, login);
} }
catch (CmdExecException exception) catch (CmdExecException exception)
{ {
@ -729,6 +812,85 @@ public class Unix
} }
} }
/**
* Sudo.
*
* @param command
* the command
* @return the string
* @throws CmdExecException
* the cmd exec exception
*/
public static String sudo(final String command) throws CmdExecException
{
String result;
if (SystemUtils.IS_OS_LINUX)
{
result = CmdExecUtils.run(SUDO + " " + command);
}
else
{
throw new CmdExecException("sudo call requires GNU/Linux operating system.");
}
//
return result;
}
/**
* Sudo.
*
* @param command
* the command
* @return the string
* @throws CmdExecException
* the cmd exec exception
*/
public static String sudo(final String... command) throws CmdExecException
{
String result;
if (SystemUtils.IS_OS_LINUX)
{
String[] newCommand = ArrayUtils.add(command, 0, SUDO);
result = CmdExecUtils.run(newCommand);
}
else
{
throw new CmdExecException("sudo call requires GNU/Linux operating system.");
}
//
return result;
}
/**
* Sudo.
*
* @param command
* the command
* @return the string
* @throws CmdExecException
* the cmd exec exception
*/
public static String sudoBash(final String command) throws CmdExecException
{
String result;
if (SystemUtils.IS_OS_LINUX)
{
result = CmdExecUtils.run(BASH + " -c " + command);
}
else
{
throw new CmdExecException("sudo call requires GNU/Linux operating system.");
}
//
return result;
}
/** /**
* Unlink. * Unlink.
* *
@ -737,7 +899,7 @@ public class Unix
*/ */
public static void unlink(final String filePathName) public static void unlink(final String filePathName)
{ {
logger.info("[{}]", filePathName); logger.info("unlink [filePathName=s{}]", filePathName);
if (filePathName == null) if (filePathName == null)
{ {
throw new IllegalArgumentException("Parameter undefined: [" + filePathName + "]."); throw new IllegalArgumentException("Parameter undefined: [" + filePathName + "].");

View file

@ -22,10 +22,10 @@ import java.io.File;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import org.apache.commons.lang3.ArrayUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import fr.devinsy.util.cmdexec.CmdExec;
import fr.devinsy.util.cmdexec.CmdExecException; import fr.devinsy.util.cmdexec.CmdExecException;
import fr.devinsy.util.strings.StringListUtils; import fr.devinsy.util.strings.StringListUtils;
import fr.devinsy.util.unix.Unix; import fr.devinsy.util.unix.Unix;
@ -39,7 +39,6 @@ import fr.devinsy.util.unix.UnixException;
public class AclManager public class AclManager
{ {
private static final Logger logger = LoggerFactory.getLogger(AclManager.class); private static final Logger logger = LoggerFactory.getLogger(AclManager.class);
public static final String SUDO = "/usr/bin/sudo";
final static public Pattern USER_PATTERN = Pattern.compile("^user:(.*):(.*)$"); final static public Pattern USER_PATTERN = Pattern.compile("^user:(.*):(.*)$");
final static public Pattern GROUP_PATTERN = Pattern.compile("^group:(.*):(.*)$"); final static public Pattern GROUP_PATTERN = Pattern.compile("^group:(.*):(.*)$");
@ -228,7 +227,7 @@ public class AclManager
try try
{ {
logger.info("Getting Acl data for [" + filePathName + "]."); logger.info("Getting Acl data for [" + filePathName + "].");
result = CmdExec.run(SUDO, "/usr/bin/getfacl", "--no-effective", filePathName); result = Unix.sudo("/usr/bin/getfacl", "--no-effective", filePathName);
logger.info("Acl data got for [" + filePathName + "]."); logger.info("Acl data got for [" + filePathName + "].");
} }
catch (CmdExecException exception) catch (CmdExecException exception)
@ -517,7 +516,8 @@ public class AclManager
{ {
try try
{ {
CmdExec.run(SUDO, "setfacl", args, 1, 5); String[] newArgs = ArrayUtils.add(args, 0, "setfacl");
Unix.sudo(newArgs);
} }
catch (CmdExecException exception) catch (CmdExecException exception)
{ {

View file

@ -0,0 +1,340 @@
/*
* Copyright (C) 2017 Christian Pierre MOMON
*
* This file is part of Devinsy-unix.
*
* Devinsy-unix is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Devinsy-unix is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Devinsy-unix. If not, see <http://www.gnu.org/licenses/>
*/
package fr.devinsy.util.unix.linux;
import java.io.File;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DurationFormatUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fr.devinsy.util.Property;
import fr.devinsy.util.PropertyList;
/**
* The Class Linux.
*
* @author Christian Pierre MOMON (christian.momon@devinsy.fr)
*/
public class Linux
{
private static Logger logger = LoggerFactory.getLogger(Linux.class);
private static final Pattern PROC_MEMINFO_PATTERN = Pattern.compile("^(\\S+):\\s+(\\d+)(\\s\\w{2})?$");
private static final String REDHAT_RELEASE_FILE = "/etc/redhat-release";
private static final String DEBIAN_RELEASE_FILE = "/etc/debian_version";
private static final String SUSE_RELEASE_FILE = "/etc/suse-foo";
/**
* Instantiates a new linux.
*/
private Linux()
{
}
/**
* Read /proc/meminfo properties.
*
* @return the property list
* @throws IOException
* Signals that an I/O exception has occurred.
*/
public static PropertyList getProcMeminfoProperties() throws IOException
{
PropertyList result;
result = new PropertyList(50);
String buffer = readProcMeminfoFile();
String[] lines = buffer.split("\n");
for (String line : lines)
{
Matcher matcher = PROC_MEMINFO_PATTERN.matcher(line);
if ((matcher.matches()) && ((matcher.groupCount() == 2) || (matcher.groupCount() == 3)))
{
result.add(matcher.group(1), matcher.group(2));
}
else
{
throw new IOException("Unknown line format in /proc/meminfo file.");
}
}
//
return result;
}
/**
* Get a /proc/meminfo summary.
*
* @return the string
* @throws IOException
* Signals that an I/O exception has occurred.
*/
public static PropertyList getProcMeminfoSummaryProperties() throws IOException
{
PropertyList result;
PropertyList meminfo = getProcMeminfoProperties();
result = new PropertyList(10);
result.add(meminfo.get(0));
result.add(meminfo.get(1));
result.add(meminfo.get(2));
result.add(meminfo.get(3));
result.add(meminfo.get(4));
result.add(meminfo.get(5));
result.add(meminfo.get(6));
result.add(meminfo.get(7));
result.add(meminfo.get(13));
result.add(meminfo.get(14));
//
return result;
}
/**
* Gets the /proc/uptime duration.
*
* @return the /proc/uptime duration
* @throws IOException
* Signals that an I/O exception has occurred.
*/
public static long getProcUptimeDuration() throws IOException
{
long result;
String procUptime = readProcUptimeFile();
result = (long) Double.parseDouble(procUptime.split("\\s")[0]);
//
return result;
}
/**
* Gets the /proc/uptime duration properties.
*
* @return the /proc/uptime duration properties
* @throws IOException
* Signals that an I/O exception has occurred.
*/
public static Property getProcUptimeDurationProperties() throws IOException
{
Property result;
String procUptime = readProcUptimeFile();
result = new Property("uptime.duration", procUptime.split("\\s")[0]);
//
return result;
}
/**
* Gets the /proc/uptime duration properties.
*
* @return the /proc/uptime duration properties
* @throws IOException
* Signals that an I/O exception has occurred.
*/
public static PropertyList getProcUptimeProperties() throws IOException
{
PropertyList result;
result = new PropertyList();
String procUptime = readProcUptimeFile();
String[] data = procUptime.split("\\s");
result.add("uptime.duration", data[0]);
long duration = Long.parseLong(data[0]);
String humanDuration = DurationFormatUtils.formatDuration(duration * 1000, "dd'd'HH':'mm':'ss");
result.add("uptime.duration.human", humanDuration);
result.add("uptime.idle", data[1]);
//
return result;
}
/**
* Gets the release distribution properties.
*
* @return the release distribution properties
* @throws IOException
* Signals that an I/O exception has occurred.
*/
public static Property getReleaseDistributionProperties() throws IOException
{
Property result;
String buffer = readReleaseDistributionFile();
result = new Property("distribution.release", buffer);
//
return result;
}
/**
* Read /proc/cpu processor 0.
*
* @return the string
* @throws IOException
*/
public static String readProcCpuinfo0() throws IOException
{
String result;
result = readProcCpuinfoFile();
int separator = StringUtils.indexOf(result, "\n\n");
if (separator != -1)
{
result = result.substring(0, separator);
}
//
return result;
}
/**
* Read /proc/cpuinfo file.
*
* @return the string
* @throws IOException
* Signals that an I/O exception has occurred.
*/
public static String readProcCpuinfoFile() throws IOException
{
String result;
result = FileUtils.readFileToString(new File("/proc/cpuinfo"));
//
return result;
}
/**
* Read /proc/meminfo file.
*
* @return the string
* @throws IOException
* Signals that an I/O exception has occurred.
*/
public static String readProcMeminfoFile() throws IOException
{
String result;
result = FileUtils.readFileToString(new File("/proc/meminfo"));
//
return result;
}
/**
* Read /proc/uptime file.
*
* @return the string
* @throws IOException
*/
public static String readProcUptimeFile() throws IOException
{
String result;
result = FileUtils.readFileToString(new File("/proc/uptime"));
//
return result;
}
/**
* Read /proc/version file.
*
* @return the string
* @throws IOException
* Signals that an I/O exception has occurred.
*/
public static String readProcVersionFile() throws IOException
{
String result;
result = FileUtils.readFileToString(new File("/proc/version"));
//
return result;
}
/**
* Read release distribution file.
*
* @return the string
*/
public static String readReleaseDistributionFile()
{
String result;
try
{
File redhatFile = new File(REDHAT_RELEASE_FILE);
File debianFile = new File(DEBIAN_RELEASE_FILE);
File suseFile = new File(SUSE_RELEASE_FILE);
if (debianFile.exists())
{
result = "Debian " + FileUtils.readFileToString(debianFile);
}
else if (redhatFile.exists())
{
result = FileUtils.readFileToString(redhatFile);
}
else if (suseFile.exists())
{
// TODO
result = "SUSE " + FileUtils.readFileToString(debianFile);
}
else
{
result = null;
}
}
catch (IOException exception)
{
logger.warn("Failed to read distribution infos.", exception);
result = null;
}
//
return result;
}
}
// ////////////////////////////////////////////////////////////////////////

View file

@ -0,0 +1,43 @@
/*
* Copyright (C) 2017 Christian Pierre MOMON
*
* This file is part of Devinsy-unix.
*
* Devinsy-unix is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Devinsy-unix is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Devinsy-unix. If not, see <http://www.gnu.org/licenses/>
*/
package fr.devinsy.util.unix;
import java.io.IOException;
import org.junit.Test;
import fr.devinsy.util.unix.linux.Linux;
/**
* The Class LinuxTest.
*/
public class LinuxTest
{
/**
* Test 01.
*
* @throws IOException
*/
@Test
public void test01() throws IOException
{
System.out.println(Linux.readProcMeminfoFile());
}
}