View Javadoc

1   /*
2    *
3    * Licensed to the Apache Software Foundation (ASF) under one
4    * or more contributor license agreements.  See the NOTICE file
5    * distributed with this work for additional information
6    * regarding copyright ownership.  The ASF licenses this file
7    * to you under the Apache License, Version 2.0 (the
8    * "License"); you may not use this file except in compliance
9    * with the License.  You may obtain a copy of the License at
10   *
11   *     http://www.apache.org/licenses/LICENSE-2.0
12   *
13   * Unless required by applicable law or agreed to in writing, software
14   * distributed under the License is distributed on an "AS IS" BASIS,
15   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16   * See the License for the specific language governing permissions and
17   * limitations under the License.
18   */
19  
20  package org.apache.hadoop.hbase.rest.model;
21  
22  import java.io.IOException;
23  import java.io.Serializable;
24  
25  import javax.servlet.ServletContext;
26  import javax.xml.bind.annotation.XmlAttribute;
27  import javax.xml.bind.annotation.XmlRootElement;
28  
29  import org.apache.hadoop.hbase.classification.InterfaceAudience;
30  import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
31  import org.apache.hadoop.hbase.rest.ProtobufMessageHandler;
32  import org.apache.hadoop.hbase.rest.RESTServlet;
33  import org.apache.hadoop.hbase.rest.protobuf.generated.VersionMessage.Version;
34  
35  import com.sun.jersey.spi.container.servlet.ServletContainer;
36  
37  /**
38   * A representation of the collection of versions of the REST gateway software
39   * components.
40   * <ul>
41   * <li>restVersion: REST gateway revision</li>
42   * <li>jvmVersion: the JVM vendor and version information</li>
43   * <li>osVersion: the OS type, version, and hardware architecture</li>
44   * <li>serverVersion: the name and version of the servlet container</li>
45   * <li>jerseyVersion: the version of the embedded Jersey framework</li>
46   * </ul>
47   */
48  @XmlRootElement(name="Version")
49  @InterfaceAudience.Private
50  public class VersionModel implements Serializable, ProtobufMessageHandler {
51  
52    private static final long serialVersionUID = 1L;
53  
54    private String restVersion;
55    private String jvmVersion;
56    private String osVersion;
57    private String serverVersion;
58    private String jerseyVersion;
59  
60    /**
61     * Default constructor. Do not use.
62     */
63    public VersionModel() {}
64    
65    /**
66     * Constructor
67     * @param context the servlet context
68     */
69    public VersionModel(ServletContext context) {
70      restVersion = RESTServlet.VERSION_STRING;
71      jvmVersion = System.getProperty("java.vm.vendor") + ' ' +
72        System.getProperty("java.version") + '-' +
73        System.getProperty("java.vm.version");
74      osVersion = System.getProperty("os.name") + ' ' +
75        System.getProperty("os.version") + ' ' +
76        System.getProperty("os.arch");
77      serverVersion = context.getServerInfo();
78      jerseyVersion = ServletContainer.class.getPackage()
79        .getImplementationVersion();
80    }
81  
82    /**
83     * @return the REST gateway version
84     */
85    @XmlAttribute(name="REST")
86    public String getRESTVersion() {
87      return restVersion;
88    }
89  
90    /**
91     * @return the JVM vendor and version
92     */
93    @XmlAttribute(name="JVM")
94    public String getJVMVersion() {
95      return jvmVersion;
96    }
97  
98    /**
99     * @return the OS name, version, and hardware architecture
100    */
101   @XmlAttribute(name="OS")
102   public String getOSVersion() {
103     return osVersion;
104   }
105 
106   /**
107    * @return the servlet container version
108    */
109   @XmlAttribute(name="Server")
110   public String getServerVersion() {
111     return serverVersion;
112   }
113 
114   /**
115    * @return the version of the embedded Jersey framework
116    */
117   @XmlAttribute(name="Jersey")
118   public String getJerseyVersion() {
119     return jerseyVersion;
120   }
121 
122   /**
123    * @param version the REST gateway version string
124    */
125   public void setRESTVersion(String version) {
126     this.restVersion = version;
127   }
128 
129   /**
130    * @param version the OS version string
131    */
132   public void setOSVersion(String version) {
133     this.osVersion = version;
134   }
135 
136   /**
137    * @param version the JVM version string
138    */
139   public void setJVMVersion(String version) {
140     this.jvmVersion = version;
141   }
142 
143   /**
144    * @param version the servlet container version string
145    */
146   public void setServerVersion(String version) {
147     this.serverVersion = version;
148   }
149 
150   /**
151    * @param version the Jersey framework version string
152    */
153   public void setJerseyVersion(String version) {
154     this.jerseyVersion = version;
155   }
156 
157   /* (non-Javadoc)
158    * @see java.lang.Object#toString()
159    */
160   @Override
161   public String toString() {
162     StringBuilder sb = new StringBuilder();
163     sb.append("rest ");
164     sb.append(restVersion);
165     sb.append(" [JVM: ");
166     sb.append(jvmVersion);
167     sb.append("] [OS: ");
168     sb.append(osVersion);
169     sb.append("] [Server: ");
170     sb.append(serverVersion);
171     sb.append("] [Jersey: ");
172     sb.append(jerseyVersion);
173     sb.append("]\n");
174     return sb.toString();
175   }
176 
177   @Override
178   public byte[] createProtobufOutput() {
179     Version.Builder builder = Version.newBuilder();
180     builder.setRestVersion(restVersion);
181     builder.setJvmVersion(jvmVersion);
182     builder.setOsVersion(osVersion);
183     builder.setServerVersion(serverVersion);
184     builder.setJerseyVersion(jerseyVersion);
185     return builder.build().toByteArray();
186   }
187 
188   @Override
189   public ProtobufMessageHandler getObjectFromMessage(byte[] message)
190       throws IOException {
191     Version.Builder builder = Version.newBuilder();
192     ProtobufUtil.mergeFrom(builder, message);
193     if (builder.hasRestVersion()) {
194       restVersion = builder.getRestVersion();
195     }
196     if (builder.hasJvmVersion()) {
197       jvmVersion = builder.getJvmVersion();
198     }
199     if (builder.hasOsVersion()) {
200       osVersion = builder.getOsVersion();
201     }
202     if (builder.hasServerVersion()) {
203       serverVersion = builder.getServerVersion();
204     }
205     if (builder.hasJerseyVersion()) {
206       jerseyVersion = builder.getJerseyVersion();
207     }
208     return this;
209   }
210 }