diff options
| author | Selvasundaram <selvam@gluster.com> | 2011-07-20 20:57:09 +0530 |
|---|---|---|
| committer | Selvasundaram <selvam@gluster.com> | 2011-07-20 20:57:09 +0530 |
| commit | 9ef0e377687ad77bae6018202dcb7772880bcea6 (patch) | |
| tree | 1ce07d062988e69b67a951cbefda354d4c658312 /src | |
| parent | 3ee5ef2d7f86d9b0ebd70391375d05330b23da21 (diff) | |
| parent | 467d023dfbccc7ff10c5fe29fe7992e6c798875a (diff) | |
Merge branch 'master' of github.com:gluster/console
Diffstat (limited to 'src')
37 files changed, 3753 insertions, 306 deletions
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java index 64a9a653..45d75bba 100644 --- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java +++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java @@ -207,8 +207,7 @@ public abstract class AbstractClient { * Expected class of the response
* @return Object of responseClass received as a result of the GET request
*/
- @SuppressWarnings("rawtypes")
- protected Object fetchResource(MultivaluedMap<String, String> queryParams, Class responseClass) {
+ protected <T> T fetchResource(MultivaluedMap<String, String> queryParams, Class<T> responseClass) {
return fetchResource(resource, queryParams, responseClass);
}
@@ -220,10 +219,8 @@ public abstract class AbstractClient { * Expected class of the response
* @return Object of responseClass received as a result of the GET request
*/
- @SuppressWarnings("rawtypes")
- protected Object fetchResource(Class responseClass) {
- Object response = fetchResource(resource, NO_PARAMS, responseClass);
- return response;
+ protected <T> T fetchResource(Class<T> responseClass) {
+ return fetchResource(resource, NO_PARAMS, responseClass);
}
/**
@@ -236,8 +233,7 @@ public abstract class AbstractClient { * Expected class of the response
* @return Object of responseClass received as a result of the GET request on the sub-resource
*/
- @SuppressWarnings("rawtypes")
- protected Object fetchSubResource(String subResourceName, Class responseClass) {
+ protected <T> T fetchSubResource(String subResourceName, Class<T> responseClass) {
return fetchResource(resource.path(subResourceName), NO_PARAMS, responseClass);
}
@@ -257,9 +253,8 @@ public abstract class AbstractClient { * Expected class of the response
* @return Object of responseClass received as a result of the GET request on the sub-resource
*/
- @SuppressWarnings("rawtypes")
- protected Object fetchSubResource(String subResourceName, MultivaluedMap<String, String> queryParams,
- Class responseClass) {
+ protected <T> T fetchSubResource(String subResourceName, MultivaluedMap<String, String> queryParams,
+ Class<T> responseClass) {
return fetchResource(resource.path(subResourceName), queryParams, responseClass);
}
@@ -280,8 +275,7 @@ public abstract class AbstractClient { * the Object to be submitted
* @return Object of given class received as response
*/
- @SuppressWarnings({ "unchecked", "rawtypes" })
- protected Object postObject(Class responseClass, Object requestObject) {
+ protected <T> T postObject(Class<T> responseClass, Object requestObject) {
return resource.type(MediaType.APPLICATION_XML).header(HTTP_HEADER_AUTH, authHeader)
.accept(MediaType.APPLICATION_XML).post(responseClass, requestObject);
}
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/ClustersClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/ClustersClient.java index 31809c75..0185084c 100644 --- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/ClustersClient.java +++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/ClustersClient.java @@ -71,32 +71,4 @@ public class ClustersClient extends AbstractClient { public void deleteCluster(String clusterName) { deleteSubResource(clusterName); } - - public static void main(String args[]) { - UsersClient usersClient = new UsersClient(); - - try { - usersClient.authenticate("gluster", "gluster"); - } catch(Exception e) { - e.printStackTrace(); - } - - ClustersClient client = new ClustersClient(); - client.setSecurityToken(usersClient.getSecurityToken()); - System.out.println(client.getClusterNames()); - try { - client.createCluster("test1"); - } catch (GlusterRuntimeException e) { - System.out.println(e.getMessage()); - } - - System.out.println(client.getClusterNames()); - - try { - client.deleteCluster("test1"); - } catch (GlusterRuntimeException e) { - System.out.println(e.getMessage()); - } - System.out.println(client.getClusterNames()); - } } diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java index 0abccda5..8be5beac 100644 --- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java +++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java @@ -24,12 +24,17 @@ import static com.gluster.storage.management.core.constants.RESTConstants.RESOUR import java.net.URI; import java.util.List; +import javax.ws.rs.core.MultivaluedMap; + import com.gluster.storage.management.core.constants.RESTConstants; import com.gluster.storage.management.core.model.GlusterServer; import com.gluster.storage.management.core.model.Server; +import com.gluster.storage.management.core.model.ServerStats; +import com.gluster.storage.management.core.model.ServerStatsRow; import com.gluster.storage.management.core.response.GlusterServerListResponse; import com.gluster.storage.management.core.utils.GlusterCoreUtil; import com.sun.jersey.api.representation.Form; +import com.sun.jersey.core.util.MultivaluedMapImpl; public class GlusterServersClient extends AbstractClient { @@ -64,9 +69,9 @@ public class GlusterServersClient extends AbstractClient { return server; } - public void addServer(Server discoveredServer) { + public void addServer(String serverName) { Form form = new Form(); - form.add(RESTConstants.FORM_PARAM_SERVER_NAME, discoveredServer.getName()); + form.add(RESTConstants.FORM_PARAM_SERVER_NAME, serverName); postRequest(form); } @@ -79,23 +84,16 @@ public class GlusterServersClient extends AbstractClient { public void removeServer(String serverName) { deleteSubResource(serverName); } - - public static void main(String[] args) { - UsersClient usersClient = new UsersClient(); - try { - usersClient.authenticate("gluster", "gluster"); - GlusterServersClient glusterServersClient = new GlusterServersClient(usersClient.getSecurityToken(), "cluster1"); - List<GlusterServer> glusterServers = glusterServersClient.getServers(); - for (GlusterServer server : glusterServers) { - System.out.println(server.getName()); - } - - // Add server - Server srv = new Server(); - srv.setName("server3"); - glusterServersClient.addServer(srv); - } catch(Exception e) { - e.printStackTrace(); - } + + public ServerStats getCPUStats(String serverName) { + MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl(); + queryParams.add(RESTConstants.QUERY_PARAM_TYPE, RESTConstants.STATISTICS_TYPE_CPU); + return fetchSubResource(serverName + "/" + RESTConstants.RESOURCE_STATISTICS, queryParams, ServerStats.class); + } + + public ServerStats getAggregatedCPUStats() { + MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl(); + queryParams.add(RESTConstants.QUERY_PARAM_TYPE, RESTConstants.STATISTICS_TYPE_CPU); + return fetchSubResource(RESTConstants.RESOURCE_STATISTICS, queryParams, ServerStats.class); } } diff --git a/src/com.gluster.storage.management.gui.feature.webstart/build/glustermc.ant b/src/com.gluster.storage.management.gui.feature.webstart/build/glustermc.ant index e7baaa03..6b0152f6 100644 --- a/src/com.gluster.storage.management.gui.feature.webstart/build/glustermc.ant +++ b/src/com.gluster.storage.management.gui.feature.webstart/build/glustermc.ant @@ -12,7 +12,7 @@ </target> <target name="sign"> - <signjar alias="gluster" storepass="gluster" keypass="gluster" keystore="build/gluster.keystore"> + <signjar alias="gluster" storepass="gluster" keypass="gluster" keystore="/var/lib/jenkins/gmc/gluster.keystore"> <fileset dir="${export.dir}/plugins"> <include name="*.jar" /> </fileset> diff --git a/src/com.gluster.storage.management.gui/icons/tango/16x16/offline-server.png b/src/com.gluster.storage.management.gui/icons/tango/16x16/offline-server.png Binary files differnew file mode 100644 index 00000000..adc25b98 --- /dev/null +++ b/src/com.gluster.storage.management.gui/icons/tango/16x16/offline-server.png diff --git a/src/com.gluster.storage.management.gui/icons/tango/16x16/volume-options.png b/src/com.gluster.storage.management.gui/icons/tango/16x16/volume-options.png Binary files differnew file mode 100644 index 00000000..d7665cb7 --- /dev/null +++ b/src/com.gluster.storage.management.gui/icons/tango/16x16/volume-options.png diff --git a/src/com.gluster.storage.management.gui/icons/tango/16x16/volume.png b/src/com.gluster.storage.management.gui/icons/tango/16x16/volume.png Binary files differindex 5234eab4..41376404 100644 --- a/src/com.gluster.storage.management.gui/icons/tango/16x16/volume.png +++ b/src/com.gluster.storage.management.gui/icons/tango/16x16/volume.png diff --git a/src/com.gluster.storage.management.gui/icons/tango/22x22/system-search.png b/src/com.gluster.storage.management.gui/icons/tango/22x22/system-search.png Binary files differnew file mode 100644 index 00000000..4e522b23 --- /dev/null +++ b/src/com.gluster.storage.management.gui/icons/tango/22x22/system-search.png diff --git a/src/com.gluster.storage.management.gui/icons/tango/32x32/add-brick.svg b/src/com.gluster.storage.management.gui/icons/tango/32x32/add-brick.svg index 529f8565..64937917 100644 --- a/src/com.gluster.storage.management.gui/icons/tango/32x32/add-brick.svg +++ b/src/com.gluster.storage.management.gui/icons/tango/32x32/add-brick.svg @@ -1870,8 +1870,8 @@ inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="1" - inkscape:cx="9.2824013" - inkscape:cy="16.108807" + inkscape:cx="24.116083" + inkscape:cy="-2.4900366" inkscape:current-layer="g11558" showgrid="true" inkscape:grid-bbox="true" @@ -1913,7 +1913,7 @@ id="g22509" transform="matrix(1.0204873,0,0,1.0204873,0.36082365,-0.16713985)"> <g - transform="matrix(2.1020507,1.4790115e-8,-1.4790115e-8,2.1020507,-27.127897,-26.141782)" + transform="matrix(2.1020507,1.4790115e-8,-1.4790115e-8,2.1020507,-27.127897,-22.076424)" id="g17815"> <path style="color:#000000;fill:url(#linearGradient22532);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient22534);stroke-width:0.77058458;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible" @@ -1946,7 +1946,7 @@ </g> <g id="g9244" - transform="matrix(-0.68651744,0.09667386,0.09667386,0.68651744,11.446606,-4.5967804)"> + transform="matrix(-0.68651744,0.09667386,0.09667386,0.68651744,11.446606,-0.53142226)"> <path sodipodi:type="arc" style="fill:#49a916;fill-opacity:1;stroke:#2f5f03;stroke-width:1.45800674;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" @@ -1997,7 +1997,7 @@ style="fill:#eeeeec;fill-opacity:1;stroke:none" /> </g> <g - transform="matrix(-1.0430096,0,0,1.0430096,-150.61257,9.1000985)" + transform="matrix(-1.0430096,0,0,1.0430096,-150.61257,7.046974)" id="g29170"> <g transform="matrix(1.1778767,0,0,1.1778767,-54.008084,-10.426102)" diff --git a/src/com.gluster.storage.management.gui/icons/tango/32x32/media-playback-pause.png b/src/com.gluster.storage.management.gui/icons/tango/32x32/media-playback-pause.png Binary files differnew file mode 100644 index 00000000..1e9f4d53 --- /dev/null +++ b/src/com.gluster.storage.management.gui/icons/tango/32x32/media-playback-pause.png diff --git a/src/com.gluster.storage.management.gui/icons/tango/32x32/media-playback-start.png b/src/com.gluster.storage.management.gui/icons/tango/32x32/media-playback-start.png Binary files differnew file mode 100644 index 00000000..66f32d89 --- /dev/null +++ b/src/com.gluster.storage.management.gui/icons/tango/32x32/media-playback-start.png diff --git a/src/com.gluster.storage.management.gui/icons/tango/32x32/media-playback-stop.png b/src/com.gluster.storage.management.gui/icons/tango/32x32/media-playback-stop.png Binary files differnew file mode 100644 index 00000000..a0947879 --- /dev/null +++ b/src/com.gluster.storage.management.gui/icons/tango/32x32/media-playback-stop.png diff --git a/src/com.gluster.storage.management.gui/icons/tango/32x32/remove-brick.svg b/src/com.gluster.storage.management.gui/icons/tango/32x32/remove-brick.svg index c9ee7a84..56d7675f 100644 --- a/src/com.gluster.storage.management.gui/icons/tango/32x32/remove-brick.svg +++ b/src/com.gluster.storage.management.gui/icons/tango/32x32/remove-brick.svg @@ -2478,8 +2478,8 @@ inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="1" - inkscape:cx="8.8372997" - inkscape:cy="20.553985" + inkscape:cx="17.88131" + inkscape:cy="7.350446" inkscape:current-layer="g11558" showgrid="true" inkscape:grid-bbox="true" @@ -2516,10 +2516,10 @@ id="g11558"> <g id="g40635" - transform="matrix(1.0168709,0,0,1.0168709,0.00574705,-0.39576072)"> + transform="matrix(1.0168709,0,0,1.0168709,0.00574705,-2.3356667)"> <g id="g17815" - transform="matrix(2.145116,1.5093124e-8,-1.5093124e-8,2.145116,-26.990644,-26.777223)"> + transform="matrix(2.145116,1.5093124e-8,-1.5093124e-8,2.145116,-26.990644,-20.941585)"> <path inkscape:connector-curvature="0" sodipodi:nodetypes="zsszssz" @@ -2606,7 +2606,7 @@ </g> </g> <g - transform="translate(0,16.717963)" + transform="translate(0,22.553601)" id="g32196"> <g id="g32184" diff --git a/src/com.gluster.storage.management.gui/icons/tango/32x32/reset-volume-option.svg b/src/com.gluster.storage.management.gui/icons/tango/32x32/reset-volume-option.svg new file mode 100644 index 00000000..af969359 --- /dev/null +++ b/src/com.gluster.storage.management.gui/icons/tango/32x32/reset-volume-option.svg @@ -0,0 +1,2590 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="32px" + height="32px" + id="svg10057" + version="1.1" + inkscape:version="0.48.1 " + sodipodi:docname="reset_volume_option.svg"> + <defs + id="defs10059"> + <linearGradient + inkscape:collect="always" + id="linearGradient9029"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop9031" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop9033" /> + </linearGradient> + <linearGradient + id="linearGradient9814"> + <stop + style="stop-color:#193a04;stop-opacity:1;" + offset="0" + id="stop9816" /> + <stop + style="stop-color:#193b04;stop-opacity:1;" + offset="1" + id="stop9818" /> + </linearGradient> + <linearGradient + id="linearGradient9804"> + <stop + style="stop-color:#193a04;stop-opacity:1;" + offset="0" + id="stop9806" /> + <stop + id="stop9808" + offset="0.25000000" + style="stop-color:#52be1a;stop-opacity:1" /> + <stop + id="stop9810" + offset="0.45037496" + style="stop-color:#52be1c;stop-opacity:1" /> + <stop + style="stop-color:#2f6d07;stop-opacity:1" + offset="1" + id="stop9812" /> + </linearGradient> + <linearGradient + id="linearGradient9798"> + <stop + style="stop-color:#590303;stop-opacity:1;" + offset="0" + id="stop9800" /> + <stop + style="stop-color:#660404;stop-opacity:1;" + offset="1" + id="stop9802" /> + </linearGradient> + <linearGradient + id="linearGradient9782"> + <stop + style="stop-color:#2c568c;stop-opacity:1" + offset="0" + id="stop9784" /> + <stop + id="stop9786" + offset="0.25000000" + style="stop-color:#ca0202;stop-opacity:1" /> + <stop + id="stop9788" + offset="0.45037496" + style="stop-color:#df0000;stop-opacity:1" /> + <stop + style="stop-color:#850505;stop-opacity:1;" + offset="1" + id="stop9790" /> + </linearGradient> + <linearGradient + id="linearGradient6488"> + <stop + id="stop6490" + offset="0" + style="stop-color:#38a111;stop-opacity:1;" /> + <stop + id="stop6492" + offset="1" + style="stop-color:#baff76;stop-opacity:1;" /> + </linearGradient> + <linearGradient + id="linearGradient6359"> + <stop + style="stop-color:#50980a;stop-opacity:1" + offset="0" + id="stop6361" /> + <stop + style="stop-color:#a5f263;stop-opacity:1" + offset="1" + id="stop6363" /> + </linearGradient> + <linearGradient + id="linearGradient6367"> + <stop + style="stop-color:#a5f263;stop-opacity:1" + offset="0" + id="stop6369" /> + <stop + style="stop-color:#73d336;stop-opacity:1" + offset="1" + id="stop6371" /> + </linearGradient> + <linearGradient + id="linearGradient7721"> + <stop + id="stop7723" + offset="0" + style="stop-color:#ffffff;stop-opacity:1" /> + <stop + id="stop7725" + offset="1" + style="stop-color:#ffffff;stop-opacity:0" /> + </linearGradient> + <linearGradient + id="linearGradient4134-9"> + <stop + id="stop4136-4" + offset="0" + style="stop-color:#4f79a6;stop-opacity:1;" /> + <stop + style="stop-color:#7fa8d3;stop-opacity:1" + offset="0.25000000" + id="stop4148-8" /> + <stop + style="stop-color:#7fa8d3;stop-opacity:1" + offset="0.45037496" + id="stop4142-8" /> + <stop + id="stop4138-2" + offset="1" + style="stop-color:#547ba6;stop-opacity:1" /> + </linearGradient> + <linearGradient + id="linearGradient4206-4"> + <stop + id="stop4208-5" + offset="0.0000000" + style="stop-color:#2b558c;stop-opacity:1" /> + <stop + id="stop4210-5" + offset="1.0000000" + style="stop-color:#2c568c;stop-opacity:1" /> + </linearGradient> + <linearGradient + id="linearGradient4176" + inkscape:collect="always"> + <stop + id="stop4178" + offset="0" + style="stop-color:#ffffff;stop-opacity:1;" /> + <stop + id="stop4180" + offset="1" + style="stop-color:#ffffff;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient7210"> + <stop + id="stop7212" + offset="0.0000000" + style="stop-color:#ffffff;stop-opacity:1.0000000;" /> + <stop + id="stop7214" + offset="1.0000000" + style="stop-color:#bfbebf;stop-opacity:1" /> + </linearGradient> + <linearGradient + id="linearGradient6924" + inkscape:collect="always"> + <stop + id="stop6926" + offset="0" + style="stop-color:#ffffff;stop-opacity:1;" /> + <stop + id="stop6928" + offset="1" + style="stop-color:#ffffff;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient2316-0"> + <stop + id="stop2318-7" + offset="0" + style="stop-color:#a48600;stop-opacity:1;" /> + <stop + id="stop2320-5" + offset="1" + style="stop-color:#c4a000;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient2326-1"> + <stop + id="stop2328-8" + offset="0" + style="stop-color:#ffffff;stop-opacity:1;" /> + <stop + id="stop2330-5" + offset="1" + style="stop-color:#ffffff;stop-opacity:0;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6385-1" + id="linearGradient10359" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.0363443,0,0,1.0363443,122.11453,-0.09055374)" + x1="-25.812988" + y1="6.046875" + x2="-20.421724" + y2="6.0895195" /> + <linearGradient + id="linearGradient6385-1"> + <stop + id="stop6387-7" + offset="0" + style="stop-color:#fbfbfb;stop-opacity:1;" /> + <stop + id="stop6389-40" + offset="1" + style="stop-color:#3566a5;stop-opacity:1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6529-9" + id="linearGradient10361" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.0020655,0,0,0.6996656,-43.395568,4.4430794)" + x1="-14.515251" + y1="6.407763" + x2="-14.468635" + y2="15.969822" /> + <linearGradient + inkscape:collect="always" + id="linearGradient6529-9"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop6531-48" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop6533-8" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6529-9" + id="linearGradient10363" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.0020655,0,0,0.69986921,-43.395568,4.440002)" + x1="-14.515251" + y1="6.410296" + x2="-14.468635" + y2="15.969573" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6529-9" + id="linearGradient10365" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.0020655,0,0,1,-43.395568,0.92382652)" + x1="-14.515251" + y1="8.0025444" + x2="-14.468635" + y2="15.969822" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6385-1" + id="linearGradient10367" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.0363443,0,0,1.0363443,122.11453,-0.09055374)" + x1="-25.812988" + y1="6.046875" + x2="-20.421724" + y2="6.0895195" /> + <linearGradient + id="linearGradient4245"> + <stop + id="stop4247" + offset="0" + style="stop-color:#fbfbfb;stop-opacity:1;" /> + <stop + id="stop4249" + offset="1" + style="stop-color:#3566a5;stop-opacity:1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6385-1" + id="linearGradient10369" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.0363443,0,0,1.0363443,122.11453,-0.09055374)" + x1="-25.812988" + y1="6.046875" + x2="-20.421724" + y2="6.0895195" /> + <linearGradient + id="linearGradient4252"> + <stop + id="stop4254" + offset="0" + style="stop-color:#fbfbfb;stop-opacity:1;" /> + <stop + id="stop4256" + offset="1" + style="stop-color:#3566a5;stop-opacity:1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6385-1" + id="linearGradient10371" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.0363443,0,0,1.0363443,122.11453,-0.09055374)" + x1="-25.812988" + y1="6.046875" + x2="-20.421724" + y2="6.0895195" /> + <linearGradient + id="linearGradient4259"> + <stop + id="stop4261" + offset="0" + style="stop-color:#fbfbfb;stop-opacity:1;" /> + <stop + id="stop4263" + offset="1" + style="stop-color:#3566a5;stop-opacity:1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4134-9-5" + id="linearGradient6925" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.4954152,0,0,1.4906315,382.15258,-11.973727)" + x1="9.9747334" + y1="31.09375" + x2="37.077564" + y2="31.09375" /> + <linearGradient + id="linearGradient4134-9-5"> + <stop + id="stop4136-4-7" + offset="0" + style="stop-color:#4f79a6;stop-opacity:1;" /> + <stop + style="stop-color:#7fa8d3;stop-opacity:1" + offset="0.25000000" + id="stop4148-8-9" /> + <stop + style="stop-color:#7fa8d3;stop-opacity:1" + offset="0.45037496" + id="stop4142-8-2" /> + <stop + id="stop4138-2-3" + offset="1" + style="stop-color:#547ba6;stop-opacity:1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4206-4-7" + id="linearGradient6927" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.4954152,0,0,1.4906315,382.15258,-11.973727)" + x1="25.064732" + y1="21.857143" + x2="25.207588" + y2="25.428572" /> + <linearGradient + id="linearGradient4206-4-7"> + <stop + id="stop4208-5-9" + offset="0.0000000" + style="stop-color:#3465a4;stop-opacity:1" /> + <stop + id="stop4210-5-3" + offset="1.0000000" + style="stop-color:#3465a4;stop-opacity:1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4176-3" + id="linearGradient6929" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.4954152,0,0,1.4954152,382.15258,-12.162834)" + x1="17.160095" + y1="14.004482" + x2="37.969398" + y2="56.575912" /> + <linearGradient + id="linearGradient4176-3" + inkscape:collect="always"> + <stop + id="stop4178-8" + offset="0" + style="stop-color:#ffffff;stop-opacity:1;" /> + <stop + id="stop4180-1" + offset="1" + style="stop-color:#ffffff;stop-opacity:0;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient7210-7" + id="linearGradient6931" + gradientUnits="userSpaceOnUse" + x1="24" + y1="16.525082" + x2="24" + y2="13.284962" /> + <linearGradient + id="linearGradient7210-7"> + <stop + id="stop7212-33" + offset="0.0000000" + style="stop-color:#ffffff;stop-opacity:1.0000000;" /> + <stop + id="stop7214-0" + offset="1.0000000" + style="stop-color:#bfbebf;stop-opacity:1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6924-6" + id="linearGradient6933" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.4954152,0,0,1.4954152,381.93895,-8.2106577)" + x1="16.07143" + y1="19.5" + x2="15.785715" + y2="30" /> + <linearGradient + id="linearGradient6924-6" + inkscape:collect="always"> + <stop + id="stop6926-8" + offset="0" + style="stop-color:#ffffff;stop-opacity:1;" /> + <stop + id="stop6928-76" + offset="1" + style="stop-color:#ffffff;stop-opacity:0;" /> + </linearGradient> + <linearGradient + y2="30" + x2="15.785715" + y1="19.5" + x1="16.07143" + gradientTransform="matrix(1.4954152,0,0,1.4954152,381.93895,-8.2106577)" + gradientUnits="userSpaceOnUse" + id="linearGradient13350" + xlink:href="#linearGradient6924-6" + inkscape:collect="always" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4134-9" + id="linearGradient13420" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.88340971,0,0,0.88340971,41.850823,-2.8039326)" + x1="9.9747334" + y1="31.09375" + x2="37.077564" + y2="31.09375" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4206-4" + id="linearGradient13422" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.88340971,0,0,0.88340971,41.850823,-2.8039326)" + x1="25.064732" + y1="21.857143" + x2="25.207588" + y2="25.428572" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4176" + id="linearGradient13424" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.8488726,0,0,0.8488726,42.68195,-1.9724202)" + x1="17.160095" + y1="14.004482" + x2="37.969398" + y2="56.575912" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient7210" + id="linearGradient13426" + gradientUnits="userSpaceOnUse" + x1="24" + y1="16.525082" + x2="24" + y2="13.284962" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6924" + id="linearGradient13428" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.88340971,0,0,0.88340971,42.072914,-0.86102988)" + x1="15.972866" + y1="16.641634" + x2="15.785715" + y2="30" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6214" + id="linearGradient6649" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(394,0)" + x1="28.158247" + y1="13.121862" + x2="21.283247" + y2="4.670352" /> + <linearGradient + id="linearGradient6214"> + <stop + style="stop-color:#38a111;stop-opacity:1" + offset="0" + id="stop6216" /> + <stop + style="stop-color:#baff76;stop-opacity:1" + offset="1" + id="stop6218" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6230" + id="linearGradient6651" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,3.0700325,-442,-31.270668)" + x1="19.120131" + y1="20.965828" + x2="28.07798" + y2="14.630604" /> + <linearGradient + id="linearGradient6230"> + <stop + style="stop-color:#b4fb71;stop-opacity:1" + offset="0" + id="stop6232" /> + <stop + style="stop-color:#3fa617;stop-opacity:1" + offset="1" + id="stop6234" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6214" + id="linearGradient6653" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(394,0)" + x1="28.158247" + y1="13.121862" + x2="21.283247" + y2="4.670352" /> + <linearGradient + id="linearGradient15141"> + <stop + style="stop-color:#38a111;stop-opacity:1" + offset="0" + id="stop15143" /> + <stop + style="stop-color:#baff76;stop-opacity:1" + offset="1" + id="stop15145" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6230" + id="linearGradient6655" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,3.0700325,-442,-31.270668)" + x1="19.120131" + y1="20.965828" + x2="28.07798" + y2="14.630604" /> + <linearGradient + id="linearGradient15148"> + <stop + style="stop-color:#b4fb71;stop-opacity:1" + offset="0" + id="stop15150" /> + <stop + style="stop-color:#3fa617;stop-opacity:1" + offset="1" + id="stop15152" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6214" + id="linearGradient6657" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(394,0)" + x1="28.158247" + y1="13.121862" + x2="21.283247" + y2="4.670352" /> + <linearGradient + id="linearGradient15155"> + <stop + style="stop-color:#38a111;stop-opacity:1" + offset="0" + id="stop15157" /> + <stop + style="stop-color:#baff76;stop-opacity:1" + offset="1" + id="stop15159" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6230" + id="linearGradient6659" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,3.0700325,-442,-31.270668)" + x1="19.120131" + y1="20.965828" + x2="28.07798" + y2="14.630604" /> + <linearGradient + id="linearGradient15162"> + <stop + style="stop-color:#b4fb71;stop-opacity:1" + offset="0" + id="stop15164" /> + <stop + style="stop-color:#3fa617;stop-opacity:1" + offset="1" + id="stop15166" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4134-9-5-1" + id="linearGradient6639" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.4954152,0,0,1.4906315,382.15258,-11.973727)" + x1="9.9747334" + y1="31.09375" + x2="37.077564" + y2="31.09375" /> + <linearGradient + id="linearGradient4134-9-5-1"> + <stop + id="stop4136-4-7-7" + offset="0" + style="stop-color:#4f79a6;stop-opacity:1;" /> + <stop + style="stop-color:#7fa8d3;stop-opacity:1" + offset="0.25000000" + id="stop4148-8-9-4" /> + <stop + style="stop-color:#7fa8d3;stop-opacity:1" + offset="0.45037496" + id="stop4142-8-2-0" /> + <stop + id="stop4138-2-3-9" + offset="1" + style="stop-color:#547ba6;stop-opacity:1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4206-4-7-4" + id="linearGradient6641" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.4954152,0,0,1.4906315,382.15258,-11.973727)" + x1="25.064732" + y1="21.857143" + x2="25.207588" + y2="25.428572" /> + <linearGradient + id="linearGradient4206-4-7-4"> + <stop + id="stop4208-5-9-8" + offset="0.0000000" + style="stop-color:#3465a4;stop-opacity:1" /> + <stop + id="stop4210-5-3-8" + offset="1.0000000" + style="stop-color:#3465a4;stop-opacity:1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4176-3-2" + id="linearGradient6643" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.4954152,0,0,1.4954152,382.15258,-12.162834)" + x1="17.160095" + y1="14.004482" + x2="37.969398" + y2="56.575912" /> + <linearGradient + id="linearGradient4176-3-2" + inkscape:collect="always"> + <stop + id="stop4178-8-4" + offset="0" + style="stop-color:#ffffff;stop-opacity:1;" /> + <stop + id="stop4180-1-5" + offset="1" + style="stop-color:#ffffff;stop-opacity:0;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient7210-7-5" + id="linearGradient6645" + gradientUnits="userSpaceOnUse" + x1="24" + y1="16.525082" + x2="24" + y2="13.284962" /> + <linearGradient + id="linearGradient7210-7-5"> + <stop + id="stop7212-33-1" + offset="0.0000000" + style="stop-color:#ffffff;stop-opacity:1.0000000;" /> + <stop + id="stop7214-0-7" + offset="1.0000000" + style="stop-color:#bfbebf;stop-opacity:1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6924-6-1" + id="linearGradient6647" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.4954152,0,0,1.4954152,381.93895,-8.2106577)" + x1="16.07143" + y1="19.5" + x2="15.785715" + y2="30" /> + <linearGradient + id="linearGradient6924-6-1" + inkscape:collect="always"> + <stop + id="stop6926-8-1" + offset="0" + style="stop-color:#ffffff;stop-opacity:1;" /> + <stop + id="stop6928-76-5" + offset="1" + style="stop-color:#ffffff;stop-opacity:0;" /> + </linearGradient> + <linearGradient + y2="30" + x2="15.785715" + y1="19.5" + x1="16.07143" + gradientTransform="matrix(1.4954152,0,0,1.4954152,381.93895,-8.2106577)" + gradientUnits="userSpaceOnUse" + id="linearGradient15211" + xlink:href="#linearGradient6924-6-1" + inkscape:collect="always" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4134-9-5-1" + id="linearGradient15381" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.4954152,0,0,1.4906315,382.15258,-11.973727)" + x1="9.9747334" + y1="31.09375" + x2="37.077564" + y2="31.09375" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4206-4-7-4" + id="linearGradient15383" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.4954152,0,0,1.4906315,382.15258,-11.973727)" + x1="25.064732" + y1="21.857143" + x2="25.207588" + y2="25.428572" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4176-3-2" + id="linearGradient15385" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.4954152,0,0,1.4954152,382.15258,-12.162834)" + x1="17.160095" + y1="14.004482" + x2="37.969398" + y2="56.575912" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient7210-7-5" + id="linearGradient15387" + gradientUnits="userSpaceOnUse" + x1="24" + y1="16.525082" + x2="24" + y2="13.284962" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6924-6-1" + id="linearGradient15389" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.4954152,0,0,1.4954152,381.93895,-8.2106577)" + x1="16.07143" + y1="19.5" + x2="15.785715" + y2="30" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6214" + id="linearGradient15391" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(394,0)" + x1="28.158247" + y1="13.121862" + x2="21.283247" + y2="4.670352" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6230" + id="linearGradient15393" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,3.0700325,-442,-31.270668)" + x1="19.120131" + y1="20.965828" + x2="28.07798" + y2="14.630604" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6214" + id="linearGradient15395" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(394,0)" + x1="28.158247" + y1="13.121862" + x2="21.283247" + y2="4.670352" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6230" + id="linearGradient15397" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,3.0700325,-442,-31.270668)" + x1="19.120131" + y1="20.965828" + x2="28.07798" + y2="14.630604" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6214" + id="linearGradient15399" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(394,0)" + x1="28.158247" + y1="13.121862" + x2="21.283247" + y2="4.670352" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6230" + id="linearGradient15401" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,3.0700325,-442,-31.270668)" + x1="19.120131" + y1="20.965828" + x2="28.07798" + y2="14.630604" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6214" + id="linearGradient15424" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(394,0)" + x1="30.138733" + y1="16.429234" + x2="19.538534" + y2="5.0010891" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6230" + id="linearGradient15426" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,3.0700325,-442,-31.270668)" + x1="19.120131" + y1="20.965828" + x2="28.07798" + y2="14.630604" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6214" + id="linearGradient15428" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(394,0)" + x1="29.091856" + y1="14.925975" + x2="20.082891" + y2="5.4053607" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6230" + id="linearGradient15430" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,3.0700325,-442,-31.270668)" + x1="19.120131" + y1="20.965828" + x2="28.07798" + y2="14.630604" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6214" + id="linearGradient15432" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(394,0)" + x1="29.855806" + y1="16.145744" + x2="19.302763" + y2="5.1428337" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6230" + id="linearGradient15434" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,3.0700325,-442,-31.270668)" + x1="19.120131" + y1="20.965828" + x2="28.07798" + y2="14.630604" /> + <clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath15437"> + <path + clip-path="none" + style="color:#000000;fill:#3a3a3a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00492704;marker:none;visibility:visible;display:block;overflow:visible" + d="m 437.13691,15.199953 c 0,3.922069 -8.57373,7.385024 -19.14997,7.385024 -10.57623,0 -19.14997,-3.462955 -19.14997,-7.385024 0,-2.453311 -2.97639,-9.3396375 2.1246,-10.6154265 3.05388,-0.7637939 13.06472,-4.48610797 17.02537,-4.48610797 4.65593,0 15.23964,3.20196207 18.55878,4.22641197 4.22049,1.302653 0.59119,8.6796495 0.59119,10.8751225 z" + id="path15439" + inkscape:connector-curvature="0" + sodipodi:nodetypes="sssssss" /> + </clipPath> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4134-9-5" + id="linearGradient16236" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.4954152,0,0,1.4906315,382.15258,-11.973727)" + x1="9.9747334" + y1="31.09375" + x2="37.077564" + y2="31.09375" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4206-4-7" + id="linearGradient16238" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.4954152,0,0,1.4906315,382.15258,-11.973727)" + x1="25.064732" + y1="21.857143" + x2="25.207588" + y2="25.428572" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4176-3" + id="linearGradient16240" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.4954152,0,0,1.4954152,382.15258,-12.162834)" + x1="17.160095" + y1="14.004482" + x2="37.969398" + y2="56.575912" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient7210-7" + id="linearGradient16242" + gradientUnits="userSpaceOnUse" + x1="24" + y1="16.525082" + x2="24" + y2="13.284962" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6924-6" + id="linearGradient16244" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.4954152,0,0,1.4954152,381.93895,-8.2106577)" + x1="16.07143" + y1="19.5" + x2="15.785715" + y2="30" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6214" + id="linearGradient16246" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(394,0)" + x1="30.138733" + y1="16.429234" + x2="19.538534" + y2="5.0010891" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6230" + id="linearGradient16248" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,3.0700325,-442,-31.270668)" + x1="19.120131" + y1="20.965828" + x2="28.07798" + y2="14.630604" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6214" + id="linearGradient16250" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(394,0)" + x1="29.091856" + y1="14.925975" + x2="20.082891" + y2="5.4053607" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6230" + id="linearGradient16252" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,3.0700325,-442,-31.270668)" + x1="19.120131" + y1="20.965828" + x2="28.07798" + y2="14.630604" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6214" + id="linearGradient16254" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(394,0)" + x1="29.855806" + y1="16.145744" + x2="19.302763" + y2="5.1428337" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6230" + id="linearGradient16256" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,3.0700325,-442,-31.270668)" + x1="19.120131" + y1="20.965828" + x2="28.07798" + y2="14.630604" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4134-9-6" + id="linearGradient17825" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.884513,6.8263032)" + x1="9.9747334" + y1="31.09375" + x2="37.077564" + y2="31.09375" /> + <linearGradient + id="linearGradient4134-9-6"> + <stop + id="stop4136-4-9" + offset="0" + style="stop-color:#4f79a6;stop-opacity:1;" /> + <stop + style="stop-color:#7fa8d3;stop-opacity:1" + offset="0.25000000" + id="stop4148-8-6" /> + <stop + style="stop-color:#7fa8d3;stop-opacity:1" + offset="0.45037496" + id="stop4142-8-9" /> + <stop + id="stop4138-2-8" + offset="1" + style="stop-color:#547ba6;stop-opacity:1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4206-4-8" + id="linearGradient17827" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.884513,6.8263032)" + x1="25.064732" + y1="21.857143" + x2="25.207588" + y2="25.428572" /> + <linearGradient + id="linearGradient4206-4-8"> + <stop + id="stop4208-5-3" + offset="0.0000000" + style="stop-color:#2b558c;stop-opacity:1" /> + <stop + id="stop4210-5-8" + offset="1.0000000" + style="stop-color:#2c568c;stop-opacity:1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4176-9" + id="linearGradient17829" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.45408812,0,0,0.45408812,-19.439922,7.2711048)" + x1="17.160095" + y1="14.004482" + x2="37.969398" + y2="56.575912" /> + <linearGradient + id="linearGradient4176-9" + inkscape:collect="always"> + <stop + id="stop4178-6" + offset="0" + style="stop-color:#ffffff;stop-opacity:1;" /> + <stop + id="stop4180-7" + offset="1" + style="stop-color:#ffffff;stop-opacity:0;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient7210-8" + id="linearGradient17831" + gradientUnits="userSpaceOnUse" + x1="24" + y1="16.525082" + x2="24" + y2="13.284962" /> + <linearGradient + id="linearGradient7210-8"> + <stop + id="stop7212-7" + offset="0.0000000" + style="stop-color:#ffffff;stop-opacity:1.0000000;" /> + <stop + id="stop7214-5" + offset="1.0000000" + style="stop-color:#bfbebf;stop-opacity:1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6924-1" + id="linearGradient17833" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.765711,7.8656218)" + x1="15.972866" + y1="16.641634" + x2="15.785715" + y2="30" /> + <linearGradient + id="linearGradient6924-1" + inkscape:collect="always"> + <stop + id="stop6926-3" + offset="0" + style="stop-color:#ffffff;stop-opacity:1;" /> + <stop + id="stop6928-9" + offset="1" + style="stop-color:#ffffff;stop-opacity:0;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4134-9-5-6" + id="linearGradient17805" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.4954152,0,0,1.4906315,382.15258,-11.973727)" + x1="9.9747334" + y1="31.09375" + x2="37.077564" + y2="31.09375" /> + <linearGradient + id="linearGradient4134-9-5-6"> + <stop + id="stop4136-4-7-0" + offset="0" + style="stop-color:#4f79a6;stop-opacity:1;" /> + <stop + style="stop-color:#7fa8d3;stop-opacity:1" + offset="0.25000000" + id="stop4148-8-9-9" /> + <stop + style="stop-color:#7fa8d3;stop-opacity:1" + offset="0.45037496" + id="stop4142-8-2-2" /> + <stop + id="stop4138-2-3-3" + offset="1" + style="stop-color:#547ba6;stop-opacity:1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4206-4-7-7" + id="linearGradient17807" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.4954152,0,0,1.4906315,382.15258,-11.973727)" + x1="25.064732" + y1="21.857143" + x2="25.207588" + y2="25.428572" /> + <linearGradient + id="linearGradient4206-4-7-7"> + <stop + id="stop4208-5-9-9" + offset="0.0000000" + style="stop-color:#3465a4;stop-opacity:1" /> + <stop + id="stop4210-5-3-6" + offset="1.0000000" + style="stop-color:#3465a4;stop-opacity:1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4176-3-7" + id="linearGradient17809" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.4954152,0,0,1.4954152,382.15258,-12.162834)" + x1="17.160095" + y1="14.004482" + x2="37.969398" + y2="56.575912" /> + <linearGradient + id="linearGradient4176-3-7" + inkscape:collect="always"> + <stop + id="stop4178-8-8" + offset="0" + style="stop-color:#ffffff;stop-opacity:1;" /> + <stop + id="stop4180-1-8" + offset="1" + style="stop-color:#ffffff;stop-opacity:0;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient7210-7-1" + id="linearGradient17811" + gradientUnits="userSpaceOnUse" + x1="24" + y1="16.525082" + x2="24" + y2="13.284962" /> + <linearGradient + id="linearGradient7210-7-1"> + <stop + id="stop7212-33-7" + offset="0.0000000" + style="stop-color:#ffffff;stop-opacity:1.0000000;" /> + <stop + id="stop7214-0-1" + offset="1.0000000" + style="stop-color:#bfbebf;stop-opacity:1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6924-6-5" + id="linearGradient17813" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.4954152,0,0,1.4954152,381.93895,-8.2106577)" + x1="16.07143" + y1="19.5" + x2="15.785715" + y2="30" /> + <linearGradient + id="linearGradient6924-6-5" + inkscape:collect="always"> + <stop + id="stop6926-8-2" + offset="0" + style="stop-color:#ffffff;stop-opacity:1;" /> + <stop + id="stop6928-76-3" + offset="1" + style="stop-color:#ffffff;stop-opacity:0;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4134-9-6-2" + id="linearGradient17825-4" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.884513,6.8263032)" + x1="9.9747334" + y1="31.09375" + x2="37.077564" + y2="31.09375" /> + <linearGradient + id="linearGradient4134-9-6-2"> + <stop + id="stop4136-4-9-1" + offset="0" + style="stop-color:#4f79a6;stop-opacity:1;" /> + <stop + style="stop-color:#7fa8d3;stop-opacity:1" + offset="0.25000000" + id="stop4148-8-6-9" /> + <stop + style="stop-color:#7fa8d3;stop-opacity:1" + offset="0.45037496" + id="stop4142-8-9-7" /> + <stop + id="stop4138-2-8-2" + offset="1" + style="stop-color:#547ba6;stop-opacity:1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4206-4-8-2" + id="linearGradient17827-8" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.884513,6.8263032)" + x1="25.064732" + y1="21.857143" + x2="25.207588" + y2="25.428572" /> + <linearGradient + id="linearGradient4206-4-8-2"> + <stop + id="stop4208-5-3-8" + offset="0.0000000" + style="stop-color:#2b558c;stop-opacity:1" /> + <stop + id="stop4210-5-8-2" + offset="1.0000000" + style="stop-color:#2c568c;stop-opacity:1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4176-9-0" + id="linearGradient17829-6" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.45408812,0,0,0.45408812,-19.439922,7.2711048)" + x1="17.160095" + y1="14.004482" + x2="37.969398" + y2="56.575912" /> + <linearGradient + id="linearGradient4176-9-0" + inkscape:collect="always"> + <stop + id="stop4178-6-7" + offset="0" + style="stop-color:#ffffff;stop-opacity:1;" /> + <stop + id="stop4180-7-9" + offset="1" + style="stop-color:#ffffff;stop-opacity:0;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient7210-8-1" + id="linearGradient17831-4" + gradientUnits="userSpaceOnUse" + x1="24" + y1="16.525082" + x2="24" + y2="13.284962" /> + <linearGradient + id="linearGradient7210-8-1"> + <stop + id="stop7212-7-8" + offset="0.0000000" + style="stop-color:#ffffff;stop-opacity:1.0000000;" /> + <stop + id="stop7214-5-6" + offset="1" + style="stop-color:#fffeff;stop-opacity:1;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6924-1-0" + id="linearGradient17833-1" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.765711,7.8656218)" + x1="15.972866" + y1="16.641634" + x2="15.785715" + y2="30" /> + <linearGradient + id="linearGradient6924-1-0" + inkscape:collect="always"> + <stop + id="stop6926-3-7" + offset="0" + style="stop-color:#ffffff;stop-opacity:1;" /> + <stop + id="stop6928-9-8" + offset="1" + style="stop-color:#ffffff;stop-opacity:0;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4134-9-5-6-5" + id="linearGradient17805-9" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.4954152,0,0,1.4906315,382.15258,-11.973727)" + x1="9.9747334" + y1="31.09375" + x2="37.077564" + y2="31.09375" /> + <linearGradient + id="linearGradient4134-9-5-6-5"> + <stop + id="stop4136-4-7-1" + offset="0" + style="stop-color:#4f79a6;stop-opacity:1;" /> + <stop + style="stop-color:#7fa8d3;stop-opacity:1" + offset="0.25000000" + id="stop4148-8-9-9-8" /> + <stop + style="stop-color:#7fa8d3;stop-opacity:1" + offset="0.45037496" + id="stop4142-8-2-2-4" /> + <stop + id="stop4138-2-3-1" + offset="1" + style="stop-color:#547ba6;stop-opacity:1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4206-4-7-47" + id="linearGradient17807-6" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.4954152,0,0,1.4906315,382.15258,-11.973727)" + x1="25.064732" + y1="21.857143" + x2="25.207588" + y2="25.428572" /> + <linearGradient + id="linearGradient4206-4-7-47"> + <stop + id="stop4208-5-9-5" + offset="0.0000000" + style="stop-color:#3465a4;stop-opacity:1" /> + <stop + id="stop4210-5-3-7" + offset="1.0000000" + style="stop-color:#3465a4;stop-opacity:1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4176-3-3" + id="linearGradient17809-9" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.4954152,0,0,1.4954152,382.15258,-12.162834)" + x1="17.160095" + y1="14.004482" + x2="37.969398" + y2="56.575912" /> + <linearGradient + id="linearGradient4176-3-3" + inkscape:collect="always"> + <stop + id="stop4178-8-0" + offset="0" + style="stop-color:#ffffff;stop-opacity:1;" /> + <stop + id="stop4180-1-4" + offset="1" + style="stop-color:#ffffff;stop-opacity:0;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient7210-7-1-9" + id="linearGradient17811-4" + gradientUnits="userSpaceOnUse" + x1="24" + y1="16.525082" + x2="24" + y2="13.284962" /> + <linearGradient + id="linearGradient7210-7-1-9"> + <stop + id="stop7212-33-5" + offset="0.0000000" + style="stop-color:#ffffff;stop-opacity:1.0000000;" /> + <stop + id="stop7214-0-0" + offset="1.0000000" + style="stop-color:#bfbebf;stop-opacity:1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6924-6-4" + id="linearGradient17813-7" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.4954152,0,0,1.4954152,381.93895,-8.2106577)" + x1="16.07143" + y1="19.5" + x2="15.785715" + y2="30" /> + <linearGradient + id="linearGradient6924-6-4" + inkscape:collect="always"> + <stop + id="stop6926-8-9" + offset="0" + style="stop-color:#ffffff;stop-opacity:1;" /> + <stop + id="stop6928-76-6" + offset="1" + style="stop-color:#ffffff;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient7903"> + <stop + style="stop-color:#ff0000;stop-opacity:1;" + offset="0" + id="stop7905" /> + <stop + id="stop7907" + offset="0.25000000" + style="stop-color:#cc0000;stop-opacity:1" /> + <stop + id="stop7909" + offset="0.45037496" + style="stop-color:#f30000;stop-opacity:1;" /> + <stop + style="stop-color:#910000;stop-opacity:1;" + offset="1" + id="stop7911" /> + </linearGradient> + <linearGradient + id="linearGradient7913"> + <stop + style="stop-color:#810000;stop-opacity:1;" + offset="0" + id="stop7915" /> + <stop + style="stop-color:#810000;stop-opacity:1" + offset="1.0000000" + id="stop7917" /> + </linearGradient> + <linearGradient + id="linearGradient8687"> + <stop + style="stop-color:#ffffff;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop8689" /> + <stop + style="stop-color:#fffeff;stop-opacity:1" + offset="1.0000000" + id="stop8691" /> + </linearGradient> + <linearGradient + id="linearGradient8738"> + <stop + style="stop-color:#225000;stop-opacity:1;" + offset="0" + id="stop8740" /> + <stop + id="stop8742" + offset="0.25000000" + style="stop-color:#52be19;stop-opacity:1" /> + <stop + id="stop8744" + offset="0.45037496" + style="stop-color:#57bc2d;stop-opacity:1" /> + <stop + style="stop-color:#3c8a12;stop-opacity:1;" + offset="1" + id="stop8746" /> + </linearGradient> + <linearGradient + id="linearGradient8760"> + <stop + style="stop-color:#265906;stop-opacity:1" + offset="0.0000000" + id="stop8762" /> + <stop + style="stop-color:#295f06;stop-opacity:1" + offset="1.0000000" + id="stop8764" /> + </linearGradient> + <linearGradient + id="linearGradient7210-7-1-8"> + <stop + id="stop7212-33-6" + offset="0.0000000" + style="stop-color:#ffffff;stop-opacity:1.0000000;" /> + <stop + id="stop7214-0-6" + offset="1" + style="stop-color:#fffeff;stop-opacity:1;" /> + </linearGradient> + <linearGradient + id="linearGradient4134-9-5-6-6"> + <stop + id="stop4136-4-7-1-3" + offset="0" + style="stop-color:#4f79a6;stop-opacity:1;" /> + <stop + style="stop-color:#7fa8d3;stop-opacity:1" + offset="0.25000000" + id="stop4148-8-9-9-5" /> + <stop + style="stop-color:#7fa8d3;stop-opacity:1" + offset="0.45037496" + id="stop4142-8-2-02" /> + <stop + id="stop4138-2-3-6" + offset="1" + style="stop-color:#547ba6;stop-opacity:1" /> + </linearGradient> + <linearGradient + id="linearGradient4206-4-7-8"> + <stop + id="stop4208-5-9-9-4" + offset="0.0000000" + style="stop-color:#3465a4;stop-opacity:1" /> + <stop + id="stop4210-5-3-6-1" + offset="1.0000000" + style="stop-color:#3465a4;stop-opacity:1" /> + </linearGradient> + <linearGradient + id="linearGradient8998"> + <stop + id="stop9000" + offset="0.0000000" + style="stop-color:#ffffff;stop-opacity:1.0000000;" /> + <stop + id="stop9002" + offset="1" + style="stop-color:#fffeff;stop-opacity:1;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient9804" + id="linearGradient9732" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.47256308,0,0,0.47256308,-20.05894,6.8263032)" + x1="9.9747334" + y1="31.09375" + x2="37.077564" + y2="31.09375" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient9814" + id="linearGradient9734" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.47256308,0,0,0.47256308,-20.05894,6.8263032)" + x1="25.064732" + y1="21.857143" + x2="25.207588" + y2="25.428572" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4176-9-0" + id="linearGradient9736" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.45408812,0,0,0.45408812,-19.614349,7.2711048)" + x1="17.160095" + y1="14.004482" + x2="37.969398" + y2="56.575912" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient7210-8-1" + id="linearGradient9738" + gradientUnits="userSpaceOnUse" + x1="24" + y1="16.525082" + x2="24" + y2="13.284962" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6924-1-0" + id="linearGradient9740" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.940138,7.8656218)" + x1="15.972866" + y1="16.641634" + x2="15.785715" + y2="30" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient9782" + id="linearGradient9752" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.884513,6.8263032)" + x1="9.9747334" + y1="31.09375" + x2="37.077564" + y2="31.09375" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient9798" + id="linearGradient9754" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.884513,6.8263032)" + x1="25.064732" + y1="21.857143" + x2="25.207588" + y2="25.428572" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4176-9-0" + id="linearGradient9756" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.45408812,0,0,0.45408812,-19.439922,7.2711048)" + x1="17.160095" + y1="14.004482" + x2="37.969398" + y2="56.575912" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient7210-8-1" + id="linearGradient9758" + gradientUnits="userSpaceOnUse" + x1="24" + y1="16.525082" + x2="24" + y2="13.284962" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6924-1-0" + id="linearGradient9760" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.765711,7.8656218)" + x1="15.972866" + y1="16.641634" + x2="15.785715" + y2="30" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4134-9-6-2" + id="linearGradient9762" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.884513,6.8263032)" + x1="9.9747334" + y1="31.09375" + x2="37.077564" + y2="31.09375" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4206-4-8-2" + id="linearGradient9764" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.884513,6.8263032)" + x1="25.064732" + y1="21.857143" + x2="25.207588" + y2="25.428572" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4176-9-0" + id="linearGradient9766" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.45408812,0,0,0.45408812,-19.439922,7.2711048)" + x1="17.160095" + y1="14.004482" + x2="37.969398" + y2="56.575912" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient7210-8-1" + id="linearGradient9768" + gradientUnits="userSpaceOnUse" + x1="24" + y1="16.525082" + x2="24" + y2="13.284962" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6924-1-0" + id="linearGradient9770" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.765711,7.8656218)" + x1="15.972866" + y1="16.641634" + x2="15.785715" + y2="30" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4134-9-6-2" + id="linearGradient9772" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.884513,6.8263032)" + x1="9.9747334" + y1="31.09375" + x2="37.077564" + y2="31.09375" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4206-4-8-2" + id="linearGradient9774" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.884513,6.8263032)" + x1="25.064732" + y1="21.857143" + x2="25.207588" + y2="25.428572" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4176-9-0" + id="linearGradient9776" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.45408812,0,0,0.45408812,-19.439922,7.2711048)" + x1="17.160095" + y1="14.004482" + x2="37.969398" + y2="56.575912" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient7210-8-1" + id="linearGradient9778" + gradientUnits="userSpaceOnUse" + x1="24" + y1="16.525082" + x2="24" + y2="13.284962" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6924-1-0" + id="linearGradient9780" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.765711,7.8656218)" + x1="15.972866" + y1="16.641634" + x2="15.785715" + y2="30" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4134-9-6-2" + id="linearGradient10366" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.884513,6.8263032)" + x1="9.9747334" + y1="31.09375" + x2="37.077564" + y2="31.09375" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4206-4-8-2" + id="linearGradient10368" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.884513,6.8263032)" + x1="25.064732" + y1="21.857143" + x2="25.207588" + y2="25.428572" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4176-9-0" + id="linearGradient10370" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.45408812,0,0,0.45408812,-19.439922,7.2711048)" + x1="17.160095" + y1="14.004482" + x2="37.969398" + y2="56.575912" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient7210-8-1" + id="linearGradient10372" + gradientUnits="userSpaceOnUse" + x1="24" + y1="16.525082" + x2="24" + y2="13.284962" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6924-1-0" + id="linearGradient10374" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.765711,7.8656218)" + x1="15.972866" + y1="16.641634" + x2="15.785715" + y2="30" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4134-9-5-6-56" + id="linearGradient8805-5" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.08241,0,0,1.0768062,20.160914,4.7996577)" + x1="9.9747334" + y1="31.09375" + x2="37.077564" + y2="31.09375" /> + <linearGradient + id="linearGradient4134-9-5-6-56"> + <stop + id="stop4136-4-7-1-8" + offset="0" + style="stop-color:#4f79a6;stop-opacity:1;" /> + <stop + style="stop-color:#7fa8d3;stop-opacity:1" + offset="0.25000000" + id="stop4148-8-9-9-89" /> + <stop + style="stop-color:#7fa8d3;stop-opacity:1" + offset="0.45037496" + id="stop4142-8-2-02-1" /> + <stop + id="stop4138-2-3-6-4" + offset="1" + style="stop-color:#547ba6;stop-opacity:1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4206-4-7-8-0" + id="linearGradient8807-7" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.08241,0,0,1.0768062,20.160914,4.7996577)" + x1="25.064732" + y1="21.857143" + x2="25.207588" + y2="25.428572" /> + <linearGradient + id="linearGradient4206-4-7-8-0"> + <stop + id="stop4208-5-9-9-45" + offset="0.0000000" + style="stop-color:#3465a4;stop-opacity:1" /> + <stop + id="stop4210-5-3-6-5" + offset="1.0000000" + style="stop-color:#3465a4;stop-opacity:1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4176-3-2-47" + id="linearGradient8809-5" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.08241,0,0,1.0802618,20.160914,4.6630501)" + x1="17.160095" + y1="14.004482" + x2="37.969398" + y2="56.575912" /> + <linearGradient + id="linearGradient4176-3-2-47" + inkscape:collect="always"> + <stop + id="stop4178-8-5-5" + offset="0" + style="stop-color:#ffffff;stop-opacity:1;" /> + <stop + id="stop4180-1-8-2" + offset="1" + style="stop-color:#ffffff;stop-opacity:0;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient7210-7-1-8-8" + id="linearGradient8811-9" + gradientUnits="userSpaceOnUse" + x1="24" + y1="16.525082" + x2="24" + y2="13.284962" /> + <linearGradient + id="linearGradient7210-7-1-8-8"> + <stop + id="stop7212-33-6-0" + offset="0.0000000" + style="stop-color:#ffffff;stop-opacity:1.0000000;" /> + <stop + id="stop7214-0-6-2" + offset="1" + style="stop-color:#fffeff;stop-opacity:1;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6924-6-1-5" + id="linearGradient8813-6" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.08241,0,0,1.0802618,20.006284,7.5180332)" + x1="16.07143" + y1="19.5" + x2="15.785715" + y2="30" /> + <linearGradient + id="linearGradient6924-6-1-5" + inkscape:collect="always"> + <stop + id="stop6926-8-6-2" + offset="0" + style="stop-color:#ffffff;stop-opacity:1;" /> + <stop + id="stop6928-76-7-5" + offset="1" + style="stop-color:#ffffff;stop-opacity:0;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6924-6-1-5" + id="linearGradient8803-8" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.77837104,0,0,0.77682625,33.356259,-10.318064)" + x1="16.07143" + y1="19.5" + x2="15.785715" + y2="30" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient7210-7-1-8-8" + id="linearGradient8801-9" + gradientUnits="userSpaceOnUse" + x1="24" + y1="16.525082" + x2="24" + y2="13.284962" /> + <linearGradient + id="linearGradient11600"> + <stop + id="stop11602" + offset="0.0000000" + style="stop-color:#ffffff;stop-opacity:1.0000000;" /> + <stop + id="stop11604" + offset="1" + style="stop-color:#fffeff;stop-opacity:1;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4176-3-2-47" + id="linearGradient8799-9" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.77837104,0,0,0.77682625,33.467463,-12.371109)" + x1="17.160095" + y1="14.004482" + x2="37.969398" + y2="56.575912" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient8738-6" + id="linearGradient8795-8" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.77837104,0,0,0.7743413,33.467463,-12.272873)" + x1="9.9747334" + y1="31.09375" + x2="37.077564" + y2="31.09375" /> + <linearGradient + id="linearGradient8738-6"> + <stop + style="stop-color:#225000;stop-opacity:1;" + offset="0" + id="stop8740-3" /> + <stop + id="stop8742-0" + offset="0.25000000" + style="stop-color:#52be19;stop-opacity:1" /> + <stop + id="stop8744-0" + offset="0.45037496" + style="stop-color:#57bc2d;stop-opacity:1" /> + <stop + style="stop-color:#3c8a12;stop-opacity:1;" + offset="1" + id="stop8746-1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient8760-8" + id="linearGradient8797-3" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.77837104,0,0,0.7743413,33.467463,-12.272873)" + x1="25.064732" + y1="21.857143" + x2="25.207588" + y2="25.428572" /> + <linearGradient + id="linearGradient8760-8"> + <stop + style="stop-color:#265906;stop-opacity:1" + offset="0.0000000" + id="stop8762-6" /> + <stop + style="stop-color:#295f06;stop-opacity:1" + offset="1.0000000" + id="stop8764-8" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6924-6-1-5" + id="linearGradient8793-8" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.78944609,0,0,0.78787933,57.219345,-10.382854)" + x1="16.07143" + y1="19.5" + x2="15.785715" + y2="30" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient8687-5" + id="linearGradient8791-2" + gradientUnits="userSpaceOnUse" + x1="24" + y1="16.525082" + x2="24" + y2="13.284962" /> + <linearGradient + id="linearGradient8687-5"> + <stop + style="stop-color:#ffffff;stop-opacity:1.0000000;" + offset="0.0000000" + id="stop8689-9" /> + <stop + style="stop-color:#fffeff;stop-opacity:1" + offset="1.0000000" + id="stop8691-7" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4176-3-2-47" + id="linearGradient8789-1" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.78944609,0,0,0.78787933,57.332123,-12.46511)" + x1="17.160095" + y1="14.004482" + x2="37.969398" + y2="56.575912" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient7903-2" + id="linearGradient8785-4" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.08241,0,0,1.0768062,20.160914,4.7996577)" + x1="9.9747334" + y1="31.09375" + x2="37.077564" + y2="31.09375" /> + <linearGradient + id="linearGradient7903-2"> + <stop + style="stop-color:#ff0000;stop-opacity:1;" + offset="0" + id="stop7905-0" /> + <stop + id="stop7907-9" + offset="0.25000000" + style="stop-color:#cc0000;stop-opacity:1" /> + <stop + id="stop7909-8" + offset="0.45037496" + style="stop-color:#f30000;stop-opacity:1;" /> + <stop + style="stop-color:#910000;stop-opacity:1;" + offset="1" + id="stop7911-1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient7913-6" + id="linearGradient8787-7" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.08241,0,0,1.0768062,20.160914,4.7996577)" + x1="25.064732" + y1="21.857143" + x2="25.207588" + y2="25.428572" /> + <linearGradient + id="linearGradient7913-6"> + <stop + style="stop-color:#810000;stop-opacity:1;" + offset="0" + id="stop7915-5" /> + <stop + style="stop-color:#810000;stop-opacity:1" + offset="1.0000000" + id="stop7917-6" /> + </linearGradient> + <linearGradient + y2="31.09375" + x2="37.077564" + y1="31.09375" + x1="9.9747334" + gradientTransform="matrix(0.78944609,0,0,0.78535902,57.332123,-12.365477)" + gradientUnits="userSpaceOnUse" + id="linearGradient11664" + xlink:href="#linearGradient7903-2" + inkscape:collect="always" /> + <linearGradient + y2="25.428572" + x2="25.207588" + y1="21.857143" + x1="25.064732" + gradientTransform="matrix(0.78944609,0,0,0.78535902,57.332123,-12.365477)" + gradientUnits="userSpaceOnUse" + id="linearGradient11666" + xlink:href="#linearGradient7913-6" + inkscape:collect="always" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient2616" + id="radialGradient2622" + cx="26.030092" + cy="24.22681" + fx="26.030092" + fy="24.22681" + r="11.629837" + gradientTransform="matrix(2.110988,0,0,2.53493,-28.91913,-38.04383)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + id="linearGradient2616"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop2618" /> + <stop + style="stop-color:#000000;stop-opacity:0;" + offset="1" + id="stop2620" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4134-9-5-6-8" + id="linearGradient14635" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.08241,0,0,1.0768062,20.160914,4.7996577)" + x1="9.9747334" + y1="31.09375" + x2="37.077564" + y2="31.09375" /> + <linearGradient + id="linearGradient4134-9-5-6-8"> + <stop + id="stop4136-4-7-1-4" + offset="0" + style="stop-color:#4f79a6;stop-opacity:1;" /> + <stop + style="stop-color:#7fa8d3;stop-opacity:1" + offset="0.25000000" + id="stop4148-8-9-9-87" /> + <stop + style="stop-color:#7fa8d3;stop-opacity:1" + offset="0.45037496" + id="stop4142-8-2-02-6" /> + <stop + id="stop4138-2-3-6-5" + offset="1" + style="stop-color:#547ba6;stop-opacity:1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4206-4-7-8-2" + id="linearGradient14637" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.08241,0,0,1.0768062,20.160914,4.7996577)" + x1="25.064732" + y1="21.857143" + x2="25.207588" + y2="25.428572" /> + <linearGradient + id="linearGradient4206-4-7-8-2"> + <stop + id="stop4208-5-9-9-8" + offset="0.0000000" + style="stop-color:#3465a4;stop-opacity:1" /> + <stop + id="stop4210-5-3-6-18" + offset="1.0000000" + style="stop-color:#3465a4;stop-opacity:1" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4176-3-2-3" + id="linearGradient14639" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.08241,0,0,1.0802618,20.160914,4.6630501)" + x1="17.160095" + y1="14.004482" + x2="37.969398" + y2="56.575912" /> + <linearGradient + id="linearGradient4176-3-2-3" + inkscape:collect="always"> + <stop + id="stop4178-8-5" + offset="0" + style="stop-color:#ffffff;stop-opacity:1;" /> + <stop + id="stop4180-1-8-0" + offset="1" + style="stop-color:#ffffff;stop-opacity:0;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient7210-7-1-8-9" + id="linearGradient14641" + gradientUnits="userSpaceOnUse" + x1="24" + y1="16.525082" + x2="24" + y2="13.284962" /> + <linearGradient + id="linearGradient7210-7-1-8-9"> + <stop + id="stop7212-33-6-9" + offset="0.0000000" + style="stop-color:#ffffff;stop-opacity:1.0000000;" /> + <stop + id="stop7214-0-6-1" + offset="1" + style="stop-color:#fffeff;stop-opacity:1;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6924-6-1-1" + id="linearGradient14643" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.08241,0,0,1.0802618,20.006284,7.5180332)" + x1="16.07143" + y1="19.5" + x2="15.785715" + y2="30" /> + <linearGradient + id="linearGradient6924-6-1-1"> + <stop + id="stop6926-8-6" + offset="0" + style="stop-color:#ffffff;stop-opacity:1;" /> + <stop + id="stop6928-76-7" + offset="1" + style="stop-color:#ffffff;stop-opacity:0;" /> + </linearGradient> + <clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath15195"> + <g + transform="matrix(0.99984537,0,0,1.0018336,465.23582,0.77363774)" + id="g15197"> + <path + inkscape:connector-curvature="0" + sodipodi:nodetypes="zsszssz" + id="path15199" + d="m 12.130891,15.147861 c -7.8408972,0 -14.3101716,3.619546 -14.3101716,6.957128 0,0.239494 0.9420581,17.266498 0.937645,17.515883 -0.044201,2.497774 7.2722068,5.378759 13.2787626,5.378759 6.006556,0 15.689217,-1.978656 15.689217,-5.316249 0,-0.197554 -0.09376,-15.472174 -0.09376,-17.547138 0,-3.337592 -7.660785,-6.988383 -15.501693,-6.988383 z" + style="color:#000000;fill:url(#linearGradient15201);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.98276949;marker:none;visibility:visible;display:block;overflow:visible" /> + </g> + </clipPath> + <linearGradient + id="linearGradient15101"> + <stop + style="stop-color:#ffffff;stop-opacity:1" + offset="0" + id="stop15103" /> + <stop + style="stop-color:#ffffff;stop-opacity:0" + offset="1" + id="stop15105" /> + </linearGradient> + <linearGradient + id="linearGradient2616-5"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop2618-8" /> + <stop + style="stop-color:#000000;stop-opacity:0;" + offset="1" + id="stop2620-6" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient15101" + id="linearGradient16193" + gradientUnits="userSpaceOnUse" + x1="474.67822" + y1="34.551914" + x2="478.07663" + y2="47.935841" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient2616-5" + id="radialGradient16195" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.0146001,1.6866793,-1.6214284,0.97923212,487.66453,-26.601732)" + cx="23.424841" + cy="22.232161" + fx="23.424841" + fy="22.232161" + r="11.629837" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient7563" + id="linearGradient7561" + gradientUnits="userSpaceOnUse" + x1="487.55292" + y1="45.00568" + x2="490.83395" + y2="42.079308" /> + <linearGradient + id="linearGradient7563" + inkscape:collect="always"> + <stop + id="stop7565" + offset="0" + style="stop-color:#5dd71d;stop-opacity:1" /> + <stop + id="stop7567" + offset="1" + style="stop-color:#5dd71d;stop-opacity:0" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient7551" + id="linearGradient7557" + x1="496.04224" + y1="45.052803" + x2="490.11029" + y2="25.657177" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + id="linearGradient7551"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop7553" /> + <stop + style="stop-color:#5dd71d;stop-opacity:1" + offset="1" + id="stop7555" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient7563" + id="linearGradient9003" + gradientUnits="userSpaceOnUse" + x1="487.55292" + y1="45.00568" + x2="490.83395" + y2="42.079308" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient7551" + id="linearGradient9007" + gradientUnits="userSpaceOnUse" + x1="496.09894" + y1="46.003174" + x2="490.11029" + y2="25.657177" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient7563" + id="linearGradient9013" + gradientUnits="userSpaceOnUse" + x1="487.55292" + y1="45.00568" + x2="490.83395" + y2="42.079308" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient7551" + id="linearGradient9015" + gradientUnits="userSpaceOnUse" + x1="496.09894" + y1="46.003174" + x2="490.11029" + y2="25.657177" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient9029" + id="linearGradient9035" + x1="120.82211" + y1="11.07972" + x2="108.18844" + y2="-8.2957277" + gradientUnits="userSpaceOnUse" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="11.313708" + inkscape:cx="20.28441" + inkscape:cy="22.412402" + inkscape:current-layer="g10328" + showgrid="true" + inkscape:grid-bbox="true" + inkscape:document-units="px" + inkscape:window-width="1600" + inkscape:window-height="838" + inkscape:window-x="-8" + inkscape:window-y="-8" + inkscape:window-maximized="1" /> + <metadata + id="metadata10062"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + id="layer1" + inkscape:label="Layer 1" + inkscape:groupmode="layer"> + <g + id="g10328" + transform="translate(0,1.5)"> + <g + transform="matrix(1.5088326,1.0616208e-8,-1.0616208e-8,1.5088326,29.02371,-10.078669)" + id="g17815"> + <path + style="color:#000000;fill:url(#linearGradient10366);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient10368);stroke-width:0.77058458;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible" + d="m -8.5725348,11.035069 c -3.7140732,0 -6.7340192,1.324361 -6.7340192,2.953519 0,0.116904 0,8.443456 0,8.565206 0,1.629164 3.019946,2.953519 6.7340192,2.953519 3.714079,0 6.854278,-1.324355 6.854278,-2.953519 0,-0.09643 0,-8.468774 0,-8.565206 0,-1.629164 -3.140199,-2.953519 -6.854278,-2.953519 z" + id="path17817" + sodipodi:nodetypes="zsszssz" + inkscape:connector-curvature="0" /> + <path + sodipodi:nodetypes="zsszssz" + id="path17819" + d="m -8.5662708,11.669209 c -3.3274462,0 -6.0330192,1.186496 -6.0330192,2.646065 0,0.104736 0,7.667759 0,7.776834 0,1.459568 2.705573,2.646065 6.0330192,2.646065 3.327452,0 6.140765,-1.186497 6.14076,-2.646065 0,-0.08639 0,-7.690444 0,-7.776834 0,-1.459569 -2.813308,-2.646065 -6.14076,-2.646065 z" + style="opacity:0.8982301;color:#000000;fill:none;stroke:url(#linearGradient10370);stroke-width:0.66884732;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible" + inkscape:connector-curvature="0" /> + <path + sodipodi:type="arc" + style="color:#000000;fill:#3a3a3a;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient10372);stroke-width:1.00492704;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible" + id="path17821" + sodipodi:cx="24" + sodipodi:cy="14.071428" + sodipodi:rx="12.857142" + sodipodi:ry="5.5" + d="m 36.857142,14.071428 c 0,3.037566 -5.756338,5.5 -12.857142,5.5 -7.100804,0 -12.857142,-2.462434 -12.857142,-5.5 0,-3.037566 5.756338,-5.4999997 12.857142,-5.4999997 7.100804,0 12.857142,2.4624337 12.857142,5.4999997 z" + transform="matrix(0.47968295,0,0,0.44145226,-20.055386,7.7366328)" /> + <path + style="opacity:0.64159324;color:#000000;fill:url(#linearGradient10374);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + d="m -13.251088,15.932946 -0.04081,5.569491 2.253444,0.607585 0.04895,-5.535743 c 0,0 0.978881,0 2.5653472,-0.101262 -2.4647692,-0.110142 -5.2848492,-1.169439 -6.2445852,-1.856499 0.669573,0.988686 1.41769,1.316428 1.41769,1.316428 z" + id="path17823" + sodipodi:nodetypes="ccccccc" + inkscape:connector-curvature="0" /> + </g> + <g + clip-path="url(#clipPath15195)" + id="g15109" + transform="matrix(0.66785821,0,0,0.66653279,-303.04091,-4.0460057)"> + <path + inkscape:connector-curvature="0" + style="color:#000000;fill:url(#linearGradient16193);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.9999997;marker:none;visibility:visible;display:inline;overflow:visible" + d="m 477.93299,29.5221 c -0.23338,0.01816 -0.46021,0.04751 -0.70016,0.09354 l -0.90622,0.935469 2.91334,2.735983 0.16338,2.455431 -2.21718,2.011115 -2.61392,-0.280621 -2.70729,-2.548971 -0.95688,0.935402 c -0.4412,4.22152 3.96757,7.997687 8.49527,5.472102 l 8.84534,9.073399 0,-7.763837 -4.90111,-5.261636 c 1.58848,-4.421236 -1.38044,-8.171358 -5.41457,-7.857376 z" + id="path2140-8" + sodipodi:nodetypes="cccccccccccccc" /> + <path + style="color:#000000;fill:url(#radialGradient16195);fill-opacity:1;fill-rule:nonzero;stroke:#4b4b44;stroke-width:2.19875693;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible" + d="m 477.81143,28.717245 c -0.24814,0.0193 -0.49489,0.045 -0.75,0.09394 l -1.84375,1.941353 3.25,2.974653 0.15625,1.75348 -1.59375,1.502983 -2.15625,-0.219185 -2.9375,-2.818093 -1.59375,1.502983 c -1.03157,4.864044 4.09242,9.354677 8.90625,6.669486 l 8.84375,9.111833 0.0625,-0.908052 -8.75,-8.986585 c -4.5277,2.525586 -8.9412,-1.258104 -8.5,-5.479624 l 0.96875,-0.939364 2.6875,2.567595 2.625,0.281809 2.21875,-2.035289 -0.15625,-2.442347 -2.92456,-2.729528 0.89331,-0.933992 c 0.23995,-0.04603 0.48537,-0.07578 0.71875,-0.09394 4.03413,-0.313981 6.99473,3.438112 5.40625,7.859348 l 4.90625,5.260439 0,6.638174 0.5625,-7.045232 -4.6875,-5.166503 c 1.68889,-4.700632 -2.02345,-8.694167 -6.3125,-8.360342 z m 10.4375,20.572076 -0.0937,1.033301 0.0937,0.09394 z" + id="path15088" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccccccccccccccccccccccccccccccc" + clip-path="none" /> + </g> + <path + sodipodi:nodetypes="ssssccsssscccccss" + inkscape:connector-curvature="0" + style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:none;stroke:#214302;stroke-width:1.22333801;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" + d="M 15.13957,0.65781345 C 13.09813,0.75943387 11.15863,1.8343018 10.02422,3.7134422 8.64484,5.9983774 9.06348,8.6433514 10.38637,10.390557 c 0.67426,0.890533 1.56721,1.536055 2.4445,1.969183 0.8773,0.433127 1.66996,0.683124 2.48977,0.565857 l -0.24897,-1.765474 c -0.0603,0.0086 -0.78073,-0.100319 -1.4486,-0.430052 C 12.9552,10.400339 12.26107,9.896785 11.81233,9.3041111 10.88921,8.0849002 10.5785,6.2954849 11.56335,4.6640822 c 1.31294,-2.1748825 4.07467,-2.8505778 6.24707,-1.5391315 1.67169,1.0091734 2.53642,3.0356731 2.21708,4.839977 l -2.21494,-0.7873652 1.35701,5.8126415 c 0,0 3.07396,-3.1580077 4.38996,-4.2066815 L 21.72615,8.2855682 C 22.22969,5.7277604 21.11936,2.9868581 18.76106,1.5631849 17.63264,0.88197667 16.36443,0.59684117 15.13957,0.65781345 z" + id="path5484" /> + <path + style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#5dd71d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.68900001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" + d="m 15.13957,0.612545 c -2.05429,0.10226 -3.99837,1.190509 -5.13798,3.078263 -1.38836,2.299794 -0.99407,4.961063 0.33951,6.722383 0.68167,0.900322 1.58908,1.535678 2.46714,1.969183 0.6528,0.322291 1.23305,0.49009 1.78811,0.543223 l 0.76956,0.0679 -0.0905,-0.769566 -0.0905,-0.656394 -0.0679,-0.407417 -0.40742,-0.09054 C 14.59277,11.044 14.58127,11.04318 14.59642,11.04695 14.32768,10.98017 13.97939,10.872141 13.64578,10.707436 12.98316,10.380297 12.30713,9.875101 11.85767,9.281476 10.94565,8.076926 10.61279,6.298932 11.58606,4.686715 c 1.29897,-2.151749 4.05388,-2.835794 6.20179,-1.539131 1.6423,0.991433 2.44453,2.917262 2.15026,4.68851 C 19.06284,7.583293 18.55616,7.3395518 17.83312,7.131219 l 1.46257,5.513705 4.37708,-3.861402 C 23.04194,8.5989395 22.40701,8.4301523 21.77149,8.262933 22.26714,5.696059 21.14996,2.968991 18.78376,1.540552 17.65034,0.85632 16.37723,0.55094 15.13964,0.612546 z" + id="path7541" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cssscccccccsssscccccscc" /> + <path + sodipodi:type="inkscape:offset" + inkscape:radius="-0.36691996" + inkscape:original="M 115.125 0.625 C 113.07071 0.72726 111.13961 1.799746 110 3.6875 C 108.61164 5.987294 109.01017 8.64493 110.34375 10.40625 C 111.02542 11.306572 111.93444 11.941495 112.8125 12.375 C 113.4653 12.697291 114.03869 12.884367 114.59375 12.9375 L 115.375 13 L 115.28125 12.21875 L 115.1875 11.5625 L 115.125 11.15625 L 114.71875 11.0625 C 114.60193 11.03692 114.5786 11.05873 114.59375 11.0625 C 114.32501 10.99572 113.98986 10.883455 113.65625 10.71875 C 112.99363 10.391611 112.29321 9.874875 111.84375 9.28125 C 110.93173 8.0767 110.62048 6.299717 111.59375 4.6875 C 112.89272 2.535751 115.63334 1.859587 117.78125 3.15625 C 119.42355 4.147683 120.23177 6.072502 119.9375 7.84375 C 119.06223 7.590949 118.56679 7.3333328 117.84375 7.125 L 119.28125 12.65625 L 123.6875 8.78125 C 123.05667 8.5966675 122.41677 8.4172193 121.78125 8.25 C 122.2769 5.683126 121.14745 2.959689 118.78125 1.53125 C 117.64783 0.847018 116.36259 0.563394 115.125 0.625 z " + style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.78761058;color:#000000;fill:none;stroke:url(#linearGradient9035);stroke-width:0.58899999;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" + id="path9027" + d="m 115.15625,1 c -1.93846,0.096494 -3.76714,1.0916106 -4.84375,2.875 -1.30767,2.1661277 -0.93509,4.6647482 0.3125,6.3125 0.63702,0.841353 1.50307,1.428702 2.34375,1.84375 0.62686,0.309486 1.15865,0.483618 1.65625,0.53125 l 0.3125,0.03125 -0.0312,-0.3125 0,-0.03125 -0.0937,-0.625 -0.0312,-0.1875 -0.0937,-0.03125 a 0.36695666,0.36695666 0 0 1 -0.0312,0 0.36695666,0.36695666 0 0 1 -0.15625,0 c -0.29285,-0.07277 -0.63827,-0.165161 -1,-0.34375 -0.70811,-0.349599 -1.43916,-0.904314 -1.9375,-1.5625 -0.9926,-1.3109763 -1.33406,-3.2560303 -0.28125,-5 1.3994,-2.3181172 4.37305,-3.0534486 6.6875,-1.65625 1.77658,1.0724988 2.66287,3.1417062 2.34375,5.0625 a 0.36695666,0.36695666 0 0 1 -0.46875,0.28125 c -0.64541,-0.1864124 -1.05026,-0.3368939 -1.5,-0.5 l 1.125,4.3125 3.46875,-3.0625 c -0.41433,-0.1174866 -0.83619,-0.2348673 -1.25,-0.34375 A 0.36695666,0.36695666 0 0 1 121.40625,8.1875 C 121.87307,5.7699443 120.82752,3.1922459 118.59375,1.84375 117.52699,1.1997586 116.32539,0.94180137 115.15625,1 z" + transform="translate(-100,0)" /> + </g> + </g> +</svg> diff --git a/src/com.gluster.storage.management.gui/icons/tango/32x32/stop-volume.svg b/src/com.gluster.storage.management.gui/icons/tango/32x32/stop-volume.svg index 5a2a9555..dfc0655f 100644 --- a/src/com.gluster.storage.management.gui/icons/tango/32x32/stop-volume.svg +++ b/src/com.gluster.storage.management.gui/icons/tango/32x32/stop-volume.svg @@ -1808,6 +1808,57 @@ y1="15.80225" x2="24.30225" y2="35.05225" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4837" + id="linearGradient4874" + gradientUnits="userSpaceOnUse" + x1="65.359879" + y1="30.570919" + x2="93.35183" + y2="62.862644" /> + <linearGradient + inkscape:collect="always" + id="linearGradient4837"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop4839" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop4841" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4859" + id="linearGradient4876" + gradientUnits="userSpaceOnUse" + x1="64.432518" + y1="31.433016" + x2="71.064438" + y2="40.353905" /> + <linearGradient + inkscape:collect="always" + id="linearGradient4859"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop4861" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop4863" /> + </linearGradient> + <linearGradient + y2="40.353905" + x2="71.064438" + y1="31.433016" + x1="64.432518" + gradientUnits="userSpaceOnUse" + id="linearGradient4902" + xlink:href="#linearGradient4859" + inkscape:collect="always" /> </defs> <sodipodi:namedview id="base" @@ -1817,9 +1868,9 @@ inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="1" - inkscape:cx="31.212003" - inkscape:cy="20.62781" - inkscape:current-layer="g18476" + inkscape:cx="17.328991" + inkscape:cy="5.1864773" + inkscape:current-layer="g4867" showgrid="true" inkscape:grid-bbox="true" inkscape:document-units="px" @@ -1836,7 +1887,7 @@ <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title /> + <dc:title></dc:title> </cc:Work> </rdf:RDF> </metadata> @@ -1918,33 +1969,44 @@ sodipodi:nodetypes="ccccccc" inkscape:connector-curvature="0" /> </g> - <g - transform="matrix(1.0116783,0,0,1.0116782,-3.76602,-0.90833374)" - id="g15335"> - <path - inkscape:connector-curvature="0" - sodipodi:nodetypes="ccccccccc" - id="path9480-4" - d="m 315.90023,6.2395127 17.0853,0 12.82128,13.1205033 0,17.929227 -12.6486,12.040795 -17.43034,0 -12.92426,-12.864195 0,-17.228377 13.09662,-12.9979533 z" - style="fill:url(#linearGradient13346);fill-opacity:1;fill-rule:evenodd;stroke:#720000;stroke-width:4.06781816;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> - <path - inkscape:connector-curvature="0" - sodipodi:nodetypes="ccccccccc" - id="path9482-6" - d="m 316.99041,8.9492062 14.88502,0 11.23436,11.4170598 0,15.729261 -10.87672,10.524138 -15.38062,0 -11.33826,-11.28539 0,-15.038877 11.47621,-11.3461918 z" - style="fill:none;stroke:url(#linearGradient13348);stroke-width:1.81394053;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> - <path - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccccccc" - id="path2241-4" - d="m 316.62886,7.7446708 -11.95364,11.8616862 0,15.738431 2.71411,2.690577 c 15.4878,0.05329 15.22413,-12.052567 36.55389,-10.993756 l 0,-7.319528 -11.72265,-11.9774102 -15.59171,0 z" - style="opacity:0.28977272;fill:url(#radialGradient13350);fill-opacity:1;fill-rule:evenodd;stroke:none" /> - <path - inkscape:connector-curvature="0" - id="path2787-1" - d="m 317.07639,16.267493 -4.26717,4.275661 7.53508,7.550058 -7.53508,7.550059 4.26717,4.275662 7.53508,-7.55006 7.53508,7.55006 4.26717,-4.275662 -7.53508,-7.550059 7.53508,-7.550058 -4.26717,-4.275661 -7.53508,7.550059 -7.53508,-7.550059 z" - style="fill:url(#radialGradient13352);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient13354);stroke-width:1.00099337;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> - </g> + </g> + <g + id="g4867" + transform="matrix(0.8183337,0,0,0.8183337,-38.604276,6.5194524)"> + <path + inkscape:connector-curvature="0" + style="opacity:0.98999999000000005;fill:none;stroke:#720000;stroke-width:7.03366761;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="m 442.82271,11.575463 c -14.58752,0 -26.41304,11.849035 -26.41304,26.465559 0,14.616525 11.82552,26.465559 26.41304,26.465559 14.58752,0 26.41304,-11.849034 26.41304,-26.465559 0,-14.616524 -11.82552,-26.465559 -26.41304,-26.465559 z m 0,9.205412 c 3.79969,0 7.29572,1.268104 10.14414,3.35614 l -26.12594,20.424507 c -0.81869,-2.010624 -1.24409,-4.214903 -1.24409,-6.5205 0,-9.532517 7.71229,-17.260147 17.22589,-17.260147 z m 16.2689,11.506765 c 0.629,1.792241 0.95699,3.745679 0.95699,5.753382 0,9.532517 -7.71229,17.260147 -17.22589,17.260147 -3.49182,0 -6.76001,-1.087496 -9.47424,-2.876691 L 459.09161,32.28764 z" + id="path4855" /> + <path + id="path4043" + d="m 71.59375,28.375 c -4.763456,0 -8.625,3.861544 -8.625,8.625 0,4.763456 3.861544,8.625 8.625,8.625 4.763456,0 8.625,-3.861544 8.625,-8.625 0,-4.763456 -3.861544,-8.625 -8.625,-8.625 z m 0,3 c 1.240764,0 2.382367,0.413269 3.3125,1.09375 L 66.375,39.125 C 66.107661,38.469747 65.96875,37.751383 65.96875,37 c 0,-3.106602 2.518398,-5.625 5.625,-5.625 z m 5.3125,3.75 c 0.205395,0.584083 0.3125,1.220699 0.3125,1.875 0,3.106602 -2.518398,5.625 -5.625,5.625 -1.14023,0 -2.207437,-0.35441 -3.09375,-0.9375 l 8.40625,-6.5625 z" + style="opacity:0.98999999000000005;fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none" + inkscape:connector-curvature="0" + transform="matrix(3.062381,0,0,3.0684706,223.57537,-75.49239)" /> + <path + sodipodi:nodetypes="sssccssccsscsscc" + inkscape:connector-curvature="0" + style="opacity:0.28761062;fill:url(#linearGradient4902);fill-opacity:1;fill-rule:evenodd;stroke:none" + d="m 71.59375,28.375 c -4.763456,0 -8.625,3.861544 -8.625,8.625 0,0.831085 0.117546,1.634717 0.33692,2.395175 0.265084,0.918914 0.678852,1.774788 1.21357,2.53989 5.297927,-4.824334 9.518373,-6.795001 15.138117,-8.002486 C 78.420715,30.683545 75.276827,28.375 71.59375,28.375 z m 0,3 c 1.240764,0 2.382367,0.413269 3.3125,1.09375 L 66.375,39.125 C 66.107661,38.469747 65.96875,37.751383 65.96875,37 c 0,-3.106602 2.518398,-5.625 5.625,-5.625 z m 5.3125,3.75 c 0.205395,0.584083 0.3125,1.220699 0.3125,1.875 0,3.106602 -2.518398,5.625 -5.625,5.625 -1.14023,0 -2.207437,-0.35441 -3.09375,-0.9375 z" + transform="matrix(3.062381,0,0,3.0684706,223.57537,-75.49239)" + id="path4857" /> + <path + transform="matrix(3.1655984,0,0,3.1718933,215.59532,-79.907296)" + d="m 79.53125,37.125 a 7.78125,7.78125 0 1 1 -15.5625,0 7.78125,7.78125 0 1 1 15.5625,0 z" + sodipodi:ry="7.78125" + sodipodi:rx="7.78125" + sodipodi:cy="37.125" + sodipodi:cx="71.75" + id="path4835" + style="fill:none;stroke:url(#linearGradient4874);stroke-width:1.01625024999999990;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;opacity:0.80088496" + sodipodi:type="arc" /> + <path + sodipodi:nodetypes="cc" + inkscape:connector-curvature="0" + id="path4845" + d="M 427.6737,45.685665 453.84279,25.234867" + style="opacity:0.82300885;fill:none;stroke:#ffffff;stroke-width:2.88664961000000010;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> </g> </g> </g> diff --git a/src/com.gluster.storage.management.gui/icons/tango/32x32/volume-rebalance.svg b/src/com.gluster.storage.management.gui/icons/tango/32x32/volume-rebalance.svg index 109e2f35..df76f865 100644 --- a/src/com.gluster.storage.management.gui/icons/tango/32x32/volume-rebalance.svg +++ b/src/com.gluster.storage.management.gui/icons/tango/32x32/volume-rebalance.svg @@ -15,10 +15,32 @@ id="svg10057" version="1.1" inkscape:version="0.48.1 " - sodipodi:docname="volume_rebalance.svg"> + sodipodi:docname="volume_rebalance_1.svg"> <defs id="defs10059"> <linearGradient + id="linearGradient6336"> + <stop + id="stop6338" + offset="0" + style="stop-color:#5a3015;stop-opacity:1" /> + <stop + id="stop6340" + offset="1" + style="stop-color:#5a3015;stop-opacity:1" /> + </linearGradient> + <linearGradient + id="linearGradient5713"> + <stop + id="stop5715" + offset="0" + style="stop-color:#ad8c1e;stop-opacity:1" /> + <stop + id="stop5717" + offset="1" + style="stop-color:#ffdb51;stop-opacity:1" /> + </linearGradient> + <linearGradient id="linearGradient6488"> <stop id="stop6490" @@ -1444,9 +1466,148 @@ style="stop-color:#ffffff;stop-opacity:0;" /> </linearGradient> <linearGradient + id="linearGradient4684"> + <stop + style="stop-color:#a48318;stop-opacity:1" + offset="0" + id="stop4686" /> + <stop + style="stop-color:#ffdb51;stop-opacity:1" + offset="1" + id="stop4688" /> + </linearGradient> + <linearGradient + id="linearGradient4704"> + <stop + style="stop-color:#fff164;stop-opacity:1" + offset="0" + id="stop4706" /> + <stop + style="stop-color:#b19020;stop-opacity:1" + offset="1" + id="stop4708" /> + </linearGradient> + <linearGradient + id="linearGradient4714"> + <stop + style="stop-color:#ad8c1e;stop-opacity:1" + offset="0" + id="stop4716" /> + <stop + style="stop-color:#ffdb51;stop-opacity:1" + offset="1" + id="stop4718" /> + </linearGradient> + <linearGradient + id="linearGradient5475"> + <stop + style="stop-color:#ad8c1e;stop-opacity:1" + offset="0" + id="stop5477" /> + <stop + style="stop-color:#f6d24b;stop-opacity:1" + offset="1" + id="stop5479" /> + </linearGradient> + <linearGradient + id="linearGradient4816"> + <stop + style="stop-color:#6c4019;stop-opacity:1;" + offset="0" + id="stop4818" /> + <stop + style="stop-color:#ffdf61;stop-opacity:1" + offset="1" + id="stop4820" /> + </linearGradient> + <linearGradient + id="linearGradient4796"> + <stop + id="stop4798" + offset="0" + style="stop-color:#fbfbc8;stop-opacity:1" /> + <stop + id="stop4800" + offset="1" + style="stop-color:#d3a550;stop-opacity:1" /> + </linearGradient> + <linearGradient + id="linearGradient5490"> + <stop + style="stop-color:#6c4019;stop-opacity:1;" + offset="0" + id="stop5492" /> + <stop + style="stop-color:#ffdf61;stop-opacity:1" + offset="1" + id="stop5494" /> + </linearGradient> + <linearGradient + id="linearGradient5497"> + <stop + id="stop5499" + offset="0" + style="stop-color:#fbfbc8;stop-opacity:1" /> + <stop + id="stop5501" + offset="1" + style="stop-color:#d3a550;stop-opacity:1" /> + </linearGradient> + <linearGradient + id="linearGradient4134-9-5-6-53"> + <stop + id="stop4136-4-7-1-2" + offset="0" + style="stop-color:#4f79a6;stop-opacity:1;" /> + <stop + style="stop-color:#7fa8d3;stop-opacity:1" + offset="0.25000000" + id="stop4148-8-9-9-3" /> + <stop + style="stop-color:#7fa8d3;stop-opacity:1" + offset="0.45037496" + id="stop4142-8-2-02" /> + <stop + id="stop4138-2-3-6" + offset="1" + style="stop-color:#547ba6;stop-opacity:1" /> + </linearGradient> + <linearGradient + id="linearGradient4206-4-7-8"> + <stop + id="stop4208-5-9-9-9" + offset="0.0000000" + style="stop-color:#3465a4;stop-opacity:1" /> + <stop + id="stop4210-5-3-6-5" + offset="1.0000000" + style="stop-color:#3465a4;stop-opacity:1" /> + </linearGradient> + <linearGradient + id="linearGradient7210-7-1-8"> + <stop + id="stop7212-33-6" + offset="0.0000000" + style="stop-color:#ffffff;stop-opacity:1.0000000;" /> + <stop + id="stop7214-0-6" + offset="1.0000000" + style="stop-color:#bfbebf;stop-opacity:1" /> + </linearGradient> + <clipPath + clipPathUnits="userSpaceOnUse" + id="clipPath5709"> + <path + inkscape:connector-curvature="0" + id="path5711" + d="m 92.915818,17.576508 c 0.126718,1.520614 0.624046,3.904687 0.624046,3.904687 0,0 -12.194539,6.854446 -14.107407,6.535635 -1.91287,-0.318811 -8.687614,-13.390081 -8.687614,-13.390081 0,0 2.789599,-17.2158217 3.188115,-17.2158217 0.398514,0 20.483637,-3.506926 20.483637,-3.506926 l 13.788595,1.7534626 10.83959,17.5346331 -0.0399,6.216823 -8.06947,1.734361 c 0,0 -0.0321,-5.835461 -0.0321,-6.863003 0,-1.833054 0.001,-3.264149 -3.14068,-5.1058011 -2.46769,-1.4464453 -6.02276,-2.0505478 -6.02276,-2.0505478 l -3.338151,5.1914349 2.151981,3.905441 c 0,0 0.16619,0.656882 0.16619,1.248609 0,0 -3.159292,0.331411 -4.46337,0.335806 -1.304077,0.0045 -3.340702,-0.228712 -3.340702,-0.228712 z" + style="fill:#000000;fill-opacity:1;stroke:none" + sodipodi:nodetypes="ccscscccccsscccczc" /> + </clipPath> + <linearGradient inkscape:collect="always" xlink:href="#linearGradient4134-9-5-6-5" - id="linearGradient13263" + id="linearGradient6296" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.4954152,0,0,1.4906315,382.15258,-11.973727)" x1="9.9747334" @@ -1456,7 +1617,7 @@ <linearGradient inkscape:collect="always" xlink:href="#linearGradient4206-4-7-47" - id="linearGradient13265" + id="linearGradient6298" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.4954152,0,0,1.4906315,382.15258,-11.973727)" x1="25.064732" @@ -1466,7 +1627,7 @@ <linearGradient inkscape:collect="always" xlink:href="#linearGradient4176-3-3" - id="linearGradient13267" + id="linearGradient6300" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.4954152,0,0,1.4954152,382.15258,-12.162834)" x1="17.160095" @@ -1476,7 +1637,7 @@ <linearGradient inkscape:collect="always" xlink:href="#linearGradient7210-7-1-9" - id="linearGradient13269" + id="linearGradient6302" gradientUnits="userSpaceOnUse" x1="24" y1="16.525082" @@ -1485,7 +1646,7 @@ <linearGradient inkscape:collect="always" xlink:href="#linearGradient6924-6-4" - id="linearGradient13271" + id="linearGradient6304" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.4954152,0,0,1.4954152,381.93895,-8.2106577)" x1="16.07143" @@ -1495,7 +1656,7 @@ <linearGradient inkscape:collect="always" xlink:href="#linearGradient4134-9-6-2" - id="linearGradient13273" + id="linearGradient6306" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.884513,6.8263032)" x1="9.9747334" @@ -1505,7 +1666,7 @@ <linearGradient inkscape:collect="always" xlink:href="#linearGradient4206-4-8-2" - id="linearGradient13275" + id="linearGradient6308" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.884513,6.8263032)" x1="25.064732" @@ -1515,7 +1676,7 @@ <linearGradient inkscape:collect="always" xlink:href="#linearGradient4176-9-0" - id="linearGradient13277" + id="linearGradient6310" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.45408812,0,0,0.45408812,-19.439922,7.2711048)" x1="17.160095" @@ -1525,7 +1686,7 @@ <linearGradient inkscape:collect="always" xlink:href="#linearGradient7210-8-1" - id="linearGradient13279" + id="linearGradient6312" gradientUnits="userSpaceOnUse" x1="24" y1="16.525082" @@ -1534,13 +1695,84 @@ <linearGradient inkscape:collect="always" xlink:href="#linearGradient6924-1-0" - id="linearGradient13281" + id="linearGradient6314" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.765711,7.8656218)" x1="15.972866" y1="16.641634" x2="15.785715" y2="30" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4684" + id="linearGradient6316" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(32.75,0)" + x1="62.583221" + y1="10.427506" + x2="64.085831" + y2="10.471701" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5713" + id="linearGradient6318" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(32.75,-1.2398857)" + x1="56.51981" + y1="4.3342433" + x2="56.788395" + y2="5.7337985" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4714" + id="linearGradient6320" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-1,0,0,1,160.8125,-1.1703683)" + x1="58.437366" + y1="2.0533557" + x2="58.1987" + y2="3.7583599" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient6336" + id="linearGradient6322" + gradientUnits="userSpaceOnUse" + x1="-54.460457" + y1="25.724014" + x2="-71.006821" + y2="25.636955" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4796" + id="radialGradient6324" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.4439539,-0.05910147,0.02926065,1.1133991,24.891287,-3.506969)" + cx="-54.242531" + cy="20.513599" + fx="-54.242531" + fy="20.513599" + r="8.1875" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4796" + id="radialGradient6328" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.4439539,-0.05910147,0.02926065,1.1133991,24.891287,-3.506969)" + cx="-54.242531" + cy="20.513599" + fx="-54.242531" + fy="20.513599" + r="8.1875" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient4704" + id="radialGradient6330" + gradientUnits="userSpaceOnUse" + cx="23.9375" + cy="3.4375" + fx="23.9375" + fy="3.4375" + r="2.4114759" /> </defs> <sodipodi:namedview id="base" @@ -1549,9 +1781,9 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="1" - inkscape:cx="20.825544" - inkscape:cy="-3.3360974" + inkscape:zoom="16" + inkscape:cx="7.2182752" + inkscape:cy="32.547276" inkscape:current-layer="layer1" showgrid="true" inkscape:grid-bbox="true" @@ -1569,7 +1801,7 @@ <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title /> + <dc:title></dc:title> </cc:Work> </rdf:RDF> </metadata> @@ -1578,88 +1810,180 @@ inkscape:label="Layer 1" inkscape:groupmode="layer"> <g - id="g13248" - transform="translate(0,2.8980016)"> + id="g6267" + transform="translate(60.192465,0)"> <g - id="g17793" - transform="matrix(-0.44348417,0.06245045,0.06245045,0.44348417,52.856902,5.0209674)"> + transform="translate(-60,2.8980016)" + id="g13248"> + <g + transform="matrix(-0.44348417,0.06245045,0.06245045,0.44348417,52.856902,5.0209674)" + id="g17793"> + <g + id="g17795" + transform="matrix(-1.0837219,0.15260732,0.15230446,1.0815712,533.59674,-76.67915)"> + <path + style="color:#000000;fill:url(#linearGradient6296);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient6298);stroke-width:1.49302125;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible" + d="m 417.94908,1.3022136 c -11.7531,0 -21.30966,4.1775019 -21.30966,9.3164454 0,0.368755 0,26.633651 0,27.017694 0,5.138961 9.55656,9.316446 21.30966,9.316446 11.75311,0 21.6902,-4.177485 21.6902,-9.316446 0,-0.304179 0,-26.713514 0,-27.017694 0,-5.1389604 -9.93709,-9.3164454 -21.6902,-9.3164454 z" + id="path17797" + sodipodi:nodetypes="zsszssz" + inkscape:connector-curvature="0" /> + <path + sodipodi:nodetypes="zsszssz" + id="path17799" + d="m 417.96197,2.3211206 c -10.95803,0 -19.86811,3.9074022 -19.86811,8.7140914 0,0.34492 0,25.251673 0,25.61088 0,4.80669 8.91008,8.714092 19.86811,8.714092 10.95804,0 20.22293,-3.907402 20.22291,-8.714092 0,-0.284505 0,-25.326375 0,-25.61088 0,-4.8066892 -9.26487,-8.7140914 -20.22291,-8.7140914 z" + style="opacity:0.70796461;color:#000000;fill:none;stroke:url(#linearGradient6300);stroke-width:1.49541509;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible" + inkscape:connector-curvature="0" /> + <path + sodipodi:type="arc" + style="color:#000000;fill:#3a3a3a;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient6302);stroke-width:1.00492704;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible" + id="path17801" + sodipodi:cx="24" + sodipodi:cy="14.071428" + sodipodi:rx="12.857142" + sodipodi:ry="5.5" + d="m 36.857142,14.071428 c 0,3.037566 -5.756338,5.5 -12.857142,5.5 -7.100804,0 -12.857142,-2.462434 -12.857142,-5.5 0,-3.037566 5.756338,-5.4999997 12.857142,-5.4999997 7.100804,0 12.857142,2.4624337 12.857142,5.4999997 z" + transform="matrix(1.5511807,0,0,1.5116482,380.81421,-10.643499)" /> + <path + style="opacity:0.49367083;color:#000000;fill:url(#linearGradient6304);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" + d="m 402.55432,17.318206 0.53407,17.62453 6.8362,1.922689 -0.21365,-17.517733 c 0,0 3.09765,0 8.11798,-0.320442 -7.7997,-0.348543 -16.72378,-3.700664 -19.76084,-5.874849 2.11884,3.128674 4.48624,4.165805 4.48624,4.165805 z" + id="path17803" + sodipodi:nodetypes="ccccccc" + inkscape:connector-curvature="0" /> + </g> + </g> <g - transform="matrix(-1.0837219,0.15260732,0.15230446,1.0815712,533.59674,-76.67915)" - id="g17795"> + id="g17815" + transform="matrix(1.5088326,1.0616208e-8,-1.0616208e-8,1.5088326,29.21121,-11.49056)"> <path inkscape:connector-curvature="0" sodipodi:nodetypes="zsszssz" - id="path17797" - d="m 417.94908,1.3022136 c -11.7531,0 -21.30966,4.1775019 -21.30966,9.3164454 0,0.368755 0,26.633651 0,27.017694 0,5.138961 9.55656,9.316446 21.30966,9.316446 11.75311,0 21.6902,-4.177485 21.6902,-9.316446 0,-0.304179 0,-26.713514 0,-27.017694 0,-5.1389604 -9.93709,-9.3164454 -21.6902,-9.3164454 z" - style="color:#000000;fill:url(#linearGradient13263);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient13265);stroke-width:1.49302125;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible" /> + id="path17817" + d="m -8.5725348,11.035069 c -3.7140732,0 -6.7340192,1.324361 -6.7340192,2.953519 0,0.116904 0,8.443456 0,8.565206 0,1.629164 3.019946,2.953519 6.7340192,2.953519 3.714079,0 6.854278,-1.324355 6.854278,-2.953519 0,-0.09643 0,-8.468774 0,-8.565206 0,-1.629164 -3.140199,-2.953519 -6.854278,-2.953519 z" + style="color:#000000;fill:url(#linearGradient6306);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient6308);stroke-width:0.77058458;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible" /> <path inkscape:connector-curvature="0" - style="opacity:0.70796461;color:#000000;fill:none;stroke:url(#linearGradient13267);stroke-width:1.49541509;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible" - d="m 417.96197,2.3211206 c -10.95803,0 -19.86811,3.9074022 -19.86811,8.7140914 0,0.34492 0,25.251673 0,25.61088 0,4.80669 8.91008,8.714092 19.86811,8.714092 10.95804,0 20.22293,-3.907402 20.22291,-8.714092 0,-0.284505 0,-25.326375 0,-25.61088 0,-4.8066892 -9.26487,-8.7140914 -20.22291,-8.7140914 z" - id="path17799" + style="opacity:0.8982301;color:#000000;fill:none;stroke:url(#linearGradient6310);stroke-width:0.66884732;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible" + d="m -8.5662708,11.669209 c -3.3274462,0 -6.0330192,1.186496 -6.0330192,2.646065 0,0.104736 0,7.667759 0,7.776834 0,1.459568 2.705573,2.646065 6.0330192,2.646065 3.327452,0 6.140765,-1.186497 6.14076,-2.646065 0,-0.08639 0,-7.690444 0,-7.776834 0,-1.459569 -2.813308,-2.646065 -6.14076,-2.646065 z" + id="path17819" sodipodi:nodetypes="zsszssz" /> <path - transform="matrix(1.5511807,0,0,1.5116482,380.81421,-10.643499)" + transform="matrix(0.47968295,0,0,0.44145226,-20.055386,7.7366328)" d="m 36.857142,14.071428 c 0,3.037566 -5.756338,5.5 -12.857142,5.5 -7.100804,0 -12.857142,-2.462434 -12.857142,-5.5 0,-3.037566 5.756338,-5.4999997 12.857142,-5.4999997 7.100804,0 12.857142,2.4624337 12.857142,5.4999997 z" sodipodi:ry="5.5" sodipodi:rx="12.857142" sodipodi:cy="14.071428" sodipodi:cx="24" - id="path17801" - style="color:#000000;fill:#3a3a3a;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient13269);stroke-width:1.00492704;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible" + id="path17821" + style="color:#000000;fill:#3a3a3a;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient6312);stroke-width:1.00492704;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible" sodipodi:type="arc" /> <path inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccc" - id="path17803" - d="m 402.55432,17.318206 0.53407,17.62453 6.8362,1.922689 -0.21365,-17.517733 c 0,0 3.09765,0 8.11798,-0.320442 -7.7997,-0.348543 -16.72378,-3.700664 -19.76084,-5.874849 2.11884,3.128674 4.48624,4.165805 4.48624,4.165805 z" - style="opacity:0.49367083;color:#000000;fill:url(#linearGradient13271);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" /> + id="path17823" + d="m -13.251088,15.932946 -0.04081,5.569491 2.253444,0.607585 0.04895,-5.535743 c 0,0 0.978881,0 2.5653472,-0.101262 -2.4647692,-0.110142 -5.2848492,-1.169439 -6.2445852,-1.856499 0.669573,0.988686 1.41769,1.316428 1.41769,1.316428 z" + style="opacity:0.64159324;color:#000000;fill:url(#linearGradient6314);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" /> </g> </g> <g - transform="matrix(1.5088326,1.0616208e-8,-1.0616208e-8,1.5088326,29.21121,-11.49056)" - id="g17815"> + clip-path="url(#clipPath5709)" + transform="matrix(0.76529224,0,0,0.76529224,-117.78229,2.535801)" + id="g4849"> + <rect + style="fill:url(#linearGradient6316);fill-opacity:1;fill-rule:evenodd;stroke:#3b2400;stroke-width:0.30000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + id="rect3914" + width="2.2980971" + height="20.064156" + x="95.068062" + y="0.43962353" /> + <path + style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:url(#linearGradient6318);fill-opacity:1;stroke:#3b2400;stroke-width:0.43523332;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" + d="m 96.0625,1.0726143 -13.6875,4.78125 0.15625,0.21875 13.625,-1.1480137 z" + id="path4722" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccccc" /> + <path + sodipodi:nodetypes="ccccc" + inkscape:connector-curvature="0" + id="path4740" + d="m 97.5,1.1421317 10.15273,0.791973 -0.15625,0.21875 -10.09023,2.6723063 z" + style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:url(#linearGradient6320);fill-opacity:1;stroke:#3b2400;stroke-width:0.43523332;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" /> + <g + id="g4824" + transform="translate(162.3125,-1.9898857)"> + <path + sodipodi:nodetypes="ssscscs" + inkscape:connector-curvature="0" + id="path4802" + d="m -50.5625,24.125 c 3e-6,1.829443 -3.665669,3.3125 -8.1875,3.3125 -4.521831,0 -8.1875,-1.483057 -8.1875,-3.3125 0,-0.288458 6.19e-4,-1.277147 6.19e-4,-1.798402 0.914867,-1.425173 4.378027,-1.514098 8.186878,-1.514098 3.789172,0 7.257999,0.08728 8.191601,1.501237 0,0.430812 -0.0041,1.514844 -0.0041,1.811263 z" + style="fill:url(#linearGradient6322);fill-opacity:1;stroke:none" + transform="matrix(0.98826267,0,0,0.70355867,-20.770245,4.1911619)" /> + <path + transform="matrix(0.98826267,0,0,0.70355867,-20.770245,2.9095309)" + d="m -50.5625,24.125 c 0,1.829443 -3.665669,3.3125 -8.1875,3.3125 -4.521831,0 -8.1875,-1.483057 -8.1875,-3.3125 0,-1.829443 3.665669,-3.3125 8.1875,-3.3125 4.521831,0 8.1875,1.483057 8.1875,3.3125 z" + sodipodi:ry="3.3125" + sodipodi:rx="8.1875" + sodipodi:cy="24.125" + sodipodi:cx="-58.75" + id="path4744" + style="fill:url(#radialGradient6324);fill-opacity:1;stroke:none" + sodipodi:type="arc" /> + <path + sodipodi:nodetypes="sscssscss" + inkscape:connector-curvature="0" + id="path4807" + d="m -78.875,17.545028 c -4.46876,0 -8.0625,1.056629 -8.0625,2.34375 0,1.154067 2.89539,2.095489 6.71875,2.28125 -3.54471,-0.190528 -5.90625,-0.871964 -5.90625,-1.859375 0,-1.12847 4.04758,-2 7.46875,-2.046875 4.295765,-0.05886 7.78125,0.77778 7.78125,1.90625 0,0.02962 0.0048,0.06444 0,0.09375 0.06968,-0.123038 0.09375,-0.246288 0.09375,-0.375 0,-1.287121 -3.624993,-2.34375 -8.09375,-2.34375 z" + style="fill:#6c4019;fill-opacity:1;stroke:none" /> + </g> <path - style="color:#000000;fill:url(#linearGradient13273);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient13275);stroke-width:0.77058458;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible" - d="m -8.5725348,11.035069 c -3.7140732,0 -6.7340192,1.324361 -6.7340192,2.953519 0,0.116904 0,8.443456 0,8.565206 0,1.629164 3.019946,2.953519 6.7340192,2.953519 3.714079,0 6.854278,-1.324355 6.854278,-2.953519 0,-0.09643 0,-8.468774 0,-8.565206 0,-1.629164 -3.140199,-2.953519 -6.854278,-2.953519 z" - id="path17817" - sodipodi:nodetypes="zsszssz" - inkscape:connector-curvature="0" /> + style="fill:none;stroke:#3b2400;stroke-width:0.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + d="M 75.671875,17.820767 82.227252,6.2846152 91.265625,17.789517" + id="path4833" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ccc" /> + <g + transform="translate(187.76834,-6.038009)" + id="g4835"> + <path + transform="matrix(0.98826267,0,0,0.70355867,-20.770245,4.1911619)" + style="fill:#5a3015;fill-opacity:1;stroke:none" + d="m -50.5625,24.125 c 3e-6,1.829443 -3.665669,3.3125 -8.1875,3.3125 -4.521831,0 -8.1875,-1.483057 -8.1875,-3.3125 0,-0.288458 6.19e-4,-1.277147 6.19e-4,-1.798402 0.914867,-1.425173 4.378027,-1.514098 8.186878,-1.514098 3.789172,0 7.257999,0.08728 8.191601,1.501237 0,0.430812 -0.0041,1.514844 -0.0041,1.811263 z" + id="path4837" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ssscscs" /> + <path + sodipodi:type="arc" + style="fill:url(#radialGradient6328);fill-opacity:1;stroke:none" + id="path4839" + sodipodi:cx="-58.75" + sodipodi:cy="24.125" + sodipodi:rx="8.1875" + sodipodi:ry="3.3125" + d="m -50.5625,24.125 c 0,1.829443 -3.665669,3.3125 -8.1875,3.3125 -4.521831,0 -8.1875,-1.483057 -8.1875,-3.3125 0,-1.829443 3.665669,-3.3125 8.1875,-3.3125 4.521831,0 8.1875,1.483057 8.1875,3.3125 z" + transform="matrix(0.98826267,0,0,0.70355867,-20.770245,2.9095309)" /> + <path + style="fill:#6c4019;fill-opacity:1;stroke:none" + d="m -78.875,17.545028 c -4.46876,0 -8.0625,1.056629 -8.0625,2.34375 0,1.154067 2.89539,2.095489 6.71875,2.28125 -3.54471,-0.190528 -5.90625,-0.871964 -5.90625,-1.859375 0,-1.12847 4.04758,-2 7.46875,-2.046875 4.295765,-0.05886 7.78125,0.77778 7.78125,1.90625 0,0.02962 0.0048,0.06444 0,0.09375 0.06968,-0.123038 0.09375,-0.246288 0.09375,-0.375 0,-1.287121 -3.624993,-2.34375 -8.09375,-2.34375 z" + id="path4841" + inkscape:connector-curvature="0" + sodipodi:nodetypes="sscssscss" /> + </g> <path - sodipodi:nodetypes="zsszssz" - id="path17819" - d="m -8.5662708,11.669209 c -3.3274462,0 -6.0330192,1.186496 -6.0330192,2.646065 0,0.104736 0,7.667759 0,7.776834 0,1.459568 2.705573,2.646065 6.0330192,2.646065 3.327452,0 6.140765,-1.186497 6.14076,-2.646065 0,-0.08639 0,-7.690444 0,-7.776834 0,-1.459569 -2.813308,-2.646065 -6.14076,-2.646065 z" - style="opacity:0.8982301;color:#000000;fill:none;stroke:url(#linearGradient13277);stroke-width:0.66884732;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible" - inkscape:connector-curvature="0" /> + sodipodi:nodetypes="ccc" + inkscape:connector-curvature="0" + id="path4843" + d="M 101.12772,13.772644 107.6831,2.2364919 116.72147,13.741394" + style="fill:none;stroke:#3b2400;stroke-width:0.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /> <path sodipodi:type="arc" - style="color:#000000;fill:#3a3a3a;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient13279);stroke-width:1.00492704;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible" - id="path17821" - sodipodi:cx="24" - sodipodi:cy="14.071428" - sodipodi:rx="12.857142" - sodipodi:ry="5.5" - d="m 36.857142,14.071428 c 0,3.037566 -5.756338,5.5 -12.857142,5.5 -7.100804,0 -12.857142,-2.462434 -12.857142,-5.5 0,-3.037566 5.756338,-5.4999997 12.857142,-5.4999997 7.100804,0 12.857142,2.4624337 12.857142,5.4999997 z" - transform="matrix(0.47968295,0,0,0.44145226,-20.055386,7.7366328)" /> - <path - style="opacity:0.64159324;color:#000000;fill:url(#linearGradient13281);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" - d="m -13.251088,15.932946 -0.04081,5.569491 2.253444,0.607585 0.04895,-5.535743 c 0,0 0.978881,0 2.5653472,-0.101262 -2.4647692,-0.110142 -5.2848492,-1.169439 -6.2445852,-1.856499 0.669573,0.988686 1.41769,1.316428 1.41769,1.316428 z" - id="path17823" - sodipodi:nodetypes="ccccccc" - inkscape:connector-curvature="0" /> + style="fill:url(#radialGradient6330);fill-opacity:1;fill-rule:evenodd;stroke:#3b2400;stroke-width:0.40000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" + id="path4694" + sodipodi:cx="23.4375" + sodipodi:cy="3.9375" + sodipodi:rx="2.2114758" + sodipodi:ry="2.2114758" + d="m 25.648976,3.9375 c 0,1.2213644 -0.990112,2.2114758 -2.211476,2.2114758 -1.221364,0 -2.211476,-0.9901114 -2.211476,-2.2114758 0,-1.2213644 0.990112,-2.2114758 2.211476,-2.2114758 1.221364,0 2.211476,0.9901114 2.211476,2.2114758 z" + transform="translate(72.731694,-4.7362221)" /> </g> - <path - inkscape:connector-curvature="0" - style="fill:#ecffd9;fill-opacity:1;fill-rule:evenodd;stroke:#c3ea9b;stroke-width:0.5550853;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:0.41618497;stroke-dasharray:none" - d="m 13.061558,19.736689 -5.125142,0 0,0.631043 6.133525,0 0.835439,-3.066073 2.057523,7.10244 1.906715,-5.610232 1.720026,3.065389 2.309744,-1.821027 1.864218,0 0,-1.067967 -2.12632,0 -1.883831,1.627946 -1.946374,-3.452905 -1.788534,4.238849 -1.942255,-6.670126 z" - id="path3684" - sodipodi:nodetypes="ccccccccccccccccc" /> - <path - inkscape:connector-curvature="0" - sodipodi:nodetypes="cccccccccccccccccc" - id="path3686" - d="m 12.541608,19.258112 -4.605192,0 0,1.580838 6.653475,-0.06481 0.389767,-1.577671 1.987494,6.589529 2.125302,-5.94568 1.49719,2.808356 2.53258,-2.130382 1.641382,-0.06481 0.0075,-2.027174 -2.133773,-0.06481 -1.809553,1.645241 -2.020652,-4.039484 -1.565698,3.597829 -2.090813,-6.362556 -2.608962,6.055599 z" - style="opacity:0.38068183;fill:#e1f9c9;fill-opacity:1;fill-rule:evenodd;stroke:#c3ea9b;stroke-width:0.55508548;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.41618497;stroke-dasharray:none" /> </g> </g> </svg> diff --git a/src/com.gluster.storage.management.gui/plugin.xml b/src/com.gluster.storage.management.gui/plugin.xml index f4af7238..3c87ffe1 100644 --- a/src/com.gluster.storage.management.gui/plugin.xml +++ b/src/com.gluster.storage.management.gui/plugin.xml @@ -99,7 +99,7 @@ allowMultiple="false" category="com.gluster.storage.management.gui.category" class="com.gluster.storage.management.gui.views.VolumeOptionsView" - icon="icons/tango/16x16/settings.png" + icon="icons/tango/16x16/volume-options.png" id="com.gluster.storage.management.gui.views.VolumeOptionsView" name="Volume Options" restorable="true"> @@ -462,6 +462,20 @@ toolbarPath="Normal" tooltip="Create a new Volume"> </action> + <action + allowLabelUpdate="false" + class="com.gluster.storage.management.gui.actions.ServerAdditionAction" + definitionId="com.gluster.storage.management.gui.commands.ServerAddition" + id="com.gluster.storage.management.gui.actions.ServerAdditionAction" + label="Add Server" + menubarPath="com.gluster.storage.management.gui.actionsets.volumes/volumes" + mode="FORCE_TEXT" + pulldown="false" + retarget="false" + state="false" + style="push" + tooltip="Manual Server Addition"> + </action> <menu id="com.gluster.storage.management.gui.actionsets.volumes" label="&Gluster" @@ -530,7 +544,7 @@ allowLabelUpdate="false" class="com.gluster.storage.management.gui.actions.ResetVolumeOptionsAction" definitionId="com.gluster.storage.management.gui.commands.ResetVolumeOptions" - icon="icons/tango/16x16/settings.png" + icon="icons/tango/32x32/reset-volume-option.svg" id="com.gluster.storage.management.gui.actions.ResetVolumeOptionsAction" label="Reset &Options" menubarPath="com.gluster.storage.management.gui.menu.volume/volume" @@ -631,6 +645,20 @@ toolbarPath="Normal" tooltip="Create a new Volume"> </action> + <action + allowLabelUpdate="false" + class="com.gluster.storage.management.gui.actions.ServerAdditionAction" + definitionId="com.gluster.storage.management.gui.commands.ServerAddition" + id="com.gluster.storage.management.gui.actions.ServerAdditionAction" + label="Add Server" + menubarPath="com.gluster.storage.management.gui.menu.volume/volume" + mode="FORCE_TEXT" + pulldown="false" + retarget="false" + state="false" + style="push" + tooltip="Manual Server Addition"> + </action> <menu id="com.gluster.storage.management.gui.menu.volume" label="&Gluster" @@ -675,6 +703,20 @@ toolbarPath="Normal" tooltip="Create a new Volume"> </action> + <action + allowLabelUpdate="false" + class="com.gluster.storage.management.gui.actions.ServerAdditionAction" + definitionId="com.gluster.storage.management.gui.commands.ServerAddition" + id="com.gluster.storage.management.gui.actions.ServerAdditionAction" + label="Add Server" + menubarPath="com.gluster.storage.management.gui.menu.servers/servers" + mode="FORCE_TEXT" + pulldown="false" + retarget="false" + state="false" + style="push" + tooltip="Manual Server Addition"> + </action> <menu id="com.gluster.storage.management.gui.menu.servers" label="&Gluster" @@ -719,6 +761,20 @@ toolbarPath="Normal" tooltip="Create a new Volume"> </action> + <action + allowLabelUpdate="false" + class="com.gluster.storage.management.gui.actions.ServerAdditionAction" + definitionId="com.gluster.storage.management.gui.commands.ServerAddition" + id="com.gluster.storage.management.gui.actions.ServerAdditionAction" + label="Add Server" + menubarPath="com.gluster.storage.management.gui.menu.glusterserver/glusterserver" + mode="FORCE_TEXT" + pulldown="false" + retarget="false" + state="false" + style="push" + tooltip="Manual Server Addition"> + </action> <menu id="com.gluster.storage.management.gui.menu.glusterserver" label="&Gluster" @@ -763,6 +819,20 @@ toolbarPath="Normal" tooltip="Create a new Volume"> </action> + <action + allowLabelUpdate="false" + class="com.gluster.storage.management.gui.actions.ServerAdditionAction" + definitionId="com.gluster.storage.management.gui.commands.ServerAddition" + id="com.gluster.storage.management.gui.actions.ServerAdditionAction" + label="Add Server" + menubarPath="com.gluster.storage.management.gui.menu.discoveredservers/discoveredservers" + mode="FORCE_TEXT" + pulldown="false" + retarget="false" + state="false" + style="push" + tooltip="Manual Server Addition"> + </action> <menu id="com.gluster.storage.management.gui.menu.discoveredservers" label="&Gluster" @@ -807,6 +877,20 @@ toolbarPath="Normal" tooltip="Create a new Volume"> </action> + <action + allowLabelUpdate="false" + class="com.gluster.storage.management.gui.actions.ServerAdditionAction" + definitionId="com.gluster.storage.management.gui.commands.ServerAddition" + id="com.gluster.storage.management.gui.actions.ServerAdditionAction" + label="Add Server" + menubarPath="com.gluster.storage.management.gui.menu.discoveredserver/discoveredserver" + mode="FORCE_TEXT" + pulldown="false" + retarget="false" + state="false" + style="push" + tooltip="Manual Server Addition"> + </action> <menu id="com.gluster.storage.management.gui.menu.discoveredserver" label="&Gluster" @@ -855,7 +939,7 @@ allowLabelUpdate="false" class="com.gluster.storage.management.gui.actions.StopTaskAction" definitionId="com.gluster.storage.management.gui.commands.Stop" - icon="icons/stop_task.png" + icon="icons/tango/32x32/media-playback-stop.png" id="com.gluster.storage.management.gui.actions.Stop" label="&Stop Task" menubarPath="com.gluster.storage.management.gui.menu.task/task" @@ -870,7 +954,7 @@ allowLabelUpdate="false" class="com.gluster.storage.management.gui.actions.ResumeTaskAction" definitionId="com.gluster.storage.management.gui.commands.Pause" - icon="icons/start_task.gif" + icon="icons/tango/32x32/media-playback-start.png" id="com.gluster.storage.management.gui.actions.Resume" label="&Resume Task" menubarPath="com.gluster.storage.management.gui.menu.task/task" @@ -885,7 +969,7 @@ allowLabelUpdate="false" class="com.gluster.storage.management.gui.actions.PauseTaskAction" definitionId="com.gluster.storage.management.gui.commands.Pause" - icon="icons/pause_task.png" + icon="icons/tango/32x32/media-playback-pause.png" id="com.gluster.storage.management.gui.actions.Pause" label="&Pause Task" menubarPath="com.gluster.storage.management.gui.menu.task/task" @@ -939,6 +1023,20 @@ toolbarPath="Normal" tooltip="Create a new Volume"> </action> + <action + allowLabelUpdate="false" + class="com.gluster.storage.management.gui.actions.ServerAdditionAction" + definitionId="com.gluster.storage.management.gui.commands.ServerAddition" + id="com.gluster.storage.management.gui.actions.ServerAdditionAction" + label="Add Server" + menubarPath="com.gluster.storage.management.gui.menu.gluster/gluster" + mode="FORCE_TEXT" + pulldown="false" + retarget="false" + state="false" + style="push" + tooltip="Manual Server Addition"> + </action> <menu id="com.gluster.storage.management.gui.menu.gluster" label="&Gluster" diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/IImageKeys.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/IImageKeys.java index c0187667..764401a1 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/IImageKeys.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/IImageKeys.java @@ -33,6 +33,9 @@ public interface IImageKeys { public static final String CREATE_VOLUME = "icons/tango/32x32/create-volume.svg"; public static final String START_VOLUME = "icons/tango/32x32/start-volume.svg"; public static final String STOP_VOLUME = "icons/tango/32x32/stop-volume.svg"; + public static final String RESET_VOLUME_OPTIONS = "icons/tango/32x32/reset-volume-option.svg"; + public static final String VOLUME_OPTIONS = "icons/tango/16x16/volume-options.png"; + public static final String SERVER_OFFLINE = "icons/tango/16x16/offline-server.png"; public static final String CREATE_VOLUME_BIG = "icons/tango/48x48/create-volume.svg"; public static final String REMOVE_VOLUME = "icons/tango/32x32/remove-volume.svg"; @@ -50,7 +53,7 @@ public interface IImageKeys { public static final String DISK = "icons/tango/16x16/disk.svg"; public static final String DISKS = "icons/tango/16x16/disk.svg"; public static final String DISK_UNINITIALIZED = "icons/disk-uninitialized.png"; - public static final String SEARCH = "icons/search.png"; + public static final String SEARCH = "icons/tango/22x22/system-search.png"; public static final String ARROW_UP = "icons/arrow-up.png"; public static final String ARROW_DOWN = "icons/arrow-down.png"; public static final String VOLUME_REBALANCE = "icons/tango/32x32/volume-rebalance.svg"; @@ -63,9 +66,9 @@ public interface IImageKeys { public static final String bricks = "icons/tango/16x16/bricks.png"; - public static final String PAUSE_TASK = "icons/pause_task.gif"; - public static final String RESUME_TASK = "icons/resume_task.gif"; - public static final String STOP_TASK = "icons/stop_task.gif"; + public static final String PAUSE_TASK = "icons/tango/32x32/media-playback-pause.png"; + public static final String RESUME_TASK = "icons/tango/32x32/media-playback-start.png"; + public static final String STOP_TASK = "icons/tango/32x32/media-playback-stop.png"; public static final String CLEAR_TASK = "icons/close_task.gif"; public static final String OVERLAY_OFFLINE = "icons/status-offline-small.png"; diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AddServerAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AddServerAction.java index 81661942..6d21e537 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AddServerAction.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AddServerAction.java @@ -52,7 +52,7 @@ public class AddServerAction extends AbstractActionDelegate { guiHelper.setStatusMessage("Adding server [" + server.getName() + "]..."); try { - glusterServersClient.addServer(server); + glusterServersClient.addServer(server.getName()); modelManager.addGlusterServer(glusterServersClient.getGlusterServer(server.getName())); successServers.add(server); } catch (Exception e) { diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ServerAdditionAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ServerAdditionAction.java new file mode 100644 index 00000000..d94d7277 --- /dev/null +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ServerAdditionAction.java @@ -0,0 +1,34 @@ +package com.gluster.storage.management.gui.actions; + +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.IWorkbenchWindowActionDelegate; + +import com.gluster.storage.management.gui.dialogs.ChangePasswordDialog; +import com.gluster.storage.management.gui.dialogs.ServerAdditionDialog; + +public class ServerAdditionAction extends AbstractActionDelegate { + + @Override + public void dispose() { + // TODO Auto-generated method stub + + } + + @Override + protected void performAction(IAction action) { + + try { + // To open a dialog for server addition + ServerAdditionDialog dialog = new ServerAdditionDialog(getShell()); + dialog.open(); + } catch (Exception e) { + e.printStackTrace(); + } + + } + + + +} diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/InitializeDiskTypeSelection.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/InitializeDiskTypeSelection.java index bb700de5..5fce27e4 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/InitializeDiskTypeSelection.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/InitializeDiskTypeSelection.java @@ -56,7 +56,7 @@ public class InitializeDiskTypeSelection extends Dialog { protected void configureShell(Shell newShell) { super.configureShell(newShell); - newShell.setText("Gluster Management Console - Select Cluster"); + newShell.setText("Gluster Management Console - Select FS Type"); addEscapeListener(newShell); } diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/ServerAdditionDialog.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/ServerAdditionDialog.java new file mode 100644 index 00000000..ca9a0058 --- /dev/null +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/ServerAdditionDialog.java @@ -0,0 +1,199 @@ +/** + * ServerAdditionDialog.java + * + * Copyright (c) 2011 Gluster, Inc. <http://www.gluster.com> + * This file is part of Gluster Management Console. + * + * Gluster Management Console is free software; you can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * Gluster Management Console 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 Affero General Public License + * for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * <http://www.gnu.org/licenses/>. + */ +package com.gluster.storage.management.gui.dialogs; + +import org.eclipse.core.databinding.DataBindingContext; +import org.eclipse.core.databinding.UpdateValueStrategy; +import org.eclipse.core.databinding.beans.PojoProperties; +import org.eclipse.core.databinding.validation.ValidationStatus; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.jface.databinding.swt.SWTObservables; +import org.eclipse.jface.databinding.swt.WidgetProperties; +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jface.dialogs.IDialogConstants; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.fieldassist.ControlDecoration; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.ModifyEvent; +import org.eclipse.swt.events.ModifyListener; +import org.eclipse.swt.events.TraverseEvent; +import org.eclipse.swt.events.TraverseListener; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.Text; + +import com.gluster.storage.management.client.GlusterServersClient; +import com.gluster.storage.management.client.UsersClient; +import com.gluster.storage.management.core.constants.CoreConstants; +import com.gluster.storage.management.core.model.ConnectionDetails; +import com.gluster.storage.management.core.model.Server; +import com.gluster.storage.management.gui.IImageKeys; +import com.gluster.storage.management.gui.utils.GUIHelper; +import com.gluster.storage.management.gui.validators.StringRequiredValidator; + +public class ServerAdditionDialog extends Dialog { + public static final int RETURN_CODE_ERROR = 2; + private Text serverName; + private Button addButton; + + private final GUIHelper guiHelper = GUIHelper.getInstance(); + private Composite composite; + + public ServerAdditionDialog(Shell shell) { + super(shell); + } + + @Override + protected void configureShell(Shell newShell) { + super.configureShell(newShell); + + newShell.setText("Gluster Management Console - Add Server"); + addEscapeListener(newShell); + } + + private void addEscapeListener(Shell shell) { + shell.addTraverseListener(new TraverseListener() { + + @Override + public void keyTraversed(TraverseEvent e) { + if (e.keyCode == SWT.ESC) { + cancelPressed(); + } + } + }); + } + + /** + * Overriding to make sure that the dialog is centered in screen + */ + @Override + protected void initializeBounds() { + super.initializeBounds(); + + guiHelper.centerShellInScreen(getShell()); + } + + private void configureDialogLayout(Composite composite) { + GridLayout layout = (GridLayout) composite.getLayout(); + layout.numColumns = 2; + layout.marginLeft = 20; + layout.marginRight = 20; + layout.marginTop = 20; + layout.horizontalSpacing = 20; + layout.verticalSpacing = 20; + } + + // ------------------------------------------ + + private void createLabel(Composite composite, String label) { + Label passwordLabel = new Label(composite, SWT.NONE); + passwordLabel.setText(label); + passwordLabel.setLayoutData(new GridData(GridData.END, GridData.CENTER, false, false)); + } + + private Text createServerNameText(Composite composite) { + Text field = new Text(composite, SWT.BORDER ); + GridData layoutData = new GridData(SWT.FILL, GridData.FILL, true, false); + layoutData.widthHint = convertWidthInCharsToPixels(32); + field.setLayoutData(layoutData); + return field; + } + + @Override + protected Control createDialogArea(Composite parent) { +// parent.setBackgroundImage(guiHelper.getImage(IImageKeys.DIALOG_SPLASH_IMAGE)); + parent.setBackgroundMode(SWT.INHERIT_FORCE); + + composite = (Composite) super.createDialogArea(parent); + configureDialogLayout(composite); + + createLabel(composite, "Server Name:"); + serverName = createServerNameText(composite); + + createListeners(); + + return composite; + } + + private void createListeners() { + ModifyListener listener = new ModifyListener() { + + @Override + public void modifyText(ModifyEvent e) { + updateButtonStatus(); + } + }; + + serverName.addModifyListener(listener); + } + + private void updateButtonStatus() { + if(serverName.getText().isEmpty()) { + addButton.setEnabled(false); + return; + } + + addButton.setEnabled(true); + } + + @Override + protected void createButtonsForButtonBar(Composite parent) { + addButton = createButton(parent, IDialogConstants.OK_ID, "&Add Server", true); + addButton.setEnabled(false); + createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); + + setupDataBinding(); + } + + private void setupDataBinding() { + DataBindingContext dataBindingContext = new DataBindingContext(SWTObservables.getRealm(Display.getCurrent())); + UpdateValueStrategy serverNameBindingStrategy = new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE); + + // The Validator shows error decoration and disables OK button on + // validation failure + serverNameBindingStrategy.setBeforeSetValidator(new StringRequiredValidator("Please enter server name!", + guiHelper.createErrorDecoration(serverName), null)); + + dataBindingContext.bindValue(WidgetProperties.text(SWT.Modify).observe(serverName), + PojoProperties.value("serverName").observe(serverName.getText()), serverNameBindingStrategy, + serverNameBindingStrategy); + + } + + protected void okPressed() { + GlusterServersClient serversClient = new GlusterServersClient(); + try { + serversClient.addServer(serverName.getText()); + + MessageDialog.openInformation(getShell(), "Add Server", "Server added successfully!"); + } catch (Exception e) { + MessageDialog.openError(getShell(), "Server addition Failed", e.getMessage()); + setReturnCode(RETURN_CODE_ERROR); + } + this.close(); + } +} diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/ClusterSummaryView.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/ClusterSummaryView.java index bf81b3aa..54e289bc 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/ClusterSummaryView.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/ClusterSummaryView.java @@ -20,6 +20,7 @@ */ package com.gluster.storage.management.gui.views; +import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -40,6 +41,7 @@ import org.eclipse.ui.handlers.IHandlerService; import org.eclipse.ui.part.ViewPart; import com.gluster.storage.management.client.GlusterDataModelManager; +import com.gluster.storage.management.client.GlusterServersClient; import com.gluster.storage.management.core.model.Alert; import com.gluster.storage.management.core.model.Cluster; import com.gluster.storage.management.core.model.EntityGroup; @@ -47,6 +49,8 @@ import com.gluster.storage.management.core.model.GlusterDataModel; import com.gluster.storage.management.core.model.GlusterServer; import com.gluster.storage.management.core.model.GlusterServer.SERVER_STATUS; import com.gluster.storage.management.core.model.Server; +import com.gluster.storage.management.core.model.ServerStats; +import com.gluster.storage.management.core.model.ServerStatsRow; import com.gluster.storage.management.core.model.TaskInfo; import com.gluster.storage.management.core.utils.NumberUtil; import com.gluster.storage.management.gui.IImageKeys; @@ -160,7 +164,7 @@ public class ClusterSummaryView extends ViewPart { alertImage = guiHelper.getImage(IImageKeys.LOW_DISK_SPACE); break; case OFFLINE_SERVERS_ALERT: - alertImage = guiHelper.getImage(IImageKeys.STATUS_OFFLINE); + alertImage = guiHelper.getImage(IImageKeys.SERVER_OFFLINE); break; case MEMORY_USAGE_ALERT: alertImage = guiHelper.getImage(IImageKeys.MEMORY_USAGE_ALERT); @@ -229,24 +233,26 @@ public class ClusterSummaryView extends ViewPart { toolkit.createLabel(section, "This section will be populated after at least\none server is added to the storage cloud."); return; } - //toolkit.createLabel(section, "Historical CPU Usage graph aggregated across\nall servers will be displayed here."); + + ServerStats stats = new GlusterServersClient().getAggregatedCPUStats(); + List<Calendar> timestamps = new ArrayList<Calendar>(); + List<Double> data = new ArrayList<Double>(); + for(ServerStatsRow row : stats.getRows()) { + timestamps.add(new CDateTime(row.getTimestamp() * 1000)); + // in case of CPU usage, there are three elements in usage data: user, system and total. we use total. + data.add(row.getUsageData().get(2)); + } -// Date[] timestamps = new Date[] { new Date(1310468100), new Date(1310468400), new Date(1310468700), -// new Date(1310469000), new Date(1310469300), new Date(1310469600), new Date(1310469900), -// new Date(1310470200), new Date(1310470500), new Date(1310470800), new Date(1310471100), -// new Date(1310471400), new Date(1310471700), new Date(1310472000), new Date(1310472300), -// new Date(1310472600), new Date(1310472900), new Date(1310473200), new Date(1310473500), -// new Date(1310473800) }; - Calendar[] timestamps = new Calendar[] { new CDateTime(1000l*1310468100), new CDateTime(1000l*1310468400), new CDateTime(1000l*1310468700), - new CDateTime(1000l*1310469000), new CDateTime(1000l*1310469300), new CDateTime(1000l*1310469600), new CDateTime(1000l*1310469900), - new CDateTime(1000l*1310470200), new CDateTime(1000l*1310470500), new CDateTime(1000l*1310470800), new CDateTime(1000l*1310471100), - new CDateTime(1000l*1310471400), new CDateTime(1000l*1310471700), new CDateTime(1000l*1310472000), new CDateTime(1000l*1310472300), - new CDateTime(1000l*1310472600), new CDateTime(1000l*1310472900), new CDateTime(1000l*1310473200), new CDateTime(1000l*1310473500), - new CDateTime(1000l*1310473800) }; +// Calendar[] timestamps = new Calendar[] { new CDateTime(1000l*1310468100), new CDateTime(1000l*1310468400), new CDateTime(1000l*1310468700), +// new CDateTime(1000l*1310469000), new CDateTime(1000l*1310469300), new CDateTime(1000l*1310469600), new CDateTime(1000l*1310469900), +// new CDateTime(1000l*1310470200), new CDateTime(1000l*1310470500), new CDateTime(1000l*1310470800), new CDateTime(1000l*1310471100), +// new CDateTime(1000l*1310471400), new CDateTime(1000l*1310471700), new CDateTime(1000l*1310472000), new CDateTime(1000l*1310472300), +// new CDateTime(1000l*1310472600), new CDateTime(1000l*1310472900), new CDateTime(1000l*1310473200), new CDateTime(1000l*1310473500), +// new CDateTime(1000l*1310473800) }; //String[] timestampsarr = new String[] {"t1", "t2", "t3", "t4", "t5", "t6", "t7", "t8", "t9", "t10", "t11", "t12", "t13", "t14", "t15", "t16", "t17", "t18", "t19", "t20"}; - Double[] values = new Double[] { 10d, 11.23d, 17.92d, 18.69d, 78.62d, 89.11d, 92.43d, 89.31d, 57.39d, 18.46d, 10.44d, 16.28d, 13.51d, 17.53d, 12.21, 20d, 21.43d, 16.45d, 14.86d, 15.27d }; - createLineChart(section, timestamps, values); + //Double[] values = new Double[] { 10d, 11.23d, 17.92d, 18.69d, 78.62d, 89.11d, 92.43d, 89.31d, 57.39d, 18.46d, 10.44d, 16.28d, 13.51d, 17.53d, 12.21, 20d, 21.43d, 16.45d, 14.86d, 15.27d }; + createLineChart(section, timestamps.toArray(new Calendar[0]), data.toArray(new Double[0])); } private void createNetworkUsageSection() { diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServerSummaryView.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServerSummaryView.java index 50da72ff..1a89ae7e 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServerSummaryView.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServerSummaryView.java @@ -23,6 +23,7 @@ package com.gluster.storage.management.gui.views; import java.util.ArrayList; import java.util.List; +import org.eclipse.birt.chart.util.CDateTime; import org.eclipse.jface.layout.TableColumnLayout; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ColumnWeightData; @@ -42,18 +43,21 @@ import org.eclipse.ui.forms.widgets.ScrolledForm; import org.eclipse.ui.part.ViewPart; import com.gluster.storage.management.client.GlusterDataModelManager; +import com.gluster.storage.management.client.GlusterServersClient; import com.gluster.storage.management.core.model.ClusterListener; import com.gluster.storage.management.core.model.DefaultClusterListener; import com.gluster.storage.management.core.model.Event; import com.gluster.storage.management.core.model.GlusterServer; +import com.gluster.storage.management.core.model.ServerStatsRow; import com.gluster.storage.management.core.model.GlusterServer.SERVER_STATUS; +import com.gluster.storage.management.core.model.ServerStats; import com.gluster.storage.management.core.utils.NumberUtil; import com.gluster.storage.management.gui.IImageKeys; import com.gluster.storage.management.gui.NetworkInterfaceTableLabelProvider; import com.gluster.storage.management.gui.toolbar.GlusterToolbarManager; import com.gluster.storage.management.gui.utils.ChartViewerComposite; -import com.gluster.storage.management.gui.utils.ChartViewerComposite.CHART_TYPE; import com.gluster.storage.management.gui.utils.GUIHelper; +import com.ibm.icu.util.Calendar; import com.richclientgui.toolbox.gauges.CoolGauge; public class GlusterServerSummaryView extends ViewPart { @@ -101,7 +105,7 @@ public class GlusterServerSummaryView extends ViewPart { GlusterDataModelManager.getInstance().removeClusterListener(serverChangedListener); } - private void createLineChart(Composite section, String timestamps[], Double values[]) { + private void createLineChart(Composite section, Calendar timestamps[], Double values[]) { ChartViewerComposite chartViewerComposite = new ChartViewerComposite(section, SWT.NONE, timestamps, values); GridData data = new GridData(SWT.FILL, SWT.FILL, false, false); data.widthHint = 450; @@ -119,9 +123,18 @@ public class GlusterServerSummaryView extends ViewPart { Composite section = guiHelper.createSection(form, toolkit, "CPU Usage (aggregated)", null, 1, false); //toolkit.createLabel(section, "Historical CPU Usage graph aggregated across\nall servers will be displayed here."); - String[] timestamps = new String[] {"t1", "t2", "t3", "t4", "t5", "t6", "t7", "t8", "t9", "t10", "t11", "t12", "t13", "t14", "t15", "t16", "t17", "t18", "t19", "t20"}; - Double[] values = new Double[] { 10d, 11.23d, 17.92d, 18.69d, 78.62d, 89.11d, 92.43d, 20.31d, 19.63d, 18.46d, 10.44d, 16.28d, 13.51d, 17.53d, 12.21, 20d, 40d, 10d, 90d, 40d }; - createLineChart(section, timestamps, values); +// String[] timestamps = new String[] {"t1", "t2", "t3", "t4", "t5", "t6", "t7", "t8", "t9", "t10", "t11", "t12", "t13", "t14", "t15", "t16", "t17", "t18", "t19", "t20"}; +// Double[] values = new Double[] { 10d, 11.23d, 17.92d, 18.69d, 78.62d, 89.11d, 92.43d, 20.31d, 19.63d, 18.46d, 10.44d, 16.28d, 13.51d, 17.53d, 12.21, 20d, 40d, 10d, 90d, 40d }; + ServerStats stats = new GlusterServersClient().getAggregatedCPUStats(); + List<Calendar> timestamps = new ArrayList<Calendar>(); + List<Double> data = new ArrayList<Double>(); + for(ServerStatsRow row : stats.getRows()) { + timestamps.add(new CDateTime(row.getTimestamp() * 1000)); + // in case of CPU usage, there are three elements in usage data: user, system and total. we use total. + data.add(row.getUsageData().get(2)); + } + + createLineChart(section, timestamps.toArray(new Calendar[0]), data.toArray(new Double[0])); } private void createSections(Composite parent) { diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractDisksPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractDisksPage.java index 447524a4..1c63e1c3 100644 --- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractDisksPage.java +++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractDisksPage.java @@ -42,11 +42,14 @@ import org.eclipse.ui.forms.widgets.ImageHyperlink; import com.gluster.storage.management.client.GlusterDataModelManager; import com.gluster.storage.management.client.GlusterServersClient; import com.gluster.storage.management.client.TasksClient; +import com.gluster.storage.management.core.model.ClusterListener; +import com.gluster.storage.management.core.model.DefaultClusterListener; import com.gluster.storage.management.core.model.Device; import com.gluster.storage.management.core.model.Device.DEVICE_STATUS; import com.gluster.storage.management.core.model.Disk; import com.gluster.storage.management.core.model.Entity; import com.gluster.storage.management.core.model.Partition; +import com.gluster.storage.management.core.model.Status; import com.gluster.storage.management.core.model.TaskInfo; import com.gluster.storage.management.gui.Application; import com.gluster.storage.management.gui.IEntityListener; @@ -70,7 +73,11 @@ public abstract class AbstractDisksPage extends AbstractTableTreeViewerPage<Disk Application.getApplication().addEntityListener(this); } - private void createInitializeLink(final TreeItem item, final int rowNum, final Device device) { + protected ClusterListener createClusterListener() { + return new DefaultClusterListener(); + } + + private void createInitializeLink(final TreeItem item, final int rowNum, final Device uninitializedDevice) { final Tree tree = treeViewer.getTree(); final TreeEditor editor = new TreeEditor(tree); editor.grabHorizontal = true; @@ -82,7 +89,7 @@ public abstract class AbstractDisksPage extends AbstractTableTreeViewerPage<Disk private ImageHyperlink myLink = null; private TreeEditor myEditor = null; - private void createLinkFor(Device device, TreeItem item1, int rowNum1) { + private void createLinkFor(Device uninitializedDevice, TreeItem item1, int rowNum1) { myItem = item1; myRowNum = rowNum1; @@ -93,7 +100,7 @@ public abstract class AbstractDisksPage extends AbstractTableTreeViewerPage<Disk myLink = toolkit.createImageHyperlink(tree, SWT.NONE); // link.setImage(guiHelper.getImage(IImageKeys.DISK_UNINITIALIZED)); myLink.setText("Initialize"); - myLink.addHyperlinkListener(new StatusLinkListener(myLink, myEditor, treeViewer, device)); + myLink.addHyperlinkListener(new StatusLinkListener(myLink, myEditor, treeViewer, uninitializedDevice)); myEditor.setEditor(myLink, item1, getStatusColumnIndex()); @@ -111,14 +118,15 @@ public abstract class AbstractDisksPage extends AbstractTableTreeViewerPage<Disk int itemCount = tree.getItemCount(); // Find the table item corresponding to our disk - Disk disk = null; + + Device device = null; int rowNum1 = -1; TreeItem item1 = null; for (int i = 0; i < itemCount; i++) { item1 = tree.getItem(i); - disk = (Disk) item1.getData(); - if (disk != null && disk == device) { + device = (Device) item1.getData(); + if (device != null && device == uninitializedDevice) { // this is an uninitialized "disk" rowNum1 = i; break; @@ -129,10 +137,11 @@ public abstract class AbstractDisksPage extends AbstractTableTreeViewerPage<Disk TreeItem partitionItem = item1.getItem(j); // check each partition Device partition = (Device)partitionItem.getData(); - if(partition != null && partition == device) { + if(partition != null && partition == uninitializedDevice) { // this is an uninitialized "partition" rowNum1 = i + j; item1 = partitionItem; + device = (Device) partitionItem.getData(); break; } } @@ -147,14 +156,14 @@ public abstract class AbstractDisksPage extends AbstractTableTreeViewerPage<Disk // item visible, and // either editor never created, OR // old item disposed. create the link for it - createLinkFor(disk, item1, rowNum1); + createLinkFor(device, item1, rowNum1); } if (rowNum1 != myRowNum) { // disk visible, but at a different row num. re-create the link myLink.dispose(); myEditor.dispose(); - createLinkFor(disk, item1, rowNum1); + createLinkFor(device, item1, rowNum1); } myEditor.layout(); // IMPORTANT. Without this, the link location goes for a toss on maximize + restore @@ -219,14 +228,22 @@ public abstract class AbstractDisksPage extends AbstractTableTreeViewerPage<Disk GlusterServersClient serversClient = new GlusterServersClient(); try { + URI uri = serversClient.initializeDisk(device.getServerName(), device.getName(), formatDialog.getFSType()); TasksClient taskClient = new TasksClient(); TaskInfo taskInfo = taskClient.getTaskInfo(uri); + if (taskInfo != null && taskInfo instanceof TaskInfo) { GlusterDataModelManager.getInstance().getModel().getCluster().addTaskInfo(taskInfo); } - updateStatus(DEVICE_STATUS.INITIALIZING, true); + + if (taskInfo.getStatus().getCode() == Status.STATUS_CODE_RUNNING) { + updateStatus(DEVICE_STATUS.INITIALIZING, true); + } else if(taskInfo.getStatus().getCode() == Status.STATUS_CODE_SUCCESS) { + updateStatus(DEVICE_STATUS.INITIALIZED, true); + } + } catch (Exception e1) { MessageDialog.openError(getShell(), "Error: Initialize disk", e1.getMessage()); } diff --git a/src/com.gluster.storage.management.server.scripts/src/DiskUtils.py b/src/com.gluster.storage.management.server.scripts/src/DiskUtils.py index e796f479..bffbe940 100644 --- a/src/com.gluster.storage.management.server.scripts/src/DiskUtils.py +++ b/src/com.gluster.storage.management.server.scripts/src/DiskUtils.py @@ -101,6 +101,17 @@ def getDiskPartitionLabel(device): return False +def readFile(fileName): + lines = None + try: + fp = open(fileName) + lines = fp.readlines() + fp.close() + except IOError, e: + Utils.log("failed to read file %s: %s" % (file, str(e))) + return lines + + def getRootPartition(fsTabFile=Globals.FSTAB_FILE): fsTabEntryList = readFsTab(fsTabFile) for fsTabEntry in fsTabEntryList: @@ -162,7 +173,7 @@ def getRaidDisk(): if not rv["Stderr"]: words = rv["Stdout"].strip().split() if words: - raid['Type'] = "INITIALIZED" + raid['Status'] = "INITIALIZED" if len(words) > 2: raid['Uuid'] = words[1].split("UUID=")[-1].split('"')[1] raid['FsType'] = words[2].split("TYPE=")[-1].split('"')[1] @@ -307,7 +318,7 @@ def getDiskInfo(diskDeviceList=None): partition["SpaceInUse"] = used if partition["MountPoint"] or isDataDiskPartitionFormatted(partitionDevice): partition["Init"] = True - #partition["Status"] = "INITIALIZED" + partition["Status"] = "INITIALIZED" if partition["MountPoint"]: if "/export/" in partition["MountPoint"]: partition["Type"] = "DATA" @@ -323,6 +334,32 @@ def getDiskInfo(diskDeviceList=None): disk["SpaceInUse"] = diskSpaceInUse diskList.append(disk) diskInfo["disks"] = diskList + if diskList: + return diskInfo + for line in readFile("/proc/partitions")[2:]: + disk = {} + tokens = line.split() + if tokens[3].startswith("md"): + continue + disk["Device"] = tokens[3] + ## if diskDeviceList and disk["Device"] not in diskDeviceList: + ## continue + disk["Description"] = None + disk["Size"] = long(tokens[2]) / 1024 + disk["Status"] = None + disk["Interface"] = None + disk["DriveType"] = None + disk["Uuid"] = None + disk["Init"] = False + disk["Type"] = None + disk["FsType"] = None + disk["FsVersion"] = None + disk["MountPoint"] = None + disk["ReadOnlyAccess"] = None + disk["SpaceInUse"] = None + disk["Partitions"] = [] + diskList.append(disk) + diskInfo["disks"] = diskList return diskInfo def getDiskList(diskDeviceList=None): @@ -515,12 +552,12 @@ def getDiskDom(diskDeviceList=None, bootPartition=None, skipDisk=None): diskTag.appendChild(diskDom.createTag("status", disk["Status"])) diskTag.appendChild(diskDom.createTag("interface", disk["Interface"])) - if not disk["Partitions"]: - diskTag.appendChild(diskDom.createTag("type", disk["Type"])) - #diskTag.appendChild(diskDom.createTag("init", str(disk["Init"]).lower())) - diskTag.appendChild(diskDom.createTag("fsType", disk["FsType"])) - diskTag.appendChild(diskDom.createTag("fsVersion", disk["FsVersion"])) - diskTag.appendChild(diskDom.createTag("mountPoint", disk["MountPoint"])) + #if not disk["Partitions"]: + diskTag.appendChild(diskDom.createTag("type", disk["Type"])) + #diskTag.appendChild(diskDom.createTag("init", str(disk["Init"]).lower())) + diskTag.appendChild(diskDom.createTag("fsType", disk["FsType"])) + diskTag.appendChild(diskDom.createTag("fsVersion", disk["FsVersion"])) + diskTag.appendChild(diskDom.createTag("mountPoint", disk["MountPoint"])) diskTag.appendChild(diskDom.createTag("size", disk["Size"])) diskTag.appendChild(diskDom.createTag("spaceInUse", disk["SpaceInUse"])) @@ -528,7 +565,9 @@ def getDiskDom(diskDeviceList=None, bootPartition=None, skipDisk=None): if raidPartitions.has_key(diskDevice): rdList = {} rdList[diskDevice] = [deepcopy(diskTag)] - raidDisks[raidPartitions[diskDevice]] = rdList + if not raidDisks.has_key(raidPartitions[diskDevice]): + raidDisks[raidPartitions[diskDevice]] = [] + raidDisks[raidPartitions[diskDevice]] += [rdList] continue for partition in disk["Partitions"]: partitionTag = diskDom.createTag("partition", None) @@ -549,16 +588,17 @@ def getDiskDom(diskDeviceList=None, bootPartition=None, skipDisk=None): tempPartitionTag = diskDom.createTag("partitions", None) if raidDisks.has_key(raidPartitions[device]): rdList = raidDisks[raidPartitions[device]] - if not rdList.has_key(diskDevice): - rdList[diskDevice] = [deepcopy(diskTag), tempPartitionTag] - rdList[diskDevice][0].appendChild(tempPartitionTag) - rdList[diskDevice][-1].appendChild(partitionTag) + for rdItem in rdList: + if not rdItem.has_key(diskDevice): + rdItem[diskDevice] = [deepcopy(diskTag), tempPartitionTag] + rdItem[diskDevice][0].appendChild(tempPartitionTag) + rdItem[diskDevice][-1].appendChild(partitionTag) continue rdList = {} rdList[diskDevice] = [deepcopy(diskTag), tempPartitionTag] tempPartitionTag.appendChild(partitionTag) rdList[diskDevice][0].appendChild(tempPartitionTag) - raidDisks[raidPartitions[device]] = rdList + raidDisks[raidPartitions[device]] = [rdList] continue partitionsTag.appendChild(partitionTag) diskTag.appendChild(partitionsTag) @@ -579,8 +619,9 @@ def getDiskDom(diskDeviceList=None, bootPartition=None, skipDisk=None): raidDiskTag.appendChild(diskDom.createTag("spaceInUse", raidDisk[rdisk]['SpaceInUse'])) raidDisksTag = diskDom.createTag("raidDisks", None) if raidDisks.has_key(rdisk): - for diskTag in raidDisks[rdisk].values(): - raidDisksTag.appendChild(diskTag[0]) + for item in raidDisks[rdisk]: + for diskTag in item.values(): + raidDisksTag.appendChild(diskTag[0]) raidDiskTag.appendChild(raidDisksTag) disksTag.appendChild(raidDiskTag) diskDom.addTag(disksTag) diff --git a/src/com.gluster.storage.management.server.scripts/src/get_brick_status.py b/src/com.gluster.storage.management.server.scripts/src/get_brick_status.py new file mode 100755 index 00000000..8d827bd2 --- /dev/null +++ b/src/com.gluster.storage.management.server.scripts/src/get_brick_status.py @@ -0,0 +1,45 @@ +#!/usr/bin/python +# Copyright (C) 2011 Gluster, Inc. <http://www.gluster.com> +# This file is part of Gluster Management Console. +# + +import os +import sys +import Utils +from XmlHandler import ResponseXml + +def main(): + if len(sys.argv) != 3: + sys.stderr.write("usage: %s VOLUME_NAME BRICK_NAME\n" % os.path.basename(sys.argv[0])) + sys.exit(-1) + + volumeName = sys.argv[1] + brickName = sys.argv[2] + pidFile = "/etc/glusterd/vols/%s/run/%s.pid" % (volumeName, brickName.replace(":", "-").replace("/", "-")) + + responseDom = ResponseXml() + responseDom.appendTagRoute("volumeName", volumeName) + responseDom.appendTagRoute("brickName", brickName) + if not os.path.exists(pidFile): + responseDom.appendTagRoute("brickStatus", "OFFLINE") + else: + try: + fp = open(pidFile) + pidString = fp.readline() + fp.close() + os.getpgid(int(pidString)) + responseDom.appendTagRoute("brickStatus", "ONLINE") + except IOError, e: + Utils.log("failed to open file %s: %s" % (pidFile, str(e))) + responseDom.appendTagRoute("brickStatus", "UNKNOWN") + except ValueError, e: + Utils.log("invalid pid %s in file %s: %s" % (pidString, pidFile, str(e))) + responseDom.appendTagRoute("brickStatus", "UNKNOWN") + except OSError, e: + #Utils.log("failed to get process detail of pid %s: %s" % (pidString, str(e))) + responseDom.appendTagRoute("brickStatus", "OFFLINE") + print responseDom.toxml() + sys.exit(0) + +if __name__ == "__main__": + main() diff --git a/src/com.gluster.storage.management.server.scripts/src/get_server_status.py b/src/com.gluster.storage.management.server.scripts/src/get_server_status.py new file mode 100755 index 00000000..4e089b4b --- /dev/null +++ b/src/com.gluster.storage.management.server.scripts/src/get_server_status.py @@ -0,0 +1,25 @@ +#!/usr/bin/python +# Copyright (C) 2011 Gluster, Inc. <http://www.gluster.com> +# This file is part of Gluster Management Console. +# + +import os +import sys +import Utils +from XmlHandler import ResponseXml + +def main(): + if len(sys.argv) != 1: + sys.stderr.write("usage: %s\n" % os.path.basename(sys.argv[0])) + sys.exit(-1) + + responseDom = ResponseXml() + if Utils.runCommand("pidof glusterd") == 0: + responseDom.appendTagRoute("serverStatus", "ONLINE") + else: + responseDom.appendTagRoute("serverStatus", "OFFLINE") + print responseDom.toxml() + sys.exit(0) + +if __name__ == "__main__": + main() diff --git a/src/com.gluster.storage.management.server.scripts/src/gluster_provision_block_wrapper.py b/src/com.gluster.storage.management.server.scripts/src/gluster_provision_block_wrapper.py index 89d7df38..a3b2776d 100755 --- a/src/com.gluster.storage.management.server.scripts/src/gluster_provision_block_wrapper.py +++ b/src/com.gluster.storage.management.server.scripts/src/gluster_provision_block_wrapper.py @@ -89,26 +89,15 @@ def main(): writeStatus(deviceFormatStatusFile, "Device format failed\n") sys.exit(5) - ## try: - ## process = subprocess.Popen(command, - ## stdout=fptr, - ## stderr=subprocess.PIPE, - ## stdin=subprocess.PIPE, - ## close_fds=True) - ## status = process.wait() - ## except OSError: - ## os.unlink(deviceFormatOutputFile) - ## Utils.log(syslog.LOG_ERR, "formatting disk command failed. command: %s" % str(command)) - ## writeStatus(deviceFormatStatusFile, "Formatting disk command failed\n") - ## removeLockFile() - ## sys.exit(-5) - if status != 0: Utils.removeFile(deviceFormatOutputFile) Utils.removeFile(deviceFormatLockFile) writeStatus(deviceFormatStatusFile, "Device format failed\n") sys.exit(6) + if Utils.runCommand("/sbin/udevtrigger") != 0: + Utils.log("failed running /sbin/udevtrigger") + if Utils.runCommand("/usr/bin/lshal") != 0: Utils.log("failed running /usr/bin/lshal") writeStatus(deviceFormatStatusFile, "Completed\n") diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/ClustersResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/ClustersResource.java index 431de952..45125513 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/ClustersResource.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/ClustersResource.java @@ -37,8 +37,10 @@ import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; +import org.apache.log4j.Logger; import org.springframework.stereotype.Component; +import com.gluster.storage.management.core.exceptions.GlusterValidationException; import com.gluster.storage.management.core.response.ClusterNameListResponse; import com.gluster.storage.management.server.data.ClusterInfo; import com.gluster.storage.management.server.services.ClusterService; @@ -54,6 +56,7 @@ import com.sun.jersey.spi.resource.Singleton; public class ClustersResource extends AbstractResource { @InjectParam private ClusterService clusterService; + private static final Logger logger = Logger.getLogger(ClustersResource.class); @GET @Produces(MediaType.APPLICATION_XML) @@ -69,73 +72,55 @@ public class ClustersResource extends AbstractResource { @POST public Response createCluster(@FormParam(FORM_PARAM_CLUSTER_NAME) String clusterName) { if(clusterName == null || clusterName.isEmpty()) { - return badRequestResponse("Parameter [" + FORM_PARAM_CLUSTER_NAME + "] is missing in request!"); + throw new GlusterValidationException("Parameter [" + FORM_PARAM_CLUSTER_NAME + "] is missing in request!"); } if(clusterService.getCluster(clusterName) != null) { - return badRequestResponse("Cluster [" + clusterName + "] already exists!"); + throw new GlusterValidationException("Cluster [" + clusterName + "] already exists!"); } - try { - clusterService.createCluster(clusterName); - return createdResponse(clusterName); - } catch (Exception e) { - // TODO: Log the exception - return errorResponse("Exception while trying to save cluster [" + clusterName + "]: [" + e.getMessage() - + "]"); - } + clusterService.createCluster(clusterName); + return createdResponse(clusterName); } @PUT public Response registerCluster(@FormParam(FORM_PARAM_CLUSTER_NAME) String clusterName, @FormParam(FORM_PARAM_SERVER_NAME) String knownServer) { if(clusterName == null || clusterName.isEmpty()) { - return badRequestResponse("Parameter [" + FORM_PARAM_CLUSTER_NAME + "] is missing in request!"); + throw new GlusterValidationException("Parameter [" + FORM_PARAM_CLUSTER_NAME + "] is missing in request!"); } if(knownServer == null || knownServer.isEmpty()) { - return badRequestResponse("Parameter [" + FORM_PARAM_SERVER_NAME + "] is missing in request!"); + throw new GlusterValidationException("Parameter [" + FORM_PARAM_SERVER_NAME + "] is missing in request!"); } if(clusterService.getCluster(clusterName) != null) { - return badRequestResponse("Cluster [" + clusterName + "] already exists!"); + throw new GlusterValidationException("Cluster [" + clusterName + "] already exists!"); } ClusterInfo mappedCluster = clusterService.getClusterForServer(knownServer); if(mappedCluster != null) { - return badRequestResponse("Server [" + knownServer + "] is already present in cluster [" + throw new GlusterValidationException("Server [" + knownServer + "] is already present in cluster [" + mappedCluster.getName() + "]!"); } - try { - clusterService.registerCluster(clusterName, knownServer); - return noContentResponse(clusterName); - } catch(Exception e) { - // TODO: Log the exception - return errorResponse("Exception while trying to register cluster [" + clusterName + "] using server [" - + knownServer + "]: [" + e.getMessage() + "]"); - } + clusterService.registerCluster(clusterName, knownServer); + return noContentResponse(clusterName); } @Path("{" + PATH_PARAM_CLUSTER_NAME + "}") @DELETE public Response unregisterCluster(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName) { if(clusterName == null || clusterName.isEmpty()) { - return badRequestResponse("Parameter [" + FORM_PARAM_CLUSTER_NAME + "] is missing in request!"); + throw new GlusterValidationException("Parameter [" + FORM_PARAM_CLUSTER_NAME + "] is missing in request!"); } ClusterInfo cluster = clusterService.getCluster(clusterName); if(cluster == null) { - return badRequestResponse("Cluster [" + clusterName + "] does not exist!"); + throw new GlusterValidationException("Cluster [" + clusterName + "] does not exist!"); } - try { - clusterService.unregisterCluster(cluster); - return noContentResponse(); - } catch (Exception e) { - // TODO: Log the exception - return errorResponse("Exception while trying to unregister cluster [" + clusterName + "]: [" - + e.getMessage() + "]"); - } + clusterService.unregisterCluster(cluster); + return noContentResponse(); } } diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/GlusterServersResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/GlusterServersResource.java index 09391841..271161b9 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/GlusterServersResource.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/GlusterServersResource.java @@ -31,8 +31,8 @@ import static com.gluster.storage.management.core.constants.RESTConstants.RESOUR import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_STATISTICS; import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_TASKS; import static com.gluster.storage.management.core.constants.RESTConstants.STATISTICS_TYPE_CPU; -import static com.gluster.storage.management.core.constants.RESTConstants.STATISTICS_TYPE_NETWORK; import static com.gluster.storage.management.core.constants.RESTConstants.STATISTICS_TYPE_MEMORY; +import static com.gluster.storage.management.core.constants.RESTConstants.STATISTICS_TYPE_NETWORK; import java.util.ArrayList; import java.util.List; @@ -56,9 +56,9 @@ import com.gluster.storage.management.core.constants.CoreConstants; import com.gluster.storage.management.core.constants.RESTConstants; import com.gluster.storage.management.core.exceptions.ConnectionException; import com.gluster.storage.management.core.exceptions.GlusterRuntimeException; -import com.gluster.storage.management.core.model.ServerStats; import com.gluster.storage.management.core.model.GlusterServer; import com.gluster.storage.management.core.model.GlusterServer.SERVER_STATUS; +import com.gluster.storage.management.core.model.TaskStatus; import com.gluster.storage.management.core.response.GlusterServerListResponse; import com.gluster.storage.management.core.response.ServerNameListResponse; import com.gluster.storage.management.server.data.ClusterInfo; @@ -455,6 +455,9 @@ public class GlusterServersResource extends AbstractServersResource { InitializeDiskTask initializeTask = new InitializeDiskTask(clusterService, clusterName, serverName, diskName, fsType); try { initializeTask.start(); + // Check the initialize disk status + TaskStatus taskStatus = initializeTask.checkStatus(); + initializeTask.getTaskInfo().setStatus(taskStatus); taskResource.addTask(initializeTask); return acceptedResponse(RESTConstants.RESOURCE_PATH_CLUSTERS + "/" + clusterName + "/" + RESOURCE_TASKS + "/" diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/TasksResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/TasksResource.java index b455a255..0fa49dc3 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/TasksResource.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/TasksResource.java @@ -122,8 +122,8 @@ public class TasksResource extends AbstractResource { private Task checkTaskStatus(String taskId) { Task task = getTask(taskId); // No status check required if the task already complete or failure - if (task.getTaskInfo().getStatus() == Status.STATUS_FAILURE - || task.getTaskInfo().getStatus() == Status.STATUS_SUCCESS) { + if (task.getTaskInfo().getStatus().getCode() == Status.STATUS_CODE_FAILURE + || task.getTaskInfo().getStatus().getCode() == Status.STATUS_CODE_SUCCESS) { return task; } task.getTaskInfo().setStatus(task.checkStatus()); diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/services/ClusterService.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/services/ClusterService.java index b622c3a1..59cb185b 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/services/ClusterService.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/services/ClusterService.java @@ -29,6 +29,7 @@ import javax.persistence.EntityTransaction; import javax.ws.rs.FormParam; import javax.ws.rs.PathParam; +import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -67,6 +68,8 @@ public class ClusterService { private LRUCache<String, GlusterServer> onlineServerCache = new LRUCache<String, GlusterServer>(3); + private static final Logger logger = Logger.getLogger(ClusterService.class); + public void addOnlineServer(String clusterName, GlusterServer server) { onlineServerCache.put(clusterName, server); } @@ -142,7 +145,7 @@ public class ClusterService { return servers.get(0).getCluster(); } - public void createCluster(@FormParam(FORM_PARAM_CLUSTER_NAME) String clusterName) { + public void createCluster(String clusterName) { EntityTransaction txn = clusterDao.startTransaction(); ClusterInfo cluster = new ClusterInfo(); cluster.setName(clusterName); @@ -152,12 +155,12 @@ public class ClusterService { txn.commit(); } catch (RuntimeException e) { txn.rollback(); + logger.error("Exception while trying to save cluster [" + clusterName + "] : [" + e.getMessage() + "]", e); throw e; } } - public void registerCluster(@FormParam(FORM_PARAM_CLUSTER_NAME) String clusterName, - @FormParam(FORM_PARAM_SERVER_NAME) String knownServer) { + public void registerCluster(String clusterName, String knownServer) { EntityTransaction txn = clusterDao.startTransaction(); ClusterInfo cluster = new ClusterInfo(); cluster.setName(clusterName); @@ -180,7 +183,9 @@ public class ClusterService { clusterDao.save(cluster); txn.commit(); } catch(RuntimeException e) { + logger.error("Error in registering cluster [" + clusterName + "] : " + e.getMessage(), e); txn.rollback(); + logger.error("Error in registering cluster [" + clusterName + "] : " + e.getMessage(), e); throw e; } } @@ -203,7 +208,7 @@ public class ClusterService { sshUtil.installPublicKey(serverName); } - public void unregisterCluster(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName) { + public void unregisterCluster(String clusterName) { ClusterInfo cluster = getCluster(clusterName); if (cluster == null) { @@ -216,9 +221,15 @@ public class ClusterService { public void unregisterCluster(ClusterInfo cluster) { EntityTransaction txn = clusterDao.startTransaction(); try { + for(ServerInfo server : cluster.getServers()) { + clusterDao.delete(server); + } + cluster.getServers().clear(); + clusterDao.update(cluster); clusterDao.delete(cluster); txn.commit(); } catch (RuntimeException e) { + logger.error("Error in unregistering cluster [" + cluster.getName() + "] : " + e.getMessage(), e); txn.rollback(); throw e; } diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/InitializeDiskTask.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/InitializeDiskTask.java index 2fe2373b..4f168d66 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/InitializeDiskTask.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/InitializeDiskTask.java @@ -53,6 +53,7 @@ public class InitializeDiskTask extends Task { setServerName(serverName); setDiskName(diskName); setFsType(fsType); + taskInfo.setName(getId()); init(); } @@ -134,7 +135,7 @@ public class InitializeDiskTask extends Task { public TaskStatus checkStatus() { try { - return glusterUtil.checkInitializeDiskStatus(serverName, getDiskName()); + return glusterUtil.getInitializingDeviceStatus(serverName, getDiskName()); } catch(ConnectionException e) { // online server might have gone offline. update the failure status return new TaskStatus(new Status(Status.STATUS_CODE_FAILURE, e.getMessage())); diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java index a32c4f18..9878f223 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java @@ -578,7 +578,7 @@ public class GlusterUtil { } } - public TaskStatus checkInitializeDiskStatus(String serverName, String diskName) { + public TaskStatus getInitializingDeviceStatus(String serverName, String diskName) { Object response = serverUtil.executeOnServer(true, serverName, INITIALIZE_DISK_STATUS_SCRIPT + " " + diskName, InitDiskStatusResponse.class); @@ -597,8 +597,10 @@ public class GlusterUtil { taskStatus.setCode(Status.STATUS_CODE_RUNNING); taskStatus.setPercentCompleted(Math.round(initDiskStatusResponse.getCompletedBlocks() / initDiskStatusResponse.getTotalBlocks() * 100)); + } else if(initDiskStatusResponse.getFormatStatus() == FORMAT_STATUS.NOT_RUNNING) { + taskStatus.setCode(Status.STATUS_CODE_FAILURE); } - + taskStatus.setMessage(initDiskStatusResponse.getMessage()); return taskStatus; } diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java index 55be59b4..775ca221 100644 --- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java +++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java @@ -21,6 +21,7 @@ package com.gluster.storage.management.server.utils; import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.util.ArrayList; import java.util.Collection; import java.util.Date; @@ -29,6 +30,7 @@ import java.util.List; import javax.servlet.ServletContext; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; +import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; import org.apache.log4j.Logger; @@ -225,7 +227,7 @@ public class ServerUtil { } public ServerStats fetchCPUUsageData(String serverName) { - String cpuUsageData = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?> <xport> <meta> <start>1310468100</start> <step>300</step> <end>1310471700</end> <rows>13</rows> <columns>3</columns> <legend> <entry>user</entry> <entry>system</entry> <entry>total</entry> </legend> </meta> <data> <row><t>1310468100</t><v>NaN</v><v>4.3747778209e-01</v><v>6.6128073384e-01</v></row> <row><t>1310468400</t><v>2.3387347338e-01</v><v>4.4642717442e-01</v><v>6.8030064780e-01</v></row> <row><t>1310468700</t><v>5.5043873220e+00</v><v>6.2462376636e+00</v><v>1.1750624986e+01</v></row> <row><t>1310469000</t><v>2.4350593653e+01</v><v>2.6214585217e+01</v><v>5.0565178869e+01</v></row> <row><t>1310469300</t><v>4.0786489953e+01</v><v>4.6784713828e+01</v><v>8.7571203781e+01</v></row> <row><t>1310469600</t><v>4.1459955508e+01</v><v>5.2546309044e+01</v><v>9.4006264551e+01</v></row> <row><t>1310469900</t><v>4.2312286165e+01</v><v>5.2390588332e+01</v><v>9.4702874497e+01</v></row> <row><t>1310470200</t><v>4.2603794982e+01</v><v>5.1598861493e+01</v><v>9.4202656475e+01</v></row> <row><t>1310470500</t><v>3.8238751290e+01</v><v>4.5312089966e+01</v><v>8.3550841256e+01</v></row> <row><t>1310470800</t><v>1.7949961224e+01</v><v>2.1282058418e+01</v><v>3.9232019642e+01</v></row> <row><t>1310471100</t><v>1.2330371421e-01</v><v>4.6347832868e-01</v><v>5.8678204289e-01</v></row> <row><t>1310471400</t><v>1.6313260492e-01</v><v>5.4088119561e-01</v><v>7.0401380052e-01</v></row> <row><t>1310471700</t><v>NaN</v><v>NaN</v><v>NaN</v></row> </data> </xport>"; + String cpuUsageData = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?> <xport> <meta> <start>1310468100</start> <step>300</step> <end>1310471700</end> <rows>13</rows> <columns>3</columns> <legend> <entry>user</entry> <entry>system</entry> <entry>total</entry> </legend> </meta> <data> <row><t>1310468100</t><v>2.23802952e-1</v><v>4.3747778209e-01</v><v>6.6128073384e-01</v></row> <row><t>1310468400</t><v>2.3387347338e-01</v><v>4.4642717442e-01</v><v>6.8030064780e-01</v></row> <row><t>1310468700</t><v>5.5043873220e+00</v><v>6.2462376636e+00</v><v>1.1750624986e+01</v></row> <row><t>1310469000</t><v>2.4350593653e+01</v><v>2.6214585217e+01</v><v>5.0565178869e+01</v></row> <row><t>1310469300</t><v>4.0786489953e+01</v><v>4.6784713828e+01</v><v>8.7571203781e+01</v></row> <row><t>1310469600</t><v>4.1459955508e+01</v><v>5.2546309044e+01</v><v>9.4006264551e+01</v></row> <row><t>1310469900</t><v>4.2312286165e+01</v><v>5.2390588332e+01</v><v>9.4702874497e+01</v></row> <row><t>1310470200</t><v>4.2603794982e+01</v><v>5.1598861493e+01</v><v>9.4202656475e+01</v></row> <row><t>1310470500</t><v>3.8238751290e+01</v><v>4.5312089966e+01</v><v>8.3550841256e+01</v></row> <row><t>1310470800</t><v>1.7949961224e+01</v><v>2.1282058418e+01</v><v>3.9232019642e+01</v></row> <row><t>1310471100</t><v>1.2330371421e-01</v><v>4.6347832868e-01</v><v>5.8678204289e-01</v></row> <row><t>1310471400</t><v>1.6313260492e-01</v><v>5.4088119561e-01</v><v>7.0401380052e-01</v></row> <row><t>1310471700</t><v>NaN</v><v>NaN</v><v>NaN</v></row> </data> </xport>"; Object output = unmarshal(ServerStats.class, cpuUsageData, false); if(output instanceof Status) { throw new GlusterRuntimeException(((Status)output).toString()); @@ -240,6 +242,7 @@ public class ServerUtil { if(removeOnlineServer) { serverNames.remove(serverName); } + return stats; } catch(Exception e) { // server might be offline - continue with next one logger.warn("Couldn't fetch CPU stats from server [" + serverName + "]!", e); @@ -252,7 +255,7 @@ public class ServerUtil { throw new GlusterRuntimeException("All servers offline!"); } - public Object fetchAggregatedCPUStats(List<String> serverNames) { + public ServerStats fetchAggregatedCPUStats(List<String> serverNames) { if(serverNames == null || serverNames.size() == 0) { throw new GlusterRuntimeException("No server names passed to fetchAggregaredCPUUsageData!"); } @@ -265,21 +268,29 @@ public class ServerUtil { } private void aggregateCPUStats(List<String> serverNames, ServerStats aggregatedStats) { - int[][] dataCount = new int[aggregatedStats.getMetadata().getRowCount()][aggregatedStats.getMetadata() - .getLegend().size()]; + if(serverNames.isEmpty()) { + return; + } + + int rowCount = aggregatedStats.getMetadata().getRowCount(); + int columnCount = aggregatedStats.getMetadata().getLegend().size(); + int[][] dataCount = initDataCountArray(rowCount, columnCount); for (String serverName : serverNames) { - ServerStats serverStats; try { - serverStats = fetchCPUUsageData(serverName); + // fetch the stats and add to aggregated stats + addServerStats(fetchCPUUsageData(serverName), aggregatedStats, dataCount); } catch(Exception e) { // server might be offline - continue with next one logger.warn("Couldn't fetch CPU stats from server [" + serverName + "]!", e); continue; } - List<ServerStatsRow> serverStatsRows = addServerStats(serverStats, aggregatedStats, dataCount); } + averageAggregatedStats(aggregatedStats, dataCount); + } + + private void averageAggregatedStats(ServerStats aggregatedStats, int[][] dataCount) { List<ServerStatsRow> rows = aggregatedStats.getRows(); for(int rowNum = 0; rowNum < rows.size(); rowNum++) { List<Double> data = rows.get(rowNum).getUsageData(); @@ -289,6 +300,17 @@ public class ServerUtil { } } + private int[][] initDataCountArray(int rowCount, int columnCount) { + int[][] dataCount = new int[rowCount][columnCount]; + // initialize all data counts to 1 + for(int rowNum = 0; rowNum < rowCount; rowNum++) { + for(int columnNum = 0; columnNum < columnCount; columnNum++) { + dataCount[rowNum][columnNum] = 1; + } + } + return dataCount; + } + /** * * @param statsToBeAdded @@ -320,6 +342,22 @@ public class ServerUtil { public static void main(String[] args) { ServerStats stats = new ServerUtil().fetchCPUUsageData("s1"); - System.out.println(stats.getMetadata().getLegend()); + for(ServerStatsRow row : stats.getRows()) { + System.out.println(row.getUsageData().get(2)); + } + JAXBContext context; + try { + context = JAXBContext.newInstance(ServerStats.class); + Marshaller m = context.createMarshaller(); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + m.marshal(stats, out); + ServerStats stats1 = (ServerStats)new ServerUtil().unmarshal(ServerStats.class, out.toString(), false); + for(ServerStatsRow row : stats1.getRows()) { + System.out.println(row.getUsageData().get(2)); + } + } catch (JAXBException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } } } diff --git a/src/com.gluster.storage.management.server/src/spring/gluster-server-security.xml b/src/com.gluster.storage.management.server/src/spring/gluster-server-security.xml index 6f3ad72f..abcd8c05 100644 --- a/src/com.gluster.storage.management.server/src/spring/gluster-server-security.xml +++ b/src/com.gluster.storage.management.server/src/spring/gluster-server-security.xml @@ -11,16 +11,13 @@ "> <http auto-config="true" use-expressions="true"> - <!-- intercept-url pattern="/1.0/*" - access="hasRole('ROLE_ADMIN') and fullyAuthenticated" /> - <intercept-url pattern="/*" access="permitAll" /--> - <!-- SSL Protection --> - <intercept-url pattern="/*" access="hasRole('ROLE_ADMIN') and fullyAuthenticated" requires-channel="https" /> - <!-- intercept-url pattern="/*" access="permitAll" requires-channel="any" /--> - <port-mappings> - <port-mapping http="8080" https="8443" /> - </port-mappings> + <intercept-url pattern="/1.0/**" access="hasRole('ROLE_ADMIN') and fullyAuthenticated" requires-channel="https" /> + <intercept-url pattern="*.jnlp" access="hasRole('ROLE_ADMIN') and fullyAuthenticated" requires-channel="any" /> + <!-- intercept-url pattern="/*" access="permitAll" requires-channel="any" / --> + <port-mappings> + <port-mapping http="8080" https="8443" /> + </port-mappings> <!-- HTTP basic authentication --> <http-basic /> |
