1 /*
   2  * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package com.sun.servicetag;
  27 
  28 // This class is a copy of the com.sun.scn.servicetags.SystemEnvironment
  29 // class from the Sun Connection source.
  30 //
  31 // The Service Tags team maintains the latest version of the implementation
  32 // for system environment data collection.  JDK will include a copy of
  33 // the most recent released version for a JDK release. We rename
  34 // the package to com.sun.servicetag so that the Sun Connection
  35 // product always uses the latest version from the com.sun.scn.servicetags
  36 // package. JDK and users of the com.sun.servicetag API
  37 // (e.g. NetBeans and SunStudio) will use the version in JDK.
  38 
  39 import java.io.*;
  40 import java.net.InetAddress;
  41 import java.net.UnknownHostException;
  42 
  43 /**
  44  * SystemEnvironment class collects the environment data with the
  45  * best effort from the underlying platform.
  46  */
  47 public class SystemEnvironment {
  48     private String hostname;
  49     private String hostId;
  50     private String osName;
  51     private String osVersion;
  52     private String osArchitecture;
  53     private String systemModel;
  54     private String systemManufacturer;
  55     private String cpuManufacturer;
  56     private String serialNumber;
  57     private static SystemEnvironment sysEnv = null;
  58 
  59     public static synchronized SystemEnvironment getSystemEnvironment() {
  60         if (sysEnv == null) {
  61             String os = System.getProperty("os.name");
  62             if (os.equals("SunOS")) {
  63                 sysEnv = new SolarisSystemEnvironment();
  64             } else if (os.equals("Linux")) {
  65                 sysEnv = new LinuxSystemEnvironment();
  66             } else if (os.startsWith("Windows")) {
  67                 sysEnv = new WindowsSystemEnvironment();
  68             } else {
  69                 sysEnv = new SystemEnvironment();
  70             }
  71         }
  72         return sysEnv;
  73     }
  74 
  75     // package-private
  76     SystemEnvironment() {
  77         try {
  78             this.hostname = InetAddress.getLocalHost().getHostName();
  79         } catch (UnknownHostException ex) {
  80             this.hostname = "Unknown host";
  81         }
  82         this.hostId = "";
  83         this.osName = System.getProperty("os.name");
  84         this.osVersion = System.getProperty("os.version");
  85         this.osArchitecture = System.getProperty("os.arch");
  86         this.systemModel = "";
  87         this.systemManufacturer = "";
  88         this.cpuManufacturer = "";
  89         this.serialNumber = "";
  90     }
  91 
  92 
  93     /**
  94      * Sets the hostname.
  95      * @param hostname The hostname to set.
  96      */
  97     public void setHostname(String hostname) {
  98         this.hostname = hostname;
  99     }
 100 
 101     /**
 102      * Sets the OS name.
 103      * @param osName The osName to set.
 104      */
 105     public void setOsName(String osName) {
 106         this.osName = osName;
 107     }
 108 
 109     /**
 110      * Sets the OS version.
 111      * @param osVersion The osVersion to set.
 112      */
 113     public void setOsVersion(String osVersion) {
 114         this.osVersion = osVersion;
 115     }
 116 
 117     /**
 118      * Sets the OS architecture.
 119      * @param osArchitecture The osArchitecture to set.
 120      */
 121     public void setOsArchitecture(String osArchitecture) {
 122         this.osArchitecture = osArchitecture;
 123     }
 124 
 125     /**
 126      * Sets the system model.
 127      * @param systemModel The systemModel to set.
 128      */
 129     public void setSystemModel(String systemModel) {
 130         this.systemModel = systemModel;
 131     }
 132 
 133     /**
 134      * Sets the system manufacturer.
 135      * @param systemManufacturer The systemManufacturer to set.
 136      */
 137     public void setSystemManufacturer(String systemManufacturer) {
 138         this.systemManufacturer = systemManufacturer;
 139     }
 140 
 141     /**
 142      * Sets the cpu manufacturer.
 143      * @param cpuManufacturer The cpuManufacturer to set.
 144      */
 145     public void setCpuManufacturer(String cpuManufacturer) {
 146         this.cpuManufacturer = cpuManufacturer;
 147     }
 148 
 149     /**
 150      * Sets the serial number.
 151      * @param serialNumber The serialNumber to set.
 152      */
 153     public void setSerialNumber(String serialNumber) {
 154         this.serialNumber = serialNumber;
 155     }
 156 
 157     /**
 158      * Sets the hostid.  Truncates to a max length of 16 chars.
 159      * @param hostId The hostid to set.
 160      */
 161     public void setHostId(String hostId) {
 162         if (hostId == null || hostId.equals("null")) {
 163             hostId = "";
 164         }
 165         if (hostId.length() > 16) {
 166             hostId = hostId.substring(0,16);
 167         }
 168         this.hostId = hostId;
 169     }
 170 
 171     /**
 172      * Returns the hostname.
 173      * @return The hostname.
 174      */
 175     public String getHostname() {
 176         return hostname;
 177     }
 178 
 179     /**
 180      * Returns the osName.
 181      * @return The osName.
 182      */
 183     public String getOsName() {
 184         return osName;
 185     }
 186 
 187     /**
 188      * Returns the osVersion.
 189      * @return The osVersion.
 190      */
 191     public String getOsVersion() {
 192         return osVersion;
 193     }
 194 
 195     /**
 196      * Returns the osArchitecture.
 197      * @return The osArchitecture.
 198      */
 199     public String getOsArchitecture() {
 200         return osArchitecture;
 201     }
 202 
 203     /**
 204      * Returns the systemModel.
 205      * @return The systemModel.
 206      */
 207     public String getSystemModel() {
 208         return systemModel;
 209     }
 210 
 211     /**
 212      * Returns the systemManufacturer.
 213      * @return The systemManufacturer.
 214      */
 215     public String getSystemManufacturer() {
 216         return systemManufacturer;
 217     }
 218 
 219     /**
 220      * Returns the serialNumber.
 221      * @return The serialNumber.
 222      */
 223     public String getSerialNumber() {
 224         return serialNumber;
 225     }
 226 
 227     /**
 228      * Returns the hostId.
 229      * @return The hostId.
 230      */
 231     public String getHostId() {
 232         return hostId;
 233     }
 234 
 235     /**
 236      * Returns the cpuManufacturer.
 237      * @return The cpuManufacturer.
 238      */
 239     public String getCpuManufacturer() {
 240         return cpuManufacturer;
 241     }
 242 
 243     protected String getCommandOutput(String... command) {
 244         StringBuilder sb = new StringBuilder();
 245         BufferedReader br = null;
 246         Process p = null;
 247         try {
 248             ProcessBuilder pb = new ProcessBuilder(command);
 249             p = pb.start();
 250             p.waitFor();
 251 
 252             if (p.exitValue() == 0) {
 253                 br = new BufferedReader(new InputStreamReader(p.getInputStream()));
 254                 String line = null;
 255                 while ((line = br.readLine()) != null) {
 256                     line = line.trim();
 257                     if (line.length() > 0) {
 258                         if (sb.length() > 0) {
 259                             sb.append("\n");
 260                         }
 261                         sb.append(line);
 262                     }
 263                 }
 264             }
 265             return sb.toString();
 266         } catch (InterruptedException ie) {
 267             // in case the command hangs
 268             if (p != null) {
 269                 p.destroy();
 270             }
 271             return "";
 272         } catch (Exception e) {
 273             // ignore exception
 274             return "";
 275         } finally {
 276             if (p != null) {
 277                 try {
 278                     p.getErrorStream().close();
 279                 } catch (IOException e) {
 280                     // ignore
 281                 }
 282                 try {
 283                     p.getInputStream().close();
 284                 } catch (IOException e) {
 285                     // ignore
 286                 }
 287                 try {
 288                     p.getOutputStream().close();
 289                 } catch (IOException e) {
 290                     // ignore
 291                 }
 292                 p = null;
 293             }
 294             if (br != null) {
 295                 try {
 296                     br.close();
 297                 } catch (IOException e) {
 298                     // ignore
 299                 }
 300             }
 301         }
 302     }
 303 
 304     protected String getFileContent(String filename) {
 305         File f = new File(filename);
 306         if (!f.exists()) {
 307             return "";
 308         }
 309 
 310         StringBuilder sb = new StringBuilder();
 311         BufferedReader br = null;
 312         try {
 313             br = new BufferedReader(new FileReader(f));
 314             String line = null;
 315             while ((line = br.readLine()) != null) {
 316                 line = line.trim();
 317                 if (line.length() > 0) {
 318                     if (sb.length() > 0) {
 319                         sb.append("\n");
 320                     }
 321                     sb.append(line);
 322                 }
 323             }
 324             return sb.toString();
 325         } catch (Exception e) {
 326             // ignore exception
 327             return "";
 328         } finally {
 329             if (br != null) {
 330                 try {
 331                     br.close();
 332                 } catch (IOException e) {
 333                     // ignore
 334                 }
 335             }
 336         }
 337     }
 338 }