summaryrefslogtreecommitdiffstats
path: root/api
Commit message (Expand)AuthorAgeFilesLines
* gfapi.py: support dynamic loading of versioned librariesNiels de Vos2013-10-024-11/+45
* core: block unused signals in created threadsAnand Avati2013-09-251-1/+1
* logging: Expose set_log_file_path() in libglusterfs.Vijay Bellur2013-09-242-7/+17
* gfapi: implement a minimial glfs_fini()Anand Avati2013-09-172-4/+74
* gfapi: use native STACK_WIND for read _async() callsAnand Avati2013-09-171-10/+81
* gfapi: store the open/create flags in fd_t objectPoornima2013-09-062-0/+3
* gfapi: apply an upper bound on nested symlink resolutionAnand Avati2013-09-052-1/+13
* glusterfs, gfapi: fix symbol clashAnand Avati2013-09-051-2/+2
* api: Add null check for active_subvol in glfs_close.Raghavendra Talur2013-08-291-0/+5
* api: Fill loc.path and loc.gfid before syncop_open.Raghavendra Talur2013-08-291-0/+9
* synctask: minor enhancementsAnand Avati2013-08-281-1/+1
* api: Set errno before invoking glfs_init_done()Vijay Bellur2013-08-251-4/+11
* gfapi: Add description of glfs_io_cbk function as a commentAnand Avati2013-08-231-0/+23
* libgfapi : Fix for hardlink creation on SMB mountAnand Avati2013-08-131-0/+9
* log: set ident to openlogBala.FA2013-08-131-1/+2
* Fix broken parallel installTiziano Müller2013-07-311-0/+4
* gfapi: perform open() on pre-existing inode in glfs_creat()Anand Avati2013-07-311-3/+7
* gfapi: fix glfs_readlink()Anand Avati2013-07-311-1/+6
* api: Avoid a NULL deref in glfs_open().Vijay Bellur2013-07-301-1/+1
* gfapi: handle failures in graph switchesAnand Avati2013-07-281-0/+3
* gfapi: fix for not able to rename foldersRaghavendra Talur2013-07-161-8/+11
* gfapi: fix read past EOF in glfs_preadv()Anand Avati2013-06-201-3/+4
* gfapi: async discard supportBrian Foster2013-06-132-0/+38
* glusterfs: discard (hole punch) supportBrian Foster2013-06-133-2/+43
* gluster: add fallocate fop supportBrian Foster2013-06-133-0/+50
* api: Fix api.so and libgfapi.so build time dependencyAnand Avati2013-05-301-2/+1
* gfapi: add new API glfs_dup() to copy a file descriptorAnand Avati2013-05-292-0/+43
* api/Makefile: link api.so against libgfapi (and dependencies)Anand Avati2013-05-291-1/+6
* gfapi: handle graph switch (cwd, fds, locks)Anand Avati2013-05-285-132/+944
* gfapi: ignore NULL and -1 parameters in glfs_set_logging()Anand Avati2013-05-251-5/+8
* gfapi: provide stable st_dev in stat structureAnand Avati2013-05-253-4/+16
* gfapi: link inodes in relevant entry FOPsAnand Avati2013-05-251-4/+69
* gfapi: optimistic resolution with ESTALE detectionAnand Avati2013-05-253-60/+248
* gfapi: add new API glfs_set_xlator_option()Anand Avati2013-05-023-1/+45
* gfapi: POSIX locking supportAnand Avati2013-04-243-0/+53
* gfapi: implement readdirplus_r supportAnand Avati2013-04-242-8/+26
* gfapi: handle root (/) resolution gracefully for realpath()Anand Avati2013-04-231-1/+4
* gfapi: support for chdir() and familyAnand Avati2013-04-196-10/+302
* gfapi: dict_unref() xattr_req in fop finish instead of dict_destroy()Anand Avati2013-03-072-5/+5
* Better mechanism to handle memory accountingVijay Bellur2013-02-171-0/+2
* Use proper libtool option -avoid-version instead of bogus -avoidversionAnand Avati2013-02-071-1/+1
* glusterd,glusterfsd,libgfapi: Client op-versionKaushal M2013-02-061-1/+40
* gfapi: Mark fs->init status done in glfs_init_done for the case of glfs_init_...Mohammed Junaid2013-02-031-4/+15
* core: fixes for gcc's '-pedantic' flag buildAvra Sengupta2013-01-211-6/+3
* core: remove all the 'inner' functions in codebaseAmar Tumballi2012-12-191-22/+2
* api: update Python wrapperJeff Darcy2012-12-191-24/+395
* libgfapi: "tcp" is documented as the valid transport type instead of "socket".Avra Sengupta2012-11-283-5/+5
* api/examples: updated examples to use new callsAnand Avati2012-11-051-0/+87
* gfapi: added more API callsAnand Avati2012-10-083-2/+1416
* glfs-resolve: fix resolution of "/"Anand Avati2012-10-031-2/+27
> -rw-r--r--src/com.gluster.storage.management.gateway.scripts/src/ServerUtils.py308
-rw-r--r--src/com.gluster.storage.management.gateway.scripts/src/Utils.py1066
-rw-r--r--src/com.gluster.storage.management.gateway.scripts/src/VolumeUtils.py612
-rw-r--r--src/com.gluster.storage.management.gateway.scripts/src/XmlHandler.py346
-rwxr-xr-xsrc/com.gluster.storage.management.gateway.scripts/src/add_user_cifs.py37
-rwxr-xr-xsrc/com.gluster.storage.management.gateway.scripts/src/clear_volume_directory.py46
-rwxr-xr-xsrc/com.gluster.storage.management.gateway.scripts/src/create_volume_cifs.py33
-rwxr-xr-xsrc/com.gluster.storage.management.gateway.scripts/src/create_volume_directory.py82
-rwxr-xr-xsrc/com.gluster.storage.management.gateway.scripts/src/delete_user_cifs.py24
-rwxr-xr-xsrc/com.gluster.storage.management.gateway.scripts/src/delete_volume_cifs.py32
-rwxr-xr-xsrc/com.gluster.storage.management.gateway.scripts/src/disable-ssh-password-auth.sh30
-rwxr-xr-xsrc/com.gluster.storage.management.gateway.scripts/src/format_device.py87
-rwxr-xr-xsrc/com.gluster.storage.management.gateway.scripts/src/get_brick_status.py40
-rwxr-xr-xsrc/com.gluster.storage.management.gateway.scripts/src/get_disk_mount_point.py62
-rwxr-xr-xsrc/com.gluster.storage.management.gateway.scripts/src/get_disk_name_by_path.py68
-rwxr-xr-xsrc/com.gluster.storage.management.gateway.scripts/src/get_file.py130
-rwxr-xr-xsrc/com.gluster.storage.management.gateway.scripts/src/get_rrd_cpu_details.py55
-rwxr-xr-xsrc/com.gluster.storage.management.gateway.scripts/src/get_rrd_memory_details.py89
-rwxr-xr-xsrc/com.gluster.storage.management.gateway.scripts/src/get_rrd_net_details.py52
-rwxr-xr-xsrc/com.gluster.storage.management.gateway.scripts/src/get_server_details.py118
-rwxr-xr-xsrc/com.gluster.storage.management.gateway.scripts/src/get_server_status.py22
-rwxr-xr-xsrc/com.gluster.storage.management.gateway.scripts/src/get_volume_log.py131
-rwxr-xr-xsrc/com.gluster.storage.management.gateway.scripts/src/gluster_provision_block_wrapper.py109
-rwxr-xr-xsrc/com.gluster.storage.management.gateway.scripts/src/modify_volume_cifs.py28
-rw-r--r--src/com.gluster.storage.management.gateway.scripts/src/multicast_response.py74
-rwxr-xr-xsrc/com.gluster.storage.management.gateway.scripts/src/rrd_update_cpu_details.py90
-rwxr-xr-xsrc/com.gluster.storage.management.gateway.scripts/src/rrd_update_memory_details.py90
-rwxr-xr-xsrc/com.gluster.storage.management.gateway.scripts/src/setup_cifs_config.py81
-rwxr-xr-xsrc/com.gluster.storage.management.gateway.scripts/src/start_volume_cifs.py41
-rwxr-xr-xsrc/com.gluster.storage.management.gateway.scripts/src/stop_volume_cifs.py38
-rw-r--r--src/com.gluster.storage.management.gateway/.settings/org.eclipse.wst.common.component10
-rw-r--r--src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/plugins/com.gluster.storage.management.client_1.0.0.jarbin513103 -> 0 bytes-rw-r--r--src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/plugins/com.gluster.storage.management.core_1.0.0.jarbin50608 -> 0 bytes-rw-r--r--src/com.gluster.storage.management.gateway/WebContent/index.html8
-rw-r--r--src/com.gluster.storage.management.gateway/WebContent/scripts/Globals.py123
-rw-r--r--src/com.gluster.storage.management.gateway/WebContent/scripts/Protocol.py438
-rw-r--r--src/com.gluster.storage.management.gateway/WebContent/scripts/Utils.py1059
-rwxr-xr-xsrc/com.gluster.storage.management.gateway/WebContent/scripts/add_user_cifs_all.py66
-rwxr-xr-xsrc/com.gluster.storage.management.gateway/WebContent/scripts/delete_user_cifs_all.py53
-rw-r--r--src/com.gluster.storage.management.gateway/WebContent/scripts/gmg-reset-password.sh21
-rwxr-xr-xsrc/com.gluster.storage.management.gateway/WebContent/scripts/grun.py36
-rwxr-xr-xsrc/com.gluster.storage.management.gateway/WebContent/scripts/multicast-discover-servers.py90
-rw-r--r--src/com.gluster.storage.management.gateway/src/META-INF/persistence.xml5
-rw-r--r--src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/constants/VolumeOptionsDefaults.java118
-rw-r--r--src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/data/GlusterDataSource.java48
-rw-r--r--src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/filters/AuditFilter.java43
-rw-r--r--src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/filters/GlusterResourceFilterFactory.java31
-rw-r--r--src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/resources/v1_0/DiscoveredServersResource.java153
-rw-r--r--src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/resources/v1_0/TasksResource.java194
-rw-r--r--src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/resources/v1_0/VolumesResource.java1164
-rw-r--r--src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/security/GlusterUserDetailsService.java31
-rw-r--r--src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/security/UserAuthDao.java63
-rw-r--r--src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/services/GlusterServerService.java165
-rw-r--r--src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/tasks/InitializeDiskTask.java168
-rw-r--r--src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/tasks/MigrateBrickTask.java227
-rw-r--r--src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/tasks/RebalanceVolumeTask.java133
-rw-r--r--src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/utils/CpuStatsFactory.java36
-rw-r--r--src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/utils/GlusterUtil.java662
-rw-r--r--src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/utils/NetworkStatsFactory.java123
-rw-r--r--src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/utils/ServerUtil.java289
-rw-r--r--src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/utils/StatsFactory.java31
-rw-r--r--src/com.gluster.storage.management.gateway/src/log4j.properties20
-rw-r--r--src/com.gluster.storage.management.gui.feature.webstart/build.properties2
-rw-r--r--src/com.gluster.storage.management.gui.feature.webstart/build/gluster.keystorebin2738 -> 0 bytes-rw-r--r--src/com.gluster.storage.management.gui.feature.webstart/rootfiles/index.html8
-rw-r--r--src/com.gluster.storage.management.gui.feature.webstart/rootfiles/splash.jpgbin9195 -> 0 bytes-rw-r--r--src/com.gluster.storage.management.gui.feature/.project17
-rw-r--r--src/com.gluster.storage.management.gui.feature/build.properties1
-rw-r--r--src/com.gluster.storage.management.gui/build.properties15
-rw-r--r--src/com.gluster.storage.management.gui/icons/tango/16x16/arrow-down.pngbin703 -> 0 bytes-rw-r--r--src/com.gluster.storage.management.gui/icons/tango/16x16/arrow-up.pngbin712 -> 0 bytes-rw-r--r--src/com.gluster.storage.management.gui/icons/tango/16x16/pause.pngbin658 -> 0 bytes-rw-r--r--src/com.gluster.storage.management.gui/icons/tango/16x16/running-task.pngbin734 -> 0 bytes-rw-r--r--src/com.gluster.storage.management.gui/icons/tango/16x16/start.pngbin716 -> 0 bytes-rw-r--r--src/com.gluster.storage.management.gui/icons/tango/16x16/stop.pngbin635 -> 0 bytes-rw-r--r--src/com.gluster.storage.management.gui/icons/tango/16x16/task-completed.pngbin748 -> 0 bytes-rw-r--r--src/com.gluster.storage.management.gui/icons/tango/16x16/task-error.pngbin760 -> 0 bytes-rw-r--r--src/com.gluster.storage.management.gui/icons/tango/22x22/offline-brick.pngbin880 -> 0 bytes-rw-r--r--src/com.gluster.storage.management.gui/icons/tango/32x32/volume-create.pngbin1399 -> 0 bytes-rw-r--r--src/com.gluster.storage.management.gui/icons/tango/48x48/volume-create.pngbin2853 -> 0 bytes-rw-r--r--src/com.gluster.storage.management.gui/icons/tango/48x48/volume.pngbin2965 -> 0 bytes-rw-r--r--src/com.gluster.storage.management.gui/icons/tango/scalable/task_running.svg1304
-rw-r--r--src/com.gluster.storage.management.gui/icons/tango/scalable/task_status_completed.svg1587
-rw-r--r--src/com.gluster.storage.management.gui/icons/tango/scalable/task_status_error.svg1945
-rw-r--r--src/com.gluster.storage.management.gui/icons/tango/scalable/task_stopped.svg1667
-rw-r--r--src/com.gluster.storage.management.gui/plugin.xml1560
-rw-r--r--src/com.gluster.storage.management.gui/preferences.ini2
-rw-r--r--src/com.gluster.storage.management.gui/splash.bmpbin377610 -> 0 bytes-rw-r--r--src/com.gluster.storage.management.gui/splash/gluster_about.jpgbin4072 -> 0 bytes-rw-r--r--src/com.gluster.storage.management.gui/splash/splash-dialog.bmpbin312054 -> 0 bytes-rw-r--r--src/com.gluster.storage.management.gui/splash/splash-dialog.pngbin5552 -> 0 bytes-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ICommandIds.java33
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AddServerAction.java126
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ChangePasswordAction.java23
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ClearTaskAction.java46
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/DeleteVolumeAction.java140
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/DownloadVolumeLogsAction.java77
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ExportSshKeysAction.java77
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/IActionConstants.java36
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ImportSshKeysAction.java44
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RebalanceVolumeAction.java72
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RefreshDataAction.java43
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ResumeTaskAction.java45
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ServerAdditionAction.java28
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StartVolumeAction.java131
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StopTaskAction.java46
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StopVolumeAction.java150
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumeWizard.java119
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/InitializeDiskTypeSelection.java148
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateBrickWizard.java94
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/DisksView.java45
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServerLogsView.java59
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/TasksView.java39
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/ViewsManager.java38
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeBricksView.java39
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeLogsView.java35
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeOptionsView.java36
-rw-r--r--src/com.gluster.storage.management.gui/src/test.xml1
-rw-r--r--src/com.gluster.storage.management.releng/build.properties1
-rw-r--r--src/com.gluster.storage.management.releng/com.gluster.storage.management.client.cquery4
-rw-r--r--src/com.gluster.storage.management.releng/com.gluster.storage.management.core.cquery4
-rw-r--r--src/com.gluster.storage.management.releng/com.gluster.storage.management.gateway.cquery4
-rw-r--r--src/com.gluster.storage.management.releng/com.gluster.storage.management.gui.feature.webstart.cquery4
-rw-r--r--src/com.gluster.storage.management.releng/feature.xml20
-rw-r--r--src/com.gluster.storage.management.releng/gluster-management-console.target13
-rw-r--r--src/com.gluster.storage.management.releng/glustermc.rmap12
-rw-r--r--src/com.gluster.storage.management.releng/glustermc_build.properties14
-rw-r--r--src/org.gluster.storage.management.client/.classpath (renamed from src/com.gluster.storage.management.client/.classpath)6
-rw-r--r--src/org.gluster.storage.management.client/.project (renamed from src/com.gluster.storage.management.core/.project)8
-rw-r--r--src/org.gluster.storage.management.client/.settings/org.eclipse.jdt.core.prefs (renamed from src/com.gluster.storage.management.client/.settings/org.eclipse.jdt.core.prefs)0
-rw-r--r--src/org.gluster.storage.management.client/META-INF/MANIFEST.MF (renamed from src/com.gluster.storage.management.client/META-INF/MANIFEST.MF)12
-rw-r--r--src/org.gluster.storage.management.client/build.properties27
-rw-r--r--src/org.gluster.storage.management.client/keystore/gmc-trusted.keystore (renamed from src/com.gluster.storage.management.client/keystore/gmc-trusted.keystore)bin81843 -> 81843 bytes-rw-r--r--src/org.gluster.storage.management.client/lib/jersey-1.5/Jersey-LICENSE.txt135
-rw-r--r--src/org.gluster.storage.management.client/lib/jersey-1.5/Jersey-third-party-license-readme.txt188
-rw-r--r--src/org.gluster.storage.management.client/lib/jersey-1.5/jersey-client-1.5.jar (renamed from src/com.gluster.storage.management.client/lib/jersey-1.5/jersey-client-1.5.jar)bin128096 -> 128096 bytes-rw-r--r--src/org.gluster.storage.management.client/lib/jersey-1.5/jersey-core-1.5.jar (renamed from src/com.gluster.storage.management.client/lib/jersey-1.5/jersey-core-1.5.jar)bin455665 -> 455665 bytes-rw-r--r--src/org.gluster.storage.management.client/lib/jersey-1.5/jersey-multipart-1.5.jar (renamed from src/com.gluster.storage.management.client/lib/jersey-1.5/jersey-multipart-1.5.jar)bin49330 -> 49330 bytes-rw-r--r--src/org.gluster.storage.management.client/src/org/gluster/storage/management/client/AbstractClient.java (renamed from src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java)871
-rw-r--r--src/org.gluster.storage.management.client/src/org/gluster/storage/management/client/ClustersClient.java (renamed from src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/ClustersClient.java)39
-rw-r--r--src/org.gluster.storage.management.client/src/org/gluster/storage/management/client/DiscoveredServersClient.java (renamed from src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/DiscoveredServersClient.java)44
-rw-r--r--src/org.gluster.storage.management.client/src/org/gluster/storage/management/client/GlusterServersClient.java (renamed from src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java)68
-rw-r--r--src/org.gluster.storage.management.client/src/org/gluster/storage/management/client/KeysClient.java (renamed from src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/KeysClient.java)33
-rw-r--r--src/org.gluster.storage.management.client/src/org/gluster/storage/management/client/TasksClient.java (renamed from src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/TasksClient.java)37
-rw-r--r--src/org.gluster.storage.management.client/src/org/gluster/storage/management/client/UsersClient.java (renamed from src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/UsersClient.java)52
-rw-r--r--src/org.gluster.storage.management.client/src/org/gluster/storage/management/client/VolumesClient.java (renamed from src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java)107
-rw-r--r--src/org.gluster.storage.management.client/src/org/gluster/storage/management/client/constants/ClientConstants.java38
-rw-r--r--src/org.gluster.storage.management.client/src/org/gluster/storage/management/client/utils/ClientUtil.java43
-rw-r--r--src/org.gluster.storage.management.console.feature.webstart/.project (renamed from src/com.gluster.storage.management.gui.feature.webstart/.project)2
-rw-r--r--src/org.gluster.storage.management.console.feature.webstart/buckminster.cspex (renamed from src/com.gluster.storage.management.gui.feature.webstart/buckminster.cspex)6
-rw-r--r--src/org.gluster.storage.management.console.feature.webstart/build.properties20
-rw-r--r--src/org.gluster.storage.management.console.feature.webstart/build/glustermc.ant (renamed from src/com.gluster.storage.management.gui.feature.webstart/build/glustermc.ant)17
-rw-r--r--src/org.gluster.storage.management.console.feature.webstart/feature.xml (renamed from src/com.gluster.storage.management.gui.feature.webstart/feature.xml)34
-rw-r--r--src/org.gluster.storage.management.console.feature.webstart/rootfiles/gluster-management-console.jnlp (renamed from src/com.gluster.storage.management.gui.feature.webstart/rootfiles/gluster-management-console.jnlp)22
-rw-r--r--src/org.gluster.storage.management.console.feature.webstart/rootfiles/splash.pngbin0 -> 121581 bytes-rw-r--r--src/org.gluster.storage.management.console.feature/.project (renamed from src/com.gluster.storage.management.releng/.project)2
-rw-r--r--src/org.gluster.storage.management.console.feature/build.properties19
-rw-r--r--src/org.gluster.storage.management.console.feature/feature.xml (renamed from src/com.gluster.storage.management.gui.feature/feature.xml)138
-rw-r--r--src/org.gluster.storage.management.console.help/.project (renamed from src/com.gluster.storage.management.console.help/.project)2
-rw-r--r--src/org.gluster.storage.management.console.help/.settings/org.eclipse.core.resources.prefs8
-rw-r--r--src/org.gluster.storage.management.console.help/.settings/org.eclipse.wst.css.core.prefs4
-rw-r--r--src/org.gluster.storage.management.console.help/META-INF/MANIFEST.MF9
-rw-r--r--src/org.gluster.storage.management.console.help/build.properties26
-rw-r--r--src/org.gluster.storage.management.console.help/html/concepts/about_gmc.html21
-rw-r--r--src/org.gluster.storage.management.console.help/html/concepts/about_gmg.html16
-rw-r--r--src/org.gluster.storage.management.console.help/html/concepts/common_terms.html50
-rw-r--r--src/org.gluster.storage.management.console.help/html/concepts/gluster_fs.html19
-rw-r--r--src/org.gluster.storage.management.console.help/html/concepts/maintopic.html (renamed from src/com.gluster.storage.management.console.help/html/concepts/maintopic.html)0
-rw-r--r--src/org.gluster.storage.management.console.help/html/concepts/subtopic.html (renamed from src/com.gluster.storage.management.console.help/html/concepts/subtopic.html)0
-rw-r--r--src/org.gluster.storage.management.console.help/html/concepts/subtopic2.html (renamed from src/com.gluster.storage.management.console.help/html/concepts/subtopic2.html)0
-rw-r--r--src/org.gluster.storage.management.console.help/html/css/Builder/style.css939
-rw-r--r--src/org.gluster.storage.management.console.help/html/css/builder-gluster/style.css1341
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/ subtopic3.html (renamed from src/com.gluster.storage.management.console.help/html/gettingstarted/subtopic2.html)0
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/access_gmc_jws.html43
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/alerts.html24
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/change_password.html38
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/check_req_client.html27
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/check_req_gmg.html23
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/cifs_service.html42
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/configure_cifs.html15
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/explore_gmc.html30
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/gmc_install_overview.html15
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/gmc_terminal_window.html20
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/gmc_toolbar.html98
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/gmg_install_overview.html15
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/install_gmg.html49
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/install_gmg_backend.html47
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/maintopic (4).html (renamed from src/com.gluster.storage.management.console.help/html/reference/maintopic.html)24
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/maintopic - Copy (3).html13
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/maintopic - Copy (4).html13
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/maintopic - Copy.html13
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/maintopic.html (renamed from src/com.gluster.storage.management.console.help/html/gettingstarted/maintopic.html)24
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/manage_bricks.html19
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/manage_cluster.html30
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/manage_logs.html28
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/manage_servers.html22
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/manage_volumes.html34
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/monitor_resources.html34
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/resetting_pwd.html20
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/security_keys.html32
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/setting_alerts_prefs.html27
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/setting_charts_prefs.html29
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/setting_gluster_prefs.html25
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/setting_preferences.html22
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/setting_terminal_prefs.html26
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/setting_the_gmc.html15
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/subtopic (3) - Copy.html (renamed from src/com.gluster.storage.management.console.help/html/reference/subtopic.html)24
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/subtopic (3).html13
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/subtopic.html (renamed from src/com.gluster.storage.management.console.help/html/tasks/subtopic.html)24
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/subtopic2 (2).html13
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/subtopic2 (3).html13
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/subtopic2.html (renamed from src/com.gluster.storage.management.console.help/html/reference/subtopic2.html)0
-rw-r--r--src/org.gluster.storage.management.console.help/html/gettingstarted/tasks.html17
-rw-r--r--src/org.gluster.storage.management.console.help/html/help_home.html29
-rw-r--r--src/org.gluster.storage.management.console.help/html/images/Delete-brick.pngbin0 -> 125545 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC-Preferences-alerts .jpgbin0 -> 55125 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC-Preferences-charts.jpgbin0 -> 62538 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC-Preferences-gluster .jpgbin0 -> 52380 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_02.jpgbin0 -> 39901 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_03.jpgbin0 -> 14542 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_04.jpgbin0 -> 18303 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_05.jpgbin0 -> 16557 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_06.jpgbin0 -> 16959 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_07.jpgbin0 -> 93914 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_09.jpgbin0 -> 52606 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Add_Brick.jpgbin0 -> 101781 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Add_Brick_confirm.jpgbin0 -> 28654 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Add_Server_Confirm.jpgbin0 -> 18572 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Create_Vol.jpgbin0 -> 40060 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Discovered_Server_Add.jpgbin0 -> 92039 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Display_log_criteria.jpgbin0 -> 333591 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Remove_Brick_confirm.jpgbin0 -> 19105 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Remove_Bricks.jpgbin0 -> 28865 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Remove_Bricks_success.jpgbin0 -> 18917 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Remove_Server.jpgbin0 -> 15948 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Remove_Server_1.jpgbin0 -> 20426 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Select_FS_Type.jpgbin0 -> 19850 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_1.0_create_cluster.jpgbin0 -> 12353 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_1.0_login.jpgbin0 -> 14542 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_1.0_multiple_vols.jpgbin0 -> 12508 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_1.0_multiple_vols_confirm.jpgbin0 -> 11321 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_1.0_register_cluster.jpgbin0 -> 15437 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_1.0_removeBrick_confirm.jpgbin0 -> 29142 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_1.0_select_cluster.jpgbin0 -> 18303 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_1.0_server_add_success.jpgbin0 -> 10640 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_1.0_vol_success.jpgbin0 -> 18866 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_10.jpgbin0 -> 70046 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Add_Brick.jpgbin0 -> 89897 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Add_Brick_confirm.jpgbin0 -> 21385 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Add_Brick_icon.jpgbin0 -> 1536 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Add_Server_Manual.jpgbin0 -> 11525 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Add_brick.jpgbin0 -> 68440 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Add_brick_confirm.jpgbin0 -> 15084 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Alerts.jpgbin0 -> 52402 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Bricks_Tab.jpgbin0 -> 115478 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Change_Password.jpgbin0 -> 22096 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Change_Password_Confirm.jpgbin0 -> 17204 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Charts.jpgbin0 -> 60205 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Clear_task_icon.jpgbin0 -> 1276 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Cluster_Summary.jpgbin0 -> 106434 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Cluster_Summary_tab.jpgbin0 -> 212681 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Cluster_Summary_tab_new.jpgbin0 -> 172135 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Create_Cluster.jpgbin0 -> 19986 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Create_Vol_icon.jpgbin0 -> 1340 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Create_Volume.jpgbin0 -> 63917 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Create_Volume_success.jpgbin0 -> 19385 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Delete_Vol.jpgbin0 -> 26774 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Delete_Vol_Confirm.jpgbin0 -> 17356 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Delete_Vol_multiple.jpgbin0 -> 30788 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Delete_Vol_multiple_success.jpgbin0 -> 19616 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Delete_Vol_success.jpgbin0 -> 18884 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Disk_tab.jpgbin0 -> 224966 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Landing_Page.jpgbin0 -> 163592 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Log_list.jpgbin0 -> 171345 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Login_Change_Pwd.jpgbin0 -> 22584 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Login_Window.jpgbin0 -> 28664 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Migrate_Brick.jpgbin0 -> 107849 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Migrate_Brick_success.jpgbin0 -> 17196 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Preferences_alerts.jpgbin0 -> 55125 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Preferences_charts.jpgbin0 -> 62538 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Preferences_gluster.jpgbin0 -> 51110 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Preferences_terminal.jpgbin0 -> 52304 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Rebalance_icon.jpgbin0 -> 1559 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Refresh.jpgbin0 -> 1572 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Register_Cluster.jpgbin0 -> 21831 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Remove_Brick_Confirm.jpgbin0 -> 19955 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Remove_Brick_icon.jpgbin0 -> 1567 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Remove_Server_icon.jpgbin0 -> 1506 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Remove_server.jpgbin0 -> 20022 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Remove_server_success.jpgbin0 -> 17303 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Select_Cluster.jpgbin0 -> 23467 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Select_Cluster_progess.jpgbin0 -> 19762 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Server_Disk.jpgbin0 -> 222242 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Server_Summ.jpgbin0 -> 165858 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Server_Summary_tab.jpgbin0 -> 100798 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Server_Tab.jpgbin0 -> 109711 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Single_Vol.jpgbin0 -> 13304 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Start_task_icon.jpgbin0 -> 1298 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Stop_Multiple_Vol.jpgbin0 -> 14017 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Stop_Vol.jpgbin0 -> 12503 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Stop_icon.jpgbin0 -> 1103 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Task_tab.jpgbin0 -> 101601 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Terminal_window.jpgbin0 -> 135724 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Toolbar.jpgbin0 -> 15211 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Vol_List.jpgbin0 -> 67235 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Vol_Options.jpgbin0 -> 80035 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Vol_rebalance_success.jpgbin0 -> 12603 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Volume_Options.jpgbin0 -> 135662 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Volume_Summary.jpgbin0 -> 113645 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Volume_Summary_tab.jpgbin0 -> 97314 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Volume_logs.jpgbin0 -> 314494 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Volume_properties.jpgbin0 -> 145098 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_Volumes_tab.jpgbin0 -> 115212 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_add_server_icon.jpgbin0 -> 1391 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_change_pwd.jpgbin0 -> 16076 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_create_vol (2).jpgbin0 -> 44511 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_create_vol.jpgbin0 -> 44511 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_download_log_icon.jpgbin0 -> 1611 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_landing_page.jpgbin0 -> 106427 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_log_criteria.jpgbin0 -> 117809 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_migrate_brick.jpgbin0 -> 60009 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_migrate_brick_icon.jpgbin0 -> 1647 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_pause_icon.jpgbin0 -> 1262 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_pwd_change_success.jpgbin0 -> 11852 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_rebalance_vol.jpgbin0 -> 18396 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_remove_server_confirm.jpgbin0 -> 11560 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_remove_volume_icon.jpgbin0 -> 1517 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_server_summary.jpgbin0 -> 70046 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_setting_icon.jpgbin0 -> 1619 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_settings.jpgbin0 -> 1596 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_start_vol_Multiple.jpgbin0 -> 19551 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_start_vol_icon.jpgbin0 -> 1540 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_start_vol_success.jpgbin0 -> 18795 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_stop_vol_Multiple.jpgbin0 -> 19551 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_stop_vol_icon.jpgbin0 -> 1545 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_terminal_Settings.jpgbin0 -> 34801 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMC_terminal_toolbar.jpgbin0 -> 1371 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GMG_Architecture.jpgbin0 -> 46322 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GlusterFS_3.2_Architecture.jpgbin0 -> 62893 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GlusterFS_3.2_Architecture.pngbin0 -> 133597 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/GlusterMC_Architecture.jpgbin0 -> 69990 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/Migration.pngbin0 -> 126167 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/Preferences-alerts .pngbin0 -> 33540 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/Preferences-charts.pngbin0 -> 43267 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/Preferences-gluster .pngbin0 -> 29612 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/Running tasks & alerts.pngbin0 -> 131944 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/Stop_Vol.jpgbin0 -> 20638 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/Stop_Vol_confirm.jpgbin0 -> 18391 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/Stop_Vol_multiple.jpgbin0 -> 20979 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/Stop_Vol_multiple_confirm.jpgbin0 -> 19308 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/discovered_servers.pngbin0 -> 80490 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/java-web-start.jpgbin0 -> 33899 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/java_web_start.jpgbin0 -> 33899 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/images/login-dialog.pngbin0 -> 67859 bytes-rw-r--r--src/org.gluster.storage.management.console.help/html/reference/maintopic.html13
-rw-r--r--src/org.gluster.storage.management.console.help/html/reference/subtopic.html13
-rw-r--r--src/org.gluster.storage.management.console.help/html/reference/subtopic2.html13
-rw-r--r--src/org.gluster.storage.management.console.help/html/tasks/access_gmc_jws.html32
-rw-r--r--src/org.gluster.storage.management.console.help/html/tasks/add_brick.html34
-rw-r--r--src/org.gluster.storage.management.console.help/html/tasks/add_servers.html31
-rw-r--r--src/org.gluster.storage.management.console.help/html/tasks/configure_gmc.html19
-rw-r--r--src/org.gluster.storage.management.console.help/html/tasks/create_cluster.html25
-rw-r--r--src/org.gluster.storage.management.console.help/html/tasks/create_volume.html47
-rw-r--r--src/org.gluster.storage.management.console.help/html/tasks/delete_brick.html40
-rw-r--r--src/org.gluster.storage.management.console.help/html/tasks/delete_volume.html34
-rw-r--r--src/org.gluster.storage.management.console.help/html/tasks/deploy_gmc_dedicated_host.html36
-rw-r--r--src/org.gluster.storage.management.console.help/html/tasks/display_log.html26
-rw-r--r--src/org.gluster.storage.management.console.help/html/tasks/download_log.html23
-rw-r--r--src/org.gluster.storage.management.console.help/html/tasks/initialize_disk.html25
-rw-r--r--src/org.gluster.storage.management.console.help/html/tasks/logging.html16
-rw-r--r--src/org.gluster.storage.management.console.help/html/tasks/maintopic (3).html13
-rw-r--r--src/org.gluster.storage.management.console.help/html/tasks/maintopic.html (renamed from src/com.gluster.storage.management.console.help/html/tasks/maintopic.html)24
-rw-r--r--src/org.gluster.storage.management.console.help/html/tasks/migrate_brick.html30
-rw-r--r--src/org.gluster.storage.management.console.help/html/tasks/rebalance_vol.html24
-rw-r--r--src/org.gluster.storage.management.console.help/html/tasks/register_cluster.html23
-rw-r--r--src/org.gluster.storage.management.console.help/html/tasks/remove_brick.html38
-rw-r--r--src/org.gluster.storage.management.console.help/html/tasks/remove_server.html27
-rw-r--r--src/org.gluster.storage.management.console.help/html/tasks/select_cluster.html26
-rw-r--r--src/org.gluster.storage.management.console.help/html/tasks/start_vol.html28
-rw-r--r--src/org.gluster.storage.management.console.help/html/tasks/starting_gmc.html15
-rw-r--r--src/org.gluster.storage.management.console.help/html/tasks/stop_vol.html26
-rw-r--r--src/org.gluster.storage.management.console.help/html/tasks/subtopic.html (renamed from src/com.gluster.storage.management.console.help/html/gettingstarted/subtopic.html)24
-rw-r--r--src/org.gluster.storage.management.console.help/html/tasks/subtopic2 (3).html13
-rw-r--r--src/org.gluster.storage.management.console.help/html/tasks/subtopic2.html (renamed from src/com.gluster.storage.management.console.help/html/tasks/subtopic2.html)24
-rw-r--r--src/org.gluster.storage.management.console.help/html/tasks/subtopic3.html13
-rw-r--r--src/org.gluster.storage.management.console.help/html/tasks/subtopic4.html13
-rw-r--r--src/org.gluster.storage.management.console.help/html/tasks/subtopic5.html13
-rw-r--r--src/org.gluster.storage.management.console.help/html/tasks/subtopic6.html13
-rw-r--r--src/org.gluster.storage.management.console.help/html/tasks/tune_vol_opt.html24
-rw-r--r--src/org.gluster.storage.management.console.help/html/tasks/volumes.html38
-rw-r--r--src/org.gluster.storage.management.console.help/html/toc.html15
-rw-r--r--src/org.gluster.storage.management.console.help/plugin.xml45
-rw-r--r--src/org.gluster.storage.management.console.help/toc.xml32
-rw-r--r--src/org.gluster.storage.management.console.help/tocconcepts.xml30
-rw-r--r--src/org.gluster.storage.management.console.help/tocgettingstarted.xml62
-rw-r--r--src/org.gluster.storage.management.console.help/tocreference.xml29
-rw-r--r--src/org.gluster.storage.management.console.help/toctasks.xml58
-rw-r--r--src/org.gluster.storage.management.console/.classpath (renamed from src/com.gluster.storage.management.gui/.classpath)0
-rw-r--r--src/org.gluster.storage.management.console/.project (renamed from src/com.gluster.storage.management.client/.project)8
-rw-r--r--src/org.gluster.storage.management.console/.settings/org.eclipse.jdt.core.prefs (renamed from src/com.gluster.storage.management.gui/.settings/org.eclipse.jdt.core.prefs)0
-rw-r--r--src/org.gluster.storage.management.console/META-INF/MANIFEST.MF (renamed from src/com.gluster.storage.management.gui/META-INF/MANIFEST.MF)16
-rw-r--r--src/org.gluster.storage.management.console/buckminster.cspex30
-rw-r--r--src/org.gluster.storage.management.console/build.properties32
-rw-r--r--src/org.gluster.storage.management.console/build/glustermc.ant25
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/16x16/arrow-down.pngbin0 -> 683 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/16x16/arrow-up.pngbin0 -> 652 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/16x16/bricks.png (renamed from src/com.gluster.storage.management.gui/icons/tango/16x16/bricks.png)bin807 -> 807 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/16x16/close_task.png (renamed from src/com.gluster.storage.management.gui/icons/tango/16x16/close_task.png)bin588 -> 588 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/16x16/cluster.png (renamed from src/com.gluster.storage.management.gui/icons/tango/16x16/cluster.png)bin622 -> 622 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/16x16/disk-available.png (renamed from src/com.gluster.storage.management.gui/icons/tango/16x16/disk-available.png)bin769 -> 769 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/16x16/disk-error.png (renamed from src/com.gluster.storage.management.gui/icons/tango/16x16/disk-error.png)bin801 -> 801 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/16x16/disk-initialisation.png (renamed from src/com.gluster.storage.management.gui/icons/tango/16x16/disk-initialisation.png)bin817 -> 817 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/16x16/disk-inuse.png (renamed from src/com.gluster.storage.management.gui/icons/tango/16x16/disk-inuse.png)bin798 -> 798 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/16x16/disk-uninitialized.png (renamed from src/com.gluster.storage.management.gui/icons/tango/16x16/disk-uninitialized.png)bin809 -> 809 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/16x16/disk.png (renamed from src/com.gluster.storage.management.gui/icons/tango/16x16/disk.png)bin717 -> 717 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/16x16/error.pngbin0 -> 603 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/16x16/gluster_icon.png (renamed from src/com.gluster.storage.management.gui/icons/tango/16x16/gluster_icon.png)bin3131 -> 3131 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/16x16/help.png (renamed from src/com.gluster.storage.management.gui/icons/tango/16x16/help.png)bin932 -> 932 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/16x16/logs.png (renamed from src/com.gluster.storage.management.gui/icons/tango/16x16/logs.png)bin796 -> 796 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/16x16/offline-brick.png (renamed from src/com.gluster.storage.management.gui/icons/tango/16x16/offline-brick.png)bin621 -> 621 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/16x16/online-brick.png (renamed from src/com.gluster.storage.management.gui/icons/tango/16x16/online-brick.png)bin532 -> 532 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/16x16/pause.pngbin0 -> 729 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/16x16/question.png (renamed from src/com.gluster.storage.management.gui/icons/tango/16x16/question.png)bin766 -> 766 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/16x16/running-task.pngbin0 -> 858 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/16x16/server.png (renamed from src/com.gluster.storage.management.gui/icons/tango/16x16/server.png)bin725 -> 725 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/16x16/servers.png (renamed from src/com.gluster.storage.management.gui/icons/tango/16x16/servers.png)bin393 -> 393 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/16x16/settings.png (renamed from src/com.gluster.storage.management.gui/icons/tango/16x16/settings.png)bin588 -> 588 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/16x16/start-offline-bricks-disabled.pngbin0 -> 889 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/16x16/start-offline-bricks.pngbin0 -> 875 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/16x16/start.pngbin0 -> 734 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/16x16/status-offline.png (renamed from src/com.gluster.storage.management.gui/icons/tango/16x16/status-offline.png)bin945 -> 945 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/16x16/status-online.png (renamed from src/com.gluster.storage.management.gui/icons/tango/16x16/status-online.png)bin689 -> 689 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/16x16/stop.pngbin0 -> 690 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/16x16/task-completed.pngbin0 -> 767 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/16x16/task-error.pngbin0 -> 768 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/16x16/utilities-terminal.pngbin0 -> 668 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/16x16/view-refresh.png (renamed from src/com.gluster.storage.management.gui/icons/tango/16x16/view-refresh.png)bin912 -> 912 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/16x16/volume-create.png (renamed from src/com.gluster.storage.management.gui/icons/tango/16x16/volume-create.png)bin635 -> 635 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/16x16/volume-options.png (renamed from src/com.gluster.storage.management.gui/icons/tango/16x16/volume-options.png)bin713 -> 713 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/16x16/volume.png (renamed from src/com.gluster.storage.management.gui/icons/tango/16x16/volume.png)bin774 -> 774 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/16x16/volumes.png (renamed from src/com.gluster.storage.management.gui/icons/tango/16x16/volumes.png)bin830 -> 830 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/22x22/disk-initialisation.png (renamed from src/com.gluster.storage.management.gui/icons/tango/22x22/disk-initialisation.png)bin1100 -> 1100 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/22x22/high-memory-usage.png (renamed from src/com.gluster.storage.management.gui/icons/tango/22x22/high-memory-usage.png)bin834 -> 834 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/22x22/low-diskspace.png (renamed from src/com.gluster.storage.management.gui/icons/tango/22x22/low-diskspace.png)bin1042 -> 1042 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/22x22/migrate-brick.png (renamed from src/com.gluster.storage.management.gui/icons/tango/22x22/replace-brick.png)bin1213 -> 1213 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/22x22/offline-brick.pngbin0 -> 835 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/22x22/offline-server.png (renamed from src/com.gluster.storage.management.gui/icons/tango/22x22/offline-server.png)bin1276 -> 1276 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/22x22/offline-volume.pngbin0 -> 1034 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/22x22/server-warning.png (renamed from src/com.gluster.storage.management.gui/icons/tango/22x22/server-warning.png)bin806 -> 806 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/22x22/start-offline-bricks-disabled.pngbin0 -> 1362 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/22x22/start-offline-bricks.pngbin0 -> 1332 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/22x22/system-search.png (renamed from src/com.gluster.storage.management.gui/icons/tango/22x22/system-search.png)bin1267 -> 1267 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/22x22/utilities-terminal.pngbin0 -> 1026 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/22x22/volume-rebalance.png (renamed from src/com.gluster.storage.management.gui/icons/tango/22x22/volume-rebalance.png)bin955 -> 955 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/add-brick-disabled.pngbin0 -> 2063 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/add-brick.png (renamed from src/com.gluster.storage.management.gui/icons/tango/32x32/add-brick.png)bin2105 -> 2105 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/add-server.png (renamed from src/com.gluster.storage.management.gui/icons/tango/32x32/add-server.png)bin2137 -> 2137 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/clear-task-disabled.pngbin0 -> 1416 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/clear-task.png (renamed from src/com.gluster.storage.management.gui/icons/tango/32x32/clear-task.png)bin1424 -> 1424 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/commit-task-disabled.pngbin0 -> 1246 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/commit-task.png (renamed from src/com.gluster.storage.management.gui/icons/tango/32x32/commit-task.png)bin1294 -> 1294 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/create-volume-disabled.pngbin0 -> 1929 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/create-volume.png (renamed from src/com.gluster.storage.management.gui/icons/tango/32x32/create-volume.png)bin1788 -> 1788 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/disk.png (renamed from src/com.gluster.storage.management.gui/icons/tango/32x32/disk.png)bin1155 -> 1155 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/download-log.png (renamed from src/com.gluster.storage.management.gui/icons/tango/32x32/download-log.png)bin2065 -> 2065 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/help.png (renamed from src/com.gluster.storage.management.gui/icons/tango/32x32/help.png)bin2231 -> 2231 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/log-rotate.pngbin0 -> 1839 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/logs.png (renamed from src/com.gluster.storage.management.gui/icons/tango/32x32/logs.png)bin1886 -> 1886 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/migrate-brick-disabled.pngbin0 -> 2591 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/migrate-brick.png (renamed from src/com.gluster.storage.management.gui/icons/tango/32x32/replace-brick.png)bin2343 -> 2343 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/pause-disabled.pngbin0 -> 1001 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/pause.png (renamed from src/com.gluster.storage.management.gui/icons/tango/32x32/pause.png)bin1037 -> 1037 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/remove-brick-disabled.pngbin0 -> 2206 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/remove-brick.png (renamed from src/com.gluster.storage.management.gui/icons/tango/32x32/remove-brick.png)bin1988 -> 1988 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/remove-server-disabled.pngbin0 -> 1907 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/remove-server.png (renamed from src/com.gluster.storage.management.gui/icons/tango/32x32/remove-server.png)bin2143 -> 2143 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/remove-volume-disabled.pngbin0 -> 1644 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/remove-volume.png (renamed from src/com.gluster.storage.management.gui/icons/tango/32x32/remove-volume.png)bin1712 -> 1712 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/reset-volume-option-disabled.pngbin0 -> 2273 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/reset-volume-option.png (renamed from src/com.gluster.storage.management.gui/icons/tango/32x32/reset-volume-option.png)bin2303 -> 2303 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/server.png (renamed from src/com.gluster.storage.management.gui/icons/tango/32x32/server.png)bin1591 -> 1591 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/servers.png (renamed from src/com.gluster.storage.management.gui/icons/tango/32x32/servers.png)bin1264 -> 1264 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/settings.png (renamed from src/com.gluster.storage.management.gui/icons/tango/32x32/settings.png)bin2544 -> 2544 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/start-disabled.pngbin0 -> 1181 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/start-offline-bricks-disabled.pngbin0 -> 2127 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/start-offline-bricks.pngbin0 -> 2145 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/start-volume-disabled.pngbin0 -> 1968 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/start-volume.png (renamed from src/com.gluster.storage.management.gui/icons/tango/32x32/start-volume.png)bin1818 -> 1818 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/start.png (renamed from src/com.gluster.storage.management.gui/icons/tango/32x32/start.png)bin1207 -> 1207 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/stop-disabled.pngbin0 -> 532 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/stop-volume-disabled.pngbin0 -> 1851 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/stop-volume.png (renamed from src/com.gluster.storage.management.gui/icons/tango/32x32/stop-volume.png)bin1754 -> 1754 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/stop.png (renamed from src/com.gluster.storage.management.gui/icons/tango/32x32/stop.png)bin540 -> 540 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/utilities-terminal.pngbin0 -> 1488 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/view-refresh.png (renamed from src/com.gluster.storage.management.gui/icons/tango/32x32/view-refresh.png)bin2024 -> 2024 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/volume-rebalance-disabled.pngbin0 -> 1927 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/volume-rebalance.png (renamed from src/com.gluster.storage.management.gui/icons/tango/32x32/volume-rebalance.png)bin1969 -> 1969 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/32x32/volume.png (renamed from src/com.gluster.storage.management.gui/icons/tango/32x32/volume.png)bin1446 -> 1446 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/48x48/add-server.png (renamed from src/com.gluster.storage.management.gui/icons/tango/48x48/add-server.png)bin3606 -> 3606 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/48x48/create-volume.png (renamed from src/com.gluster.storage.management.gui/icons/tango/48x48/create-volume.png)bin2898 -> 2898 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/48x48/remove-brick-disabled.pngbin0 -> 3186 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/48x48/server.png (renamed from src/com.gluster.storage.management.gui/icons/tango/48x48/server.png)bin3295 -> 3295 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/48x48/start-offline-bricks-disabled.pngbin0 -> 3080 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/48x48/start-offline-bricks.pngbin0 -> 3130 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/48x48/start-volume-disabled.pngbin0 -> 2742 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/48x48/stop-volume-disabled.pngbin0 -> 2470 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/8x8/offline.png (renamed from src/com.gluster.storage.management.gui/icons/tango/8x8/offline.png)bin381 -> 381 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/8x8/online.png (renamed from src/com.gluster.storage.management.gui/icons/tango/8x8/online.png)bin315 -> 315 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/8x8/star.png (renamed from src/com.gluster.storage.management.gui/icons/tango/8x8/star.png)bin244 -> 244 bytes-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/add_brick.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/add_brick.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/add_volume.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/add_volume.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/brick.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/brick.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/brick_migration.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/brick_migration.svg)303
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/bricks.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/bricks.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/cloud.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/cloud.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/create-volume-disabled.svg3044
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/create-volume.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/create_volume.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/disk (32-32).svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/disk (32-32).svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/disk (48-48).svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/disk (48-48).svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/disk.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/disk.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/disk_available.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/disk_available.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/disk_error.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/disk_error.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/disk_initialisation.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/disk_initialisation.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/disk_inuse.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/disk_inuse.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/disk_uninitialised.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/disk_uninitialised.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/download_log.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/download_log.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/high_CPU_usage.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/high_CPU_usage.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/high_memory_usage.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/high_memory_usage.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/log.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/log.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/low_diskspace.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/low_diskspace.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/offline-8x8.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/offline-8x8.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/offline.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/offline.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/offline_brick.svg4413
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/offline_brick_alert.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/offline_brick_alert.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/offline_server.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/offline_server.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/offline_volume.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/offline_volume.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/online-8x8.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/online-8x8.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/online.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/online.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/remove-server.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/remove-server.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/remove_brick.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/remove_brick.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/remove_volume.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/remove_volume.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/reset_volume_option.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/reset_volume_option.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/running_task.svg1498
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/star-8x8.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/star-8x8.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/start-volume-disabled.svg3350
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/start_volume.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/start_volume.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/stop_volume.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/stop_volume.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/task_clear.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/task_clear.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/task_commit.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/task_commit.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/task_pause.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/task_pause.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/task_paused.svg812
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/task_resume.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/task_resume.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/task_running.svg796
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/task_status_completed.svg577
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/task_status_error.svg654
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/task_stop.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/task_stop.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/task_stopped.svg784
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/utilities-terminal.svg500
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/view-refresh.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/view-refresh.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/volume.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/volume.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/volume_option.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/volume_option.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/volume_rebalance.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/volume_rebalance.svg)0
-rw-r--r--src/org.gluster.storage.management.console/icons/tango/scalable/volumes.svg (renamed from src/com.gluster.storage.management.gui/icons/tango/scalable/volumes.svg)0
-rw-r--r--src/org.gluster.storage.management.console/images/gauge.png (renamed from src/com.gluster.storage.management.gui/images/gauge.png)bin45242 -> 45242 bytes-rw-r--r--src/org.gluster.storage.management.console/images/gauge_small.png (renamed from src/com.gluster.storage.management.gui/images/gauge_small.png)bin13875 -> 13875 bytes-rw-r--r--src/org.gluster.storage.management.console/images/gluster-about.pngbin0 -> 34661 bytes-rw-r--r--src/org.gluster.storage.management.console/images/login-screen-with-text.psdbin0 -> 4367373 bytes-rw-r--r--src/org.gluster.storage.management.console/images/login-screen.psdbin0 -> 1512790 bytes-rw-r--r--src/org.gluster.storage.management.console/images/splash-dialog.bmpbin0 -> 248192 bytes-rw-r--r--src/org.gluster.storage.management.console/images/splash-screen.psdbin0 -> 2004782 bytes-rw-r--r--src/org.gluster.storage.management.console/plugin.properties26
-rw-r--r--src/org.gluster.storage.management.console/plugin.xml1656
-rw-r--r--src/org.gluster.storage.management.console/preferences.ini3
-rw-r--r--src/org.gluster.storage.management.console/splash.bmpbin0 -> 381054 bytes-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/Activator.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/Activator.java)30
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/AlertsManager.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/AlertsManager.java)70
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/Application.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/Application.java)34
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/ApplicationActionBarAdvisor.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ApplicationActionBarAdvisor.java)36
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/ApplicationWorkbenchAdvisor.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ApplicationWorkbenchAdvisor.java)36
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/ApplicationWorkbenchWindowAdvisor.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ApplicationWorkbenchWindowAdvisor.java)30
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/BrickTableLabelProvider.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/BrickTableLabelProvider.java)42
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/ConsoleConstants.java29
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/DeviceTableLabelProvider.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/DeviceTableLabelProvider.java)42
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/EntityGroupContentProvider.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/EntityGroupContentProvider.java)30
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/GlusterDataModelManager.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/GlusterDataModelManager.java)314
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/GlusterServerTableLabelProvider.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/GlusterServerTableLabelProvider.java)38
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/ICommandIds.java33
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/IEntityListener.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/IEntityListener.java)30
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/IImageKeys.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/IImageKeys.java)37
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/NetworkInterfaceTableLabelProvider.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/NetworkInterfaceTableLabelProvider.java)35
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/Perspective.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/Perspective.java)28
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/ServerDiskTableLabelProvider.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ServerDiskTableLabelProvider.java)47
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/ServerTableLabelProvider.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ServerTableLabelProvider.java)37
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/TableLabelProviderAdapter.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/TableLabelProviderAdapter.java)28
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/TasksTableLabelProvider.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/TasksTableLabelProvider.java)44
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/VolumeLogTableLabelProvider.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/VolumeLogTableLabelProvider.java)37
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/VolumeOptionsContentProvider.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/VolumeOptionsContentProvider.java)30
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/VolumeOptionsTableLabelProvider.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/VolumeOptionsTableLabelProvider.java)33
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/VolumeTableLabelProvider.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/VolumeTableLabelProvider.java)36
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/actions/AbstractActionDelegate.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AbstractActionDelegate.java)50
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/actions/AbstractMonitoredActionDelegate.java56
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/actions/ActionConstants.java36
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/actions/AddBrickAction.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AddBrickAction.java)36
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/actions/AddServerAction.java123
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/actions/ChangePasswordAction.java41
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/actions/ClearTaskAction.java65
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/actions/CommitTaskAction.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/CommitTaskAction.java)36
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/actions/CreateVolumeAction.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/CreateVolumeAction.java)32
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/actions/DeleteVolumeAction.java210
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/actions/DownloadVolumeLogsAction.java61
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/actions/EditVolumeAction.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/EditVolumeAction.java)28
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/actions/ExportSshKeysAction.java59
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/actions/ForceStartVolumeAction.java89
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/actions/ImportSshKeysAction.java62
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/actions/MigrateBrickAction.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/MigrateBrickAction.java)42
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/actions/MigrateVolumeAction.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/MigrateVolumeAction.java)28
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/actions/PauseTaskAction.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/PauseTaskAction.java)40
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/actions/PreferencesAction.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/PreferencesAction.java)28
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/actions/RebalanceVolumeAction.java87
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/actions/RefreshDataAction.java43
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/actions/RemoveBrickAction.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveBrickAction.java)45
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/actions/RemoveServerAction.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RemoveServerAction.java)129
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/actions/ResetVolumeOptionsAction.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ResetVolumeOptionsAction.java)33
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/actions/ResumeTaskAction.java63
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/actions/ServerAdditionAction.java46
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/actions/StartVolumeAction.java167
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/actions/StopTaskAction.java65
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/actions/StopVolumeAction.java228
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/actions/SupportAction.java48
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/actions/TerminalAction.java44
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/actions/TestPopupMenuAction.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/TestPopupMenuAction.java)28
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/actions/VolumeLogRotateAction.java82
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/dialogs/AddBrickPage.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/AddBrickPage.java)49
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/dialogs/AddBrickWizard.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/AddBrickWizard.java)40
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/dialogs/BricksSelectionPage.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/BricksSelectionPage.java)66
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/dialogs/ChangePasswordDialog.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/ChangePasswordDialog.java)40
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/dialogs/ClusterSelectionDialog.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/ClusterSelectionDialog.java)73
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/dialogs/CreateVolumePage1.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumePage1.java)110
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/dialogs/CreateVolumeWizard.java158
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/dialogs/GlusterSupportDialog.java137
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/dialogs/InitDiskDialog.java209
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/dialogs/LoginDialog.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/LoginDialog.java)132
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/dialogs/MigrateBrickPage1.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateBrickPage1.java)112
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/dialogs/MigrateBrickWizard.java111
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/dialogs/SelectDisksDialog.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/SelectDisksDialog.java)38
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/dialogs/ServerAdditionDialog.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/ServerAdditionDialog.java)43
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/jobs/DataSyncJob.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/jobs/DataSyncJob.java)34
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/preferences/AlertsPreferencePage.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/preferences/AlertsPreferencePage.java)22
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/preferences/ChartsPreferencePage.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/preferences/ChartsPreferencePage.java)30
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/preferences/GlusterPreferencePage.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/preferences/GlusterPreferencePage.java)36
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/preferences/PreferenceConstants.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/preferences/PreferenceConstants.java)28
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/preferences/PreferenceInitializer.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/preferences/PreferenceInitializer.java)36
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/toolbar/GlusterToolbarManager.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/toolbar/GlusterToolbarManager.java)60
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/toolbar/ToolbarManager.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/toolbar/ToolbarManager.java)30
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/utils/ChartUtil.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/ChartUtil.java)51
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/utils/ChartViewerComposite.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/ChartViewerComposite.java)71
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/utils/EntityViewerFilter.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/EntityViewerFilter.java)32
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/utils/GUIHelper.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/GUIHelper.java)98
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/utils/GlusterChartPalette.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/GlusterChartPalette.java)40
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/utils/GlusterLogger.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/GlusterLogger.java)30
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/utils/ImageUtil.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/utils/ImageUtil.java)34
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/utils/TableViewerComparator.java73
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/validators/StringRequiredValidator.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/validators/StringRequiredValidator.java)28
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/ClusterAdapterFactory.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/ClusterAdapterFactory.java)50
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/ClusterSummaryView.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/ClusterSummaryView.java)175
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/DiscoveredServerView.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/DiscoveredServerView.java)38
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/DiscoveredServersView.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/DiscoveredServersView.java)40
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/DisksView.java62
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/GlusterServerDisksView.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServerDisksView.java)48
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/GlusterServerLogsView.java57
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/GlusterServerSummaryView.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServerSummaryView.java)179
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/GlusterServersSummaryView.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServersSummaryView.java)106
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/GlusterServersView.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServersView.java)43
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/GlusterViewsManager.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterViewsManager.java)52
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/NavigationTreeLabelDecorator.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/NavigationTreeLabelDecorator.java)40
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/NavigationView.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/NavigationView.java)47
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/TasksView.java57
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/ViewsManager.java36
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/VolumeBricksView.java57
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/VolumeLogsView.java75
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/VolumeOptionsView.java54
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/VolumeSummaryView.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeSummaryView.java)461
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/VolumeView.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeView.java)38
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/VolumesSummaryView.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumesSummaryView.java)143
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/VolumesView.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumesView.java)40
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/pages/AbstractDisksPage.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractDisksPage.java)121
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/pages/AbstractTableTreeViewerPage.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractTableTreeViewerPage.java)36
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/pages/AbstractTableViewerPage.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractTableViewerPage.java)65
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/pages/BricksPage.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/BricksPage.java)47
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/pages/DiskTreeContentProvider.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/DiskTreeContentProvider.java)39
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/pages/DisksPage.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/DisksPage.java)41
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/pages/GlusterServersPage.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/GlusterServersPage.java)55
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/pages/OptionKeyEditingSupport.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/OptionKeyEditingSupport.java)32
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/pages/OptionValueEditingSupport.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/OptionValueEditingSupport.java)34
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/pages/ServerDisksPage.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/ServerDisksPage.java)36
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/pages/ServerLogsPage.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/ServerLogsPage.java)35
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/pages/ServersPage.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/ServersPage.java)51
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/pages/TasksPage.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/TasksPage.java)65
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/pages/VolumeLogsPage.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/VolumeLogsPage.java)53
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/pages/VolumeOptionsPage.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/VolumeOptionsPage.java)50
-rw-r--r--src/org.gluster.storage.management.console/src/org/gluster/storage/management/console/views/pages/VolumesPage.java (renamed from src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/VolumesPage.java)58
-rw-r--r--src/org.gluster.storage.management.core/.classpath (renamed from src/com.gluster.storage.management.core/.classpath)6
-rw-r--r--src/org.gluster.storage.management.core/.project (renamed from src/com.gluster.storage.management.gui/.project)15
-rw-r--r--src/org.gluster.storage.management.core/.settings/org.eclipse.jdt.core.prefs (renamed from src/com.gluster.storage.management.core/.settings/org.eclipse.jdt.core.prefs)0
-rw-r--r--src/org.gluster.storage.management.core/.settings/org.eclipse.wst.common.component6
-rw-r--r--src/org.gluster.storage.management.core/.settings/org.eclipse.wst.common.project.facet.core.xml7
-rw-r--r--src/org.gluster.storage.management.core/META-INF/MANIFEST.MF15
-rw-r--r--src/org.gluster.storage.management.core/build.properties23
-rw-r--r--src/org.gluster.storage.management.core/junit/core.junit.launch (renamed from src/com.gluster.storage.management.core/junit/core.junit.launch)6
-rw-r--r--src/org.gluster.storage.management.core/junit/org/gluster/storage/management/core/model/AlertTest.java101
-rw-r--r--src/org.gluster.storage.management.core/junit/org/gluster/storage/management/core/model/BrickTest.java323
-rw-r--r--src/org.gluster.storage.management.core/junit/org/gluster/storage/management/core/model/ClusterTest.java229
-rw-r--r--src/org.gluster.storage.management.core/junit/org/gluster/storage/management/core/model/DiskTest.java495
-rw-r--r--src/org.gluster.storage.management.core/junit/org/gluster/storage/management/core/model/TestAll.java53
-rw-r--r--src/org.gluster.storage.management.core/junit/org/gluster/storage/management/core/utils/DateUtilTest.java236
-rw-r--r--src/org.gluster.storage.management.core/junit/org/gluster/storage/management/core/utils/FileUtilTest.java500
-rw-r--r--src/org.gluster.storage.management.core/junit/org/gluster/storage/management/core/utils/StringUtilTest.java327
-rw-r--r--src/org.gluster.storage.management.core/junit/test/test.txt (renamed from src/com.gluster.storage.management.core/junit/test/test.txt)0
-rw-r--r--src/org.gluster.storage.management.core/src/META-INF/MANIFEST.MF (renamed from src/com.gluster.storage.management.gateway/WebContent/META-INF/MANIFEST.MF)0
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/constants/CoreConstants.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/CoreConstants.java)29
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/constants/GlusterConstants.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/GlusterConstants.java)31
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/constants/RESTConstants.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/constants/RESTConstants.java)60
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/exceptions/ConnectionException.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/exceptions/ConnectionException.java)28
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/exceptions/GlusterRuntimeException.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/exceptions/GlusterRuntimeException.java)28
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/exceptions/GlusterValidationException.java27
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/model/Alert.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Alert.java)25
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/model/Brick.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Brick.java)31
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/model/Cluster.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Cluster.java)28
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/model/ClusterListener.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ClusterListener.java)32
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/model/ConnectionDetails.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ConnectionDetails.java)28
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/model/DefaultClusterListener.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/DefaultClusterListener.java)38
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/model/Device.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Device.java)37
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/model/Disk.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Disk.java)40
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/model/Entity.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Entity.java)31
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/model/EntityGroup.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/EntityGroup.java)30
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/model/Event.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Event.java)30
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/model/Filterable.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Filterable.java)28
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/model/GlusterDataModel.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterDataModel.java)28
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/model/GlusterDummyModel.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterDummyModel.java)53
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/model/GlusterServer.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/GlusterServer.java)31
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/model/InitDiskStatusResponse.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/InitDiskStatusResponse.java)30
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/model/NetworkInterface.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/NetworkInterface.java)28
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/model/Partition.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Partition.java)28
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/model/Response.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Response.java)62
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/model/Server.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Server.java)35
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/model/ServerStats.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ServerStats.java)28
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/model/ServerStatsRow.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/ServerStatsRow.java)28
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/model/StatsMetadata.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/StatsMetadata.java)28
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/model/Status.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Status.java)32
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/model/TaskInfo.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/TaskInfo.java)35
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/model/TaskStatus.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/TaskStatus.java)34
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/model/User.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/User.java)28
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/model/Version.java65
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/model/Volume.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/Volume.java)67
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/model/VolumeLogMessage.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/VolumeLogMessage.java)45
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/model/VolumeOption.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/VolumeOption.java)31
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/model/VolumeOptionInfo.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/VolumeOptionInfo.java)32
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/model/VolumeOptions.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/VolumeOptions.java)28
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/model/adapters/VolumeLogDateAdapter.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/model/adapters/VolumeLogDateAdapter.java)31
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/response/AbstractResponse.java35
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/response/ClusterNameListResponse.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/ClusterNameListResponse.java)28
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/response/FsTypeListResponse.java45
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/response/GlusterServerListResponse.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/GlusterServerListResponse.java)33
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/response/GlusterServerResponse.java54
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/response/LogMessageListResponse.java52
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/response/ServerListResponse.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/ServerListResponse.java)31
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/response/ServerNameListResponse.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/ServerNameListResponse.java)28
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/response/StringListResponse.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/StringListResponse.java)31
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/response/TaskIdResponse.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/TaskIdResponse.java)28
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/response/TaskInfoListResponse.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/TaskInfoListResponse.java)33
-rwxr-xr-xsrc/org.gluster.storage.management.core/src/org/gluster/storage/management/core/response/TaskResponse.java51
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/response/VolumeListResponse.java50
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/response/VolumeOptionInfoListResponse.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/VolumeOptionInfoListResponse.java)36
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/utils/DateUtil.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/DateUtil.java)41
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/utils/FileUtil.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/FileUtil.java)33
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/utils/GlusterCoreUtil.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/GlusterCoreUtil.java)111
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/utils/JavaUtil.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/JavaUtil.java)28
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/utils/LRUCache.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/LRUCache.java)30
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/utils/NumberUtil.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/NumberUtil.java)28
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/utils/ProcessResult.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/ProcessResult.java)28
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/utils/ProcessUtil.java144
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/utils/StringUtil.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/StringUtil.java)65
-rw-r--r--src/org.gluster.storage.management.core/src/org/gluster/storage/management/core/utils/ValidationUtil.java (renamed from src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/ValidationUtil.java)38
-rw-r--r--src/org.gluster.storage.management.gateway.scripts/.externalToolBuilders/org.python.pydev.PyDevBuilder.launch7
-rw-r--r--src/org.gluster.storage.management.gateway.scripts/.project22
-rw-r--r--src/org.gluster.storage.management.gateway.scripts/src/backend/DiskUtils.py212
-rw-r--r--src/org.gluster.storage.management.gateway.scripts/src/backend/FsTabUtils.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/FsTabUtils.py)45
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/backend/NetworkUtils.py166
-rw-r--r--src/org.gluster.storage.management.gateway.scripts/src/backend/VolumeUtils.py109
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/backend/add_user_cifs.py79
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/backend/clear_volume_directory.py62
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/backend/create_volume_cifs.py61
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/backend/delete_user_cifs.py45
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/backend/delete_volume_cifs.py54
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/backend/format_device.py122
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/backend/format_device_background.py142
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/backend/get_brick_status.py60
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/backend/get_filesystem_type.py36
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/backend/get_format_device_status.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/get_format_device_status.py)75
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/backend/get_rrd_cpu_details.py61
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/backend/get_rrd_memory_details.py62
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/backend/get_rrd_net_details.py55
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/backend/get_server_details.py286
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/backend/get_server_status.py42
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/backend/get_volume_brick_log.py (renamed from src/com.gluster.storage.management.gateway.scripts/src/get_volume_brick_log.py)50
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/backend/gluster-volume-settings.init.d36
-rw-r--r--src/org.gluster.storage.management.gateway.scripts/src/backend/gluster_cifs_volume_startup.py128
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/backend/modify_volume_cifs.py50
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/backend/multicast-discoverd.init.d62
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/backend/multicast-discoverd.py117
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/backend/rrd_cpu.pl (renamed from src/com.gluster.storage.management.gateway.scripts/src/rrd_cpu.pl)20
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/backend/rrd_mem.pl (renamed from src/com.gluster.storage.management.gateway.scripts/src/rrd_mem.pl)18
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/backend/rrd_net.pl (renamed from src/com.gluster.storage.management.gateway.scripts/src/rrd_net.pl)25
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/backend/setup_cifs_config.py122
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/backend/start_volume_cifs.py67
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/backend/stop_volume_cifs.py62
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/backend/update-rrd.sh24
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/backend/update_volume_cifs.py51
-rw-r--r--src/org.gluster.storage.management.gateway.scripts/src/common/Globals.py49
-rw-r--r--src/org.gluster.storage.management.gateway.scripts/src/common/Utils.py343
-rw-r--r--src/org.gluster.storage.management.gateway.scripts/src/common/XmlHandler.py (renamed from src/com.gluster.storage.management.gateway/WebContent/scripts/XmlHandler.py)692
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/gateway/add_user_cifs_all.py92
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/gateway/create_volume_cifs_all.py76
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/gateway/delete_user_cifs_all.py66
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/gateway/delete_volume_cifs_all.py65
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/gateway/get_volume_user_cifs.py52
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/gateway/gmg-reset-password.sh46
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/gateway/grun.py35
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/gateway/multicast-discover-servers.py126
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/gateway/remove_server_volume_cifs_config.py82
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/gateway/setup_cifs_config_all.py43
-rwxr-xr-xsrc/org.gluster.storage.management.gateway.scripts/src/gateway/update_volume_cifs_all.py77
-rw-r--r--src/org.gluster.storage.management.gateway/.classpath (renamed from src/com.gluster.storage.management.gateway/.classpath)3
-rw-r--r--src/org.gluster.storage.management.gateway/.project (renamed from src/com.gluster.storage.management.gateway/.project)8
-rw-r--r--src/org.gluster.storage.management.gateway/.settings/.jsdtscope (renamed from src/com.gluster.storage.management.gateway/.settings/.jsdtscope)0
-rw-r--r--src/org.gluster.storage.management.gateway/.settings/org.eclipse.core.resources.prefs3
-rw-r--r--src/org.gluster.storage.management.gateway/.settings/org.eclipse.jdt.core.prefs (renamed from src/com.gluster.storage.management.gateway/.settings/org.eclipse.jdt.core.prefs)0
-rw-r--r--src/org.gluster.storage.management.gateway/.settings/org.eclipse.ltk.core.refactoring.prefs (renamed from src/com.gluster.storage.management.gateway/.settings/org.eclipse.ltk.core.refactoring.prefs)0
-rw-r--r--src/org.gluster.storage.management.gateway/.settings/org.eclipse.wst.common.component12
-rw-r--r--src/org.gluster.storage.management.gateway/.settings/org.eclipse.wst.common.project.facet.core.xml (renamed from src/com.gluster.storage.management.gateway/.settings/org.eclipse.wst.common.project.facet.core.xml)0
-rw-r--r--src/org.gluster.storage.management.gateway/.settings/org.eclipse.wst.jsdt.ui.superType.container (renamed from src/com.gluster.storage.management.gateway/.settings/org.eclipse.wst.jsdt.ui.superType.container)0
-rw-r--r--src/org.gluster.storage.management.gateway/.settings/org.eclipse.wst.jsdt.ui.superType.name (renamed from src/com.gluster.storage.management.gateway/.settings/org.eclipse.wst.jsdt.ui.superType.name)0
-rw-r--r--src/org.gluster.storage.management.gateway/.settings/org.eclipse.wst.ws.service.policy.prefs (renamed from src/com.gluster.storage.management.gateway/.settings/org.eclipse.wst.ws.service.policy.prefs)0
-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/META-INF/MANIFEST.MF3
-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/Jersey-LICENSE.txt135
-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/Jersey-third-party-license-readme.txt188
-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/antlr-2.7.6.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/antlr-2.7.6.jar)bin443432 -> 443432 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/aopalliance-1.0.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/aopalliance-1.0.jar)bin4467 -> 4467 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/asm-3.1.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/asm-3.1.jar)bin43033 -> 43033 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/commons-collections-3.1.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/commons-collections-3.1.jar)bin559366 -> 559366 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/commons-logging-1.1.1.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/commons-logging-1.1.1.jar)bin60841 -> 60841 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/derby.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/derby.jar)bin2512189 -> 2512189 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/derbytools.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/derbytools.jar)bin165188 -> 165188 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/dom4j-1.6.1.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/dom4j-1.6.1.jar)bin313898 -> 313898 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/ganymed-ssh2-build250-LICENSE.txt (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/ganymed-ssh2-build250-LICENSE.txt)0
-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/ganymed-ssh2-build250.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/ganymed-ssh2-build250.jar)bin248915 -> 248915 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/hibernate-jpa-2.0-api-1.0.0.Final.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/hibernate-jpa-2.0-api-1.0.0.Final.jar)bin100884 -> 100884 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/hibernate3.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/hibernate3.jar)bin4133342 -> 4133342 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/jackson-core-asl-1.5.5.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/jackson-core-asl-1.5.5.jar)bin171958 -> 171958 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/jackson-jaxrs-1.5.5.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/jackson-jaxrs-1.5.5.jar)bin17065 -> 17065 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/jackson-mapper-asl-1.5.5.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/jackson-mapper-asl-1.5.5.jar)bin485699 -> 485699 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/jackson-xc-1.5.5.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/jackson-xc-1.5.5.jar)bin24745 -> 24745 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/javassist-3.12.0.GA.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/javassist-3.12.0.GA.jar)bin633312 -> 633312 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/jersey-client-1.5.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/jersey-client-1.5.jar)bin128096 -> 128096 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/jersey-core-1.5.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/jersey-core-1.5.jar)bin455665 -> 455665 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/jersey-json-1.5.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/jersey-json-1.5.jar)bin144810 -> 144810 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/jersey-multipart-1.5.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/jersey-multipart-1.5.jar)bin49330 -> 49330 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/jersey-server-1.5.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/jersey-server-1.5.jar)bin681117 -> 681117 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/jersey-spring-1.5.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/jersey-spring-1.5.jar)bin17079 -> 17079 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/jettison-1.1.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/jettison-1.1.jar)bin67758 -> 67758 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/jnlp-servlet.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/jnlp-servlet.jar)bin61712 -> 61712 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/jsr311-api-1.1.1.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/jsr311-api-1.1.1.jar)bin46367 -> 46367 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/jta-1.1.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/jta-1.1.jar)bin10899 -> 10899 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/log4j-1.2.16.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/log4j-1.2.16.jar)bin481534 -> 481534 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/mimepull-1.3.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/mimepull-1.3.jar)bin38683 -> 38683 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.eclipse.equinox.common_3.6.0.v20100503.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.eclipse.equinox.common_3.6.0.v20100503.jar)bin101958 -> 101958 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.aop-3.0.5.RELEASE.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.aop-3.0.5.RELEASE.jar)bin321190 -> 321190 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.asm-3.0.5.RELEASE.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.asm-3.0.5.RELEASE.jar)bin53082 -> 53082 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.aspects-3.0.5.RELEASE.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.aspects-3.0.5.RELEASE.jar)bin35548 -> 35548 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.beans-3.0.5.RELEASE.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.beans-3.0.5.RELEASE.jar)bin555410 -> 555410 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.context-3.0.5.RELEASE.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.context-3.0.5.RELEASE.jar)bin668861 -> 668861 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.context.support-3.0.5.RELEASE.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.context.support-3.0.5.RELEASE.jar)bin100870 -> 100870 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.core-3.0.5.RELEASE.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.core-3.0.5.RELEASE.jar)bin382442 -> 382442 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.expression-3.0.5.RELEASE.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.expression-3.0.5.RELEASE.jar)bin169752 -> 169752 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.instrument-3.0.5.RELEASE.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.instrument-3.0.5.RELEASE.jar)bin1810 -> 1810 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.instrument.tomcat-3.0.5.RELEASE.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.instrument.tomcat-3.0.5.RELEASE.jar)bin5728 -> 5728 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.jdbc-3.0.5.RELEASE.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.jdbc-3.0.5.RELEASE.jar)bin385712 -> 385712 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.jms-3.0.5.RELEASE.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.jms-3.0.5.RELEASE.jar)bin185312 -> 185312 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.orm-3.0.5.RELEASE.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.orm-3.0.5.RELEASE.jar)bin334327 -> 334327 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.oxm-3.0.5.RELEASE.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.oxm-3.0.5.RELEASE.jar)bin61379 -> 61379 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.spring-library-3.0.5.RELEASE.libd (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.spring-library-3.0.5.RELEASE.libd)0
-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.test-3.0.5.RELEASE.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.test-3.0.5.RELEASE.jar)bin205278 -> 205278 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.transaction-3.0.5.RELEASE.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.transaction-3.0.5.RELEASE.jar)bin231922 -> 231922 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.web-3.0.5.RELEASE.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.web-3.0.5.RELEASE.jar)bin395587 -> 395587 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.web.portlet-3.0.5.RELEASE.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.web.portlet-3.0.5.RELEASE.jar)bin175412 -> 175412 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.web.servlet-3.0.5.RELEASE.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.web.servlet-3.0.5.RELEASE.jar)bin418977 -> 418977 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.web.struts-3.0.5.RELEASE.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/org.springframework.web.struts-3.0.5.RELEASE.jar)bin31404 -> 31404 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/servlet-api.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/servlet-api.jar)bin176386 -> 176386 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/slf4j-api-1.6.1.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/slf4j-api-1.6.1.jar)bin25496 -> 25496 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/spring-framework-3.0.5.RELEASE-LICENSE.txt201
-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/spring-security-3.0.5.RELEASE-LICENSE.txt201
-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/spring-security-config-3.0.5.RELEASE.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/spring-security-config-3.0.5.RELEASE.jar)bin185716 -> 185716 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/spring-security-core-3.0.5.RELEASE.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/spring-security-core-3.0.5.RELEASE.jar)bin311038 -> 311038 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/lib/spring-security-web-3.0.5.RELEASE.jar (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/spring-security-web-3.0.5.RELEASE.jar)bin242833 -> 242833 bytes-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/WEB-INF/web.xml (renamed from src/com.gluster.storage.management.gateway/WebContent/WEB-INF/web.xml)34
-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/data/scripts/1.0.0/0-version.sql (renamed from src/com.gluster.storage.management.gateway/WebContent/data/scripts/1.0.0/0-version.sql)0
-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/data/scripts/1.0.0/1-security-schema.sql (renamed from src/com.gluster.storage.management.gateway/WebContent/data/scripts/1.0.0/1-security-schema.sql)0
-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/data/scripts/1.0.0/2-users-authorities-groups.sql (renamed from src/com.gluster.storage.management.gateway/WebContent/data/scripts/1.0.0/2-users-authorities-groups.sql)0
-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/data/scripts/1.0.0/3-cluster-servers.sql (renamed from src/com.gluster.storage.management.gateway/WebContent/data/scripts/1.0.0/3-cluster-servers.sql)0
-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/index.html158
l---------src/org.gluster.storage.management.gateway/WebContent/scripts/Globals.py1
l---------src/org.gluster.storage.management.gateway/WebContent/scripts/Utils.py1
l---------src/org.gluster.storage.management.gateway/WebContent/scripts/XmlHandler.py1
l---------src/org.gluster.storage.management.gateway/WebContent/scripts/add_user_cifs_all.py1
l---------src/org.gluster.storage.management.gateway/WebContent/scripts/create_volume_cifs_all.py1
l---------src/org.gluster.storage.management.gateway/WebContent/scripts/delete_user_cifs_all.py1
l---------src/org.gluster.storage.management.gateway/WebContent/scripts/delete_volume_cifs_all.py1
l---------src/org.gluster.storage.management.gateway/WebContent/scripts/get_volume_user_cifs.py1
l---------src/org.gluster.storage.management.gateway/WebContent/scripts/gmg-reset-password.sh1
l---------src/org.gluster.storage.management.gateway/WebContent/scripts/grun.py1
l---------src/org.gluster.storage.management.gateway/WebContent/scripts/multicast-discover-servers.py1
l---------src/org.gluster.storage.management.gateway/WebContent/scripts/remove_server_volume_cifs_config.py1
l---------src/org.gluster.storage.management.gateway/WebContent/scripts/setup_cifs_config_all.py1
l---------src/org.gluster.storage.management.gateway/WebContent/scripts/update_volume_cifs_all.py1
-rw-r--r--src/org.gluster.storage.management.gateway/WebContent/ssl/gmg-ssl.keystore (renamed from src/com.gluster.storage.management.gateway/WebContent/ssl/gmg-ssl.keystore)bin1380 -> 1380 bytes-rw-r--r--src/org.gluster.storage.management.gateway/buckminster.cspex (renamed from src/com.gluster.storage.management.gateway/buckminster.cspex)2
-rw-r--r--src/org.gluster.storage.management.gateway/build/glustermg.ant (renamed from src/com.gluster.storage.management.gateway/build/glusterserver.ant)9
-rw-r--r--src/org.gluster.storage.management.gateway/src/META-INF/persistence.xml23
-rw-r--r--src/org.gluster.storage.management.gateway/src/log4j.properties38
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/data/ClusterInfo.java (renamed from src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/data/ClusterInfo.java)31
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/data/GlusterDataSource.java46
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/data/PersistenceDao.java (renamed from src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/data/PersistenceDao.java)33
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/data/ServerInfo.java (renamed from src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/data/ServerInfo.java)30
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/filters/AuditFilter.java66
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/filters/AuthenticationFailureFilter.java (renamed from src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/filters/AuthenticationFailureFilter.java)30
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/filters/GlusterResourceFilterFactory.java49
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/listeners/ShutdownListener.java48
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/resources/v1_0/AbstractResource.java (renamed from src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/resources/v1_0/AbstractResource.java)36
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/resources/v1_0/ClustersResource.java (renamed from src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/resources/v1_0/ClustersResource.java)50
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/resources/v1_0/DiscoveredServersResource.java101
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/resources/v1_0/GenericExceptionMapper.java (renamed from src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/resources/v1_0/GenericExceptionMapper.java)37
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/resources/v1_0/GlusterServersResource.java (renamed from src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/resources/v1_0/GlusterServersResource.java)302
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/resources/v1_0/KeysResource.java (renamed from src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/resources/v1_0/KeysResource.java)79
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/resources/v1_0/TasksResource.java225
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/resources/v1_0/UsersResource.java (renamed from src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/resources/v1_0/UsersResource.java)58
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/resources/v1_0/VolumesResource.java381
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/security/GlusterUserDetailsService.java29
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/security/UserAuthDao.java55
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/services/AbstractGlusterInterface.java38
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/services/ClusterService.java (renamed from src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/services/ClusterService.java)62
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/services/DiscoveredServerService.java130
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/services/Gluster323InterfaceService.java598
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/services/GlusterInterface.java387
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/services/GlusterInterfaceService.java254
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/services/GlusterServerService.java530
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/services/VolumeService.java984
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/tasks/InitServerTask.java (renamed from src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/tasks/InitServerTask.java)69
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/tasks/InitializeDiskTask.java196
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/tasks/MigrateBrickTask.java220
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/tasks/RebalanceVolumeTask.java141
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/tasks/ServerSyncTask.java (renamed from src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/tasks/ServerSyncTask.java)83
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/tasks/Task.java (renamed from src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/tasks/Task.java)43
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/utils/AbstractStatsFactory.java (renamed from src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/utils/AbstractStatsFactory.java)75
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/utils/CpuStatsFactory.java36
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/utils/DBUtil.java84
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/utils/MemoryStatsFactory.java (renamed from src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/utils/MemoryStatsFactory.java)34
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/utils/NetworkStatsFactory.java173
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/utils/PasswordManager.java (renamed from src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/utils/PasswordManager.java)51
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/utils/ServerUtil.java374
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/utils/SshUtil.java (renamed from src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/utils/SshUtil.java)245
-rw-r--r--src/org.gluster.storage.management.gateway/src/org/gluster/storage/management/gateway/utils/StatsFactory.java32
-rw-r--r--src/org.gluster.storage.management.gateway/src/rebel.xml35
-rw-r--r--src/org.gluster.storage.management.gateway/src/spring/gluster-server-base.xml (renamed from src/com.gluster.storage.management.gateway/src/spring/gluster-server-base.xml)41
-rw-r--r--src/org.gluster.storage.management.gateway/src/spring/gluster-server-security.xml (renamed from src/com.gluster.storage.management.gateway/src/spring/gluster-server-security.xml)23
1012 files changed, 44890 insertions, 29134 deletions
diff --git a/src/com.gluster.storage.management.client/build.properties b/src/com.gluster.storage.management.client/build.properties
deleted file mode 100644
index bc0c59d7..00000000
--- a/src/com.gluster.storage.management.client/build.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-source.. = src/
-output.. = bin/
-bin.includes = .,\
- META-INF/,\
- lib/,\
- keystore/,\
- lib/jersey-1.5/jersey-multipart-1.5.jar
-src.includes = src/,\
- lib/,\
- keystore/,\
- build.properties,\
- .project,\
- .classpath,\
- .settings/,\
- META-INF/
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/constants/ClientConstants.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/constants/ClientConstants.java
deleted file mode 100644
index 765735fb..00000000
--- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/constants/ClientConstants.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * ClientConstants.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.client.constants;
-
-/**
- *
- */
-public class ClientConstants {
- public static final String SYS_PROP_SERVER_URL = "gluster.server.url";
- public static final String DEFAULT_SERVER_URL = "https://localhost:8443/glustermg/linux.gtk.x86_64";
- public static final String CONTEXT_ROOT = "glustermg";
- public static final String REST_API_VERSION = "1.0";
-
- // SSL related
- public static final String TRUSTED_KEYSTORE = "gmc-trusted.keystore";
- public static final String TRUSTED_KEYSTORE_ACCESS = "gluster";
- public static final String PROTOCOL_TLS = "TLS";
- public static final String ALGORITHM_SUNX509 = "SunX509";
- public static final String KEYSTORE_TYPE_JKS = "JKS";
-}
-
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/utils/ClientUtil.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/utils/ClientUtil.java
deleted file mode 100644
index 3f87fd27..00000000
--- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/utils/ClientUtil.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.gluster.storage.management.client.utils;
-
-import java.net.URI;
-
-import javax.ws.rs.core.UriBuilder;
-
-import com.gluster.storage.management.client.constants.ClientConstants;
-
-public class ClientUtil {
-
- public static URI getServerBaseURI() {
- return UriBuilder.fromUri(getBaseURL()).path(ClientConstants.REST_API_VERSION).build();
- }
-
- private static String getBaseURL() {
- // remove the platform path (e.g. /linux.gtk.x86_64) from the URL
- return System.getProperty(ClientConstants.SYS_PROP_SERVER_URL, ClientConstants.DEFAULT_SERVER_URL)
- .replaceAll(ClientConstants.CONTEXT_ROOT + "\\/.*", ClientConstants.CONTEXT_ROOT + "\\/");
- }
-}
diff --git a/src/com.gluster.storage.management.console.help/META-INF/MANIFEST.MF b/src/com.gluster.storage.management.console.help/META-INF/MANIFEST.MF
deleted file mode 100644
index 2bfb3270..00000000
--- a/src/com.gluster.storage.management.console.help/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,8 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Gluster Management Console - Help
-Bundle-SymbolicName: com.gluster.storage.management.console.help; singleton:=true
-Bundle-Version: 1.0.0
-Bundle-Vendor: GLUSTER
-Require-Bundle: org.eclipse.help.ui;bundle-version="3.5.2",
- org.eclipse.help.webapp;bundle-version="3.5.2"
diff --git a/src/com.gluster.storage.management.console.help/build.properties b/src/com.gluster.storage.management.console.help/build.properties
deleted file mode 100644
index 3c05d072..00000000
--- a/src/com.gluster.storage.management.console.help/build.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-bin.includes = plugin.xml,\
- META-INF/,\
- html/,\
- *.xml
diff --git a/src/com.gluster.storage.management.console.help/html/help_home.html b/src/com.gluster.storage.management.console.help/html/help_home.html
deleted file mode 100644
index cfd6489d..00000000
--- a/src/com.gluster.storage.management.console.help/html/help_home.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Gluster Management Console</title>
-</head>
-<body>
-Gluster Management Console Help Home Page
-</body>
-</html> \ No newline at end of file
diff --git a/src/com.gluster.storage.management.console.help/html/toc.html b/src/com.gluster.storage.management.console.help/html/toc.html
deleted file mode 100644
index 326f0a9f..00000000
--- a/src/com.gluster.storage.management.console.help/html/toc.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-
-<html>
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
- <title>Table of Contents</title>
-</head>
-
-<body>
-<h1>Table of Contents</h1>
-Please enter your text here.
-</body>
-</html> \ No newline at end of file
diff --git a/src/com.gluster.storage.management.console.help/plugin.xml b/src/com.gluster.storage.management.console.help/plugin.xml
deleted file mode 100644
index 0b62d954..00000000
--- a/src/com.gluster.storage.management.console.help/plugin.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.4"?>
-<plugin>
-
- <extension
- point="org.eclipse.help.toc">
- <toc
- file="toc.xml"
- primary="true">
- </toc>
- <toc
- file="tocconcepts.xml">
- </toc>
- <toc
- file="tocgettingstarted.xml">
- </toc>
- <toc
- file="tocreference.xml">
- </toc>
- <toc
- file="toctasks.xml">
- </toc>
- </extension>
-
-</plugin>
diff --git a/src/com.gluster.storage.management.console.help/toc.xml b/src/com.gluster.storage.management.console.help/toc.xml
deleted file mode 100644
index 963995c6..00000000
--- a/src/com.gluster.storage.management.console.help/toc.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?NLS TYPE="org.eclipse.help.toc"?>
-
-<toc label="Gluster Management Console - Help" topic="html/toc.html">
- <topic label="Getting Started">
- <anchor id="gettingstarted"/>
- </topic>
- <topic label="Concepts">
- <anchor id="concepts"/>
- </topic>
- <topic label="Tasks">
- <anchor id="tasks"/>
- </topic>
- <topic label="Reference">
- <anchor id="reference"/>
- </topic>
-</toc>
diff --git a/src/com.gluster.storage.management.console.help/tocconcepts.xml b/src/com.gluster.storage.management.console.help/tocconcepts.xml
deleted file mode 100644
index d01f925e..00000000
--- a/src/com.gluster.storage.management.console.help/tocconcepts.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?NLS TYPE="org.eclipse.help.toc"?>
-
-<toc label="Concepts" link_to="toc.xml#concepts">
- <topic label="Main Topic" href="html/concepts/maintopic.html">
- <topic label="Sub Topic" href="html/concepts/subtopic.html" />
- </topic>
- <topic label="Main Topic 2">
- <topic label="Sub Topic 2" href="html/concepts/subtopic2.html" />
- </topic>
-</toc>
diff --git a/src/com.gluster.storage.management.console.help/tocgettingstarted.xml b/src/com.gluster.storage.management.console.help/tocgettingstarted.xml
deleted file mode 100644
index 38f27e0b..00000000
--- a/src/com.gluster.storage.management.console.help/tocgettingstarted.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?NLS TYPE="org.eclipse.help.toc"?>
-
-<toc label="Getting Started" link_to="toc.xml#gettingstarted">
- <topic label="Main Topic" href="html/gettingstarted/maintopic.html">
- <topic label="Sub Topic" href="html/gettingstarted/subtopic.html" />
- </topic>
- <topic label="Main Topic 2">
- <topic label="Sub Topic 2" href="html/gettingstarted/subtopic2.html" />
- </topic>
-</toc>
diff --git a/src/com.gluster.storage.management.console.help/tocreference.xml b/src/com.gluster.storage.management.console.help/tocreference.xml
deleted file mode 100644
index 660cdecc..00000000
--- a/src/com.gluster.storage.management.console.help/tocreference.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?NLS TYPE="org.eclipse.help.toc"?>
-
-<toc label="Reference" link_to="toc.xml#reference">
- <topic label="Main Topic" href="html/reference/maintopic.html">
- <topic label="Sub Topic" href="html/reference/subtopic.html" />
- </topic>
- <topic label="Main Topic 2">
- <topic label="Sub Topic 2" href="html/reference/subtopic2.html" />
- </topic>
-</toc>
diff --git a/src/com.gluster.storage.management.console.help/toctasks.xml b/src/com.gluster.storage.management.console.help/toctasks.xml
deleted file mode 100644
index c96b94bb..00000000
--- a/src/com.gluster.storage.management.console.help/toctasks.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?NLS TYPE="org.eclipse.help.toc"?>
-
-<toc label="Tasks" link_to="toc.xml#tasks">
- <topic label="Main Topic" href="html/tasks/maintopic.html">
- <topic label="Sub Topic" href="html/tasks/subtopic.html" />
- </topic>
- <topic label="Main Topic 2">
- <topic label="Sub Topic 2" href="html/tasks/subtopic2.html" />
- </topic>
-</toc>
diff --git a/src/com.gluster.storage.management.core/META-INF/MANIFEST.MF b/src/com.gluster.storage.management.core/META-INF/MANIFEST.MF
deleted file mode 100644
index b4431f53..00000000
--- a/src/com.gluster.storage.management.core/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,14 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Gluster Storage Platform Core
-Bundle-SymbolicName: com.gluster.storage.management.core
-Bundle-Version: 1.0.0
-Bundle-Vendor: GLUSTER
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
-Export-Package: com.gluster.storage.management.core.constants,
- com.gluster.storage.management.core.exceptions,
- com.gluster.storage.management.core.model,
- com.gluster.storage.management.core.response,
- com.gluster.storage.management.core.utils
-Require-Bundle: org.eclipse.core.runtime;bundle-version="3.6.0"
-Bundle-ClassPath: .
diff --git a/src/com.gluster.storage.management.core/build.properties b/src/com.gluster.storage.management.core/build.properties
deleted file mode 100644
index 89d32a46..00000000
--- a/src/com.gluster.storage.management.core/build.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
- .,\
- lib/
-src.includes = lib/,\
- src/
diff --git a/src/com.gluster.storage.management.core/junit/com/gluster/storage/management/core/utils/TestFileUtil.java b/src/com.gluster.storage.management.core/junit/com/gluster/storage/management/core/utils/TestFileUtil.java
deleted file mode 100644
index f562a53c..00000000
--- a/src/com.gluster.storage.management.core/junit/com/gluster/storage/management/core/utils/TestFileUtil.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/**
- * TestFileUtil.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.core.utils;
-
-import static org.junit.Assert.assertTrue;
-
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.OutputStreamWriter;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-public class TestFileUtil {
- private String testFileName;
- private String fileContent;
- private FileUtil fileUtil;
-
- /**
- * @throws java.lang.Exception
- */
- @Before
- public void setUp() throws Exception {
- testFileName = "testFileUtil.txt";
- fileContent = "Testing FileUtil class.";
- fileUtil = new FileUtil();
-
- BufferedOutputStream outStream = new BufferedOutputStream(new FileOutputStream(testFileName));
- OutputStreamWriter writer = new OutputStreamWriter(outStream);
- writer.write(fileContent);
- writer.close();
- outStream.close();
- }
-
- /**
- * @throws java.lang.Exception
- */
- @After
- public void tearDown() throws Exception {
- File testFile = new File(testFileName);
- testFile.delete();
- }
-
- /**
- * Test method for {@link com.gluster.storage.management.core.utils.FileUtil#readFileAsString(java.io.File)}.
- */
- @Test
- public final void testReadFileAsString() {
- String readContent = fileUtil.readFileAsString(new File(testFileName));
- assertTrue("File contents expected [" + fileContent + "], actual [" + readContent + "]",
- readContent.equals(fileContent));
- }
-}
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/exceptions/GlusterValidationException.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/exceptions/GlusterValidationException.java
deleted file mode 100644
index ca5e01f8..00000000
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/exceptions/GlusterValidationException.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*******************************************************************************
- * 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.core.exceptions;
-
-public class GlusterValidationException extends GlusterRuntimeException {
- private static final long serialVersionUID = 1L;
-
- public GlusterValidationException(String message) {
- super(message);
- }
-}
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/AbstractResponse.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/AbstractResponse.java
deleted file mode 100644
index 9a6a48f5..00000000
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/AbstractResponse.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
- * 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.core.response;
-
-import com.gluster.storage.management.core.model.Response;
-import com.gluster.storage.management.core.model.Status;
-
-public abstract class AbstractResponse implements Response {
- private Status status;
-
- @Override
- public Status getStatus() {
- return status;
- }
-
- public void setStatus(Status status) {
- this.status = status;
- }
-} \ No newline at end of file
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/GenericResponse.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/GenericResponse.java
deleted file mode 100644
index 6c8e87b5..00000000
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/GenericResponse.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * GenericServerResponse.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.core.response;
-
-import javax.xml.bind.annotation.XmlRootElement;
-
-import com.gluster.storage.management.core.model.Status;
-
-@XmlRootElement(name = "response")
-public class GenericResponse<T> extends AbstractResponse {
- private T data;
- private Status status;
-
- @Override
- public Status getStatus() {
- return status;
- }
-
- public void setStatus(Status status) {
- this.status = status;
- }
-
- public GenericResponse(Status status, T data) {
- setStatus(status);
- this.data = data;
- }
-
- public GenericResponse() {
- }
-
- @Override
- public T getData() {
- return data;
- }
-
- public void setData(T data) {
- this.data = data;
- }
-
-}
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/GlusterServerResponse.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/GlusterServerResponse.java
deleted file mode 100644
index 7af9b240..00000000
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/GlusterServerResponse.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.gluster.storage.management.core.response;
-
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlTransient;
-
-import com.gluster.storage.management.core.model.GlusterServer;
-import com.gluster.storage.management.core.model.Status;
-
-@XmlRootElement(name = "response")
-public class GlusterServerResponse extends AbstractResponse {
- private GlusterServer glusterServer;
-
- public GlusterServerResponse() {
- }
-
- public GlusterServerResponse(Status status, GlusterServer server) {
- setStatus(status);
- setGlusterServer(server);
- }
-
- public GlusterServer getGlusterServer() {
- return glusterServer;
- }
-
- public void setGlusterServer(GlusterServer glusterServer) {
- this.glusterServer = glusterServer;
- }
-
- @XmlTransient
- @Override
- public GlusterServer getData() {
- return getGlusterServer();
- }
-
-}
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/LogMessageListResponse.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/LogMessageListResponse.java
deleted file mode 100644
index 8c362fa9..00000000
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/LogMessageListResponse.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- *
- */
-package com.gluster.storage.management.core.response;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-
-import com.gluster.storage.management.core.model.VolumeLogMessage;
-
-@XmlRootElement(name = "logMessages")
-public class LogMessageListResponse {
- private List<VolumeLogMessage> logMessages = new ArrayList<VolumeLogMessage>();
-
- public LogMessageListResponse() {
- }
-
- public LogMessageListResponse(List<VolumeLogMessage> logMessages) {
- setLogMessages(logMessages);
- }
-
- @XmlElement(name = "logMessage", type = VolumeLogMessage.class)
- public List<VolumeLogMessage> getLogMessages() {
- return logMessages;
- }
-
- public void setLogMessages(List<VolumeLogMessage> logMessages) {
- this.logMessages = logMessages;
- }
-}
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/TaskResponse.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/TaskResponse.java
deleted file mode 100755
index a11c9903..00000000
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/TaskResponse.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * TaskInfoResponse.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.core.response;
-
-import javax.xml.bind.annotation.XmlRootElement;
-
-import com.gluster.storage.management.core.model.Status;
-import com.gluster.storage.management.core.model.TaskInfo;
-
-@XmlRootElement(name = "response")
-public class TaskResponse extends AbstractResponse {
- private TaskInfo taskInfo;
- private Status status;
-
- public TaskResponse() {
- }
-
- public Status getStatus() {
- return status;
- }
-
- public void setStatus(Status status) {
- this.status = status;
- }
-
- public void setData(TaskInfo taskInfo) {
- this.taskInfo = taskInfo;
- }
-
- @Override
- public TaskInfo getData() {
- return taskInfo;
- }
-}
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/VolumeListResponse.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/VolumeListResponse.java
deleted file mode 100644
index 6518f0d5..00000000
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/response/VolumeListResponse.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.gluster.storage.management.core.response;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-
-import com.gluster.storage.management.core.model.Volume;
-
-@XmlRootElement(name = "volumes")
-public class VolumeListResponse {
- private List<Volume> volumes = new ArrayList<Volume>();
-
- public VolumeListResponse() {
-
- }
-
- public VolumeListResponse(List<Volume> volumes) {
- setVolumes(volumes);
- }
-
- @XmlElement(name = "volume", type = Volume.class)
- public List<Volume> getVolumes() {
- return this.volumes;
- }
-
- public void setVolumes(List<Volume> volumes) {
- this.volumes = volumes;
- }
-}
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/MD5.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/MD5.java
deleted file mode 100644
index e0daaf81..00000000
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/MD5.java
+++ /dev/null
@@ -1,504 +0,0 @@
-/*
- * MD5 in Java JDK Beta-2
- * written Santeri Paavolainen, Helsinki Finland 1996
- * (c) Santeri Paavolainen, Helsinki Finland 1996
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- *
- * See http://www.cs.hut.fi/~santtu/java/ for more information on this
- * class.
- *
- * This is rather straight re-implementation of the reference implementation
- * given in RFC1321 by RSA.
- *
- * Passes MD5 test suite as defined in RFC1321.
- *
- *
- * This Java class has been derivedfrom the RSA Data Security, Inc. MD5
- * Message-Digest Algorithm and its reference implementation.
- *
- *
- * $Log: MD5.java,v $
- * Revision 1.1 2004/07/12 13:35:20 aubryp
- * initial commit
- *
- * Revision 1.3 2002/03/16 01:46:39 broccol
- * Moved the MD5 classes into the md5 package to make 1.4 javac happy
- *
- * Revision 1.2 1999/11/04 21:38:00 broccol
- * Got MD5Crypt calculating the same hash as the OpenBSD md5crypt.c routine.
- *
- * Revision 1.1 1999/08/05 22:07:03 broccol
- * Added support for the MD5 classes.
- *
- * Revision 1.3 1996/04/15 07:28:09 santtu
- * Added GPL statements, and RSA derivate statements.
- *
- * Revision 1.2 1996/03/04 08:05:48 santtu
- * Added offsets to Update method
- *
- * Revision 1.1 1996/01/07 20:51:59 santtu
- * Initial revision
- *
- */
-package com.gluster.storage.management.core.utils;
-
-/**
- * Contains internal state of the MD5 class
- *
- * @author Santeri Paavolainen <sjpaavol@cc.helsinki.fi>
- */
-
-class MD5State {
- /**
- * 128-byte state
- */
- int state[];
-
- /**
- * 64-bit character count (could be true Java long?)
- */
- int count[];
-
- /**
- * 64-byte buffer (512 bits) for storing to-be-hashed characters
- */
- byte buffer[];
-
- public MD5State() {
- buffer = new byte[64];
- count = new int[2];
- state = new int[4];
-
- state[0] = 0x67452301;
- state[1] = 0xefcdab89;
- state[2] = 0x98badcfe;
- state[3] = 0x10325476;
-
- count[0] = count[1] = 0;
- }
-
- /** Create this State as a copy of another state */
- public MD5State(MD5State from) {
- this ();
-
- int i;
-
- for (i = 0; i < buffer.length; i++)
- this .buffer[i] = from.buffer[i];
-
- for (i = 0; i < state.length; i++)
- this .state[i] = from.state[i];
-
- for (i = 0; i < count.length; i++)
- this .count[i] = from.count[i];
- }
-};
-
-/**
- * Implementation of RSA's MD5 hash generator
- *
- * @version $Revision: 1.1 $
- * @author Santeri Paavolainen <sjpaavol@cc.helsinki.fi>
- */
-
-public class MD5 {
- /**
- * MD5 state
- */
- MD5State state;
-
- /**
- * If Final() has been called, finals is set to the current finals
- * state. Any Update() causes this to be set to null.
- */
- MD5State finals;
-
- /**
- * Padding for Final()
- */
- static byte padding[] = { (byte) 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
-
- /**
- * Initialize MD5 internal state (object can be reused just by
- * calling Init() after every Final()
- */
- public synchronized void Init() {
- state = new MD5State();
- finals = null;
- }
-
- /**
- * Class constructor
- */
- public MD5() {
- this .Init();
- }
-
- /**
- * Initialize class, and update hash with ob.toString()
- *
- * @param ob Object, ob.toString() is used to update hash
- * after initialization
- */
- public MD5(Object ob) {
- this ();
- Update(ob.toString());
- }
-
- public String debugDump() {
- return asHex();
- }
-
- private int rotate_left(int x, int n) {
- return (x << n) | (x >>> (32 - n));
- }
-
- /* I wonder how many loops and hoops you'll have to go through to
- get unsigned add for longs in java */
-
- private int uadd(int a, int b) {
- long aa, bb;
- aa = ((long) a) & 0xffffffffL;
- bb = ((long) b) & 0xffffffffL;
-
- aa += bb;
-
- return (int) (aa & 0xffffffffL);
- }
-
- private int uadd(int a, int b, int c) {
- return uadd(uadd(a, b), c);
- }
-
- private int uadd(int a, int b, int c, int d) {
- return uadd(uadd(a, b, c), d);
- }
-
- private int FF(int a, int b, int c, int d, int x, int s, int ac) {
- a = uadd(a, ((b & c) | (~b & d)), x, ac);
- return uadd(rotate_left(a, s), b);
- }
-
- private int GG(int a, int b, int c, int d, int x, int s, int ac) {
- a = uadd(a, ((b & d) | (c & ~d)), x, ac);
- return uadd(rotate_left(a, s), b);
- }
-
- private int HH(int a, int b, int c, int d, int x, int s, int ac) {
- a = uadd(a, (b ^ c ^ d), x, ac);
- return uadd(rotate_left(a, s), b);
- }
-
- private int II(int a, int b, int c, int d, int x, int s, int ac) {
- a = uadd(a, (c ^ (b | ~d)), x, ac);
- return uadd(rotate_left(a, s), b);
- }
-
- private int[] Decode(byte buffer[], int len, int shift) {
- int out[];
- int i, j;
-
- out = new int[16];
-
- for (i = j = 0; j < len; i++, j += 4) {
- out[i] = ((int) (buffer[j + shift] & 0xff))
- | (((int) (buffer[j + 1 + shift] & 0xff)) << 8)
- | (((int) (buffer[j + 2 + shift] & 0xff)) << 16)
- | (((int) (buffer[j + 3 + shift] & 0xff)) << 24);
- }
-
- return out;
- }
-
- private void Transform(MD5State state, byte buffer[], int shift) {
- int a = state.state[0], b = state.state[1], c = state.state[2], d = state.state[3], x[];
-
- x = Decode(buffer, 64, shift);
-
- /* Round 1 */
- a = FF(a, b, c, d, x[0], 7, 0xd76aa478); /* 1 */
- d = FF(d, a, b, c, x[1], 12, 0xe8c7b756); /* 2 */
- c = FF(c, d, a, b, x[2], 17, 0x242070db); /* 3 */
- b = FF(b, c, d, a, x[3], 22, 0xc1bdceee); /* 4 */
- a = FF(a, b, c, d, x[4], 7, 0xf57c0faf); /* 5 */
- d = FF(d, a, b, c, x[5], 12, 0x4787c62a); /* 6 */
- c = FF(c, d, a, b, x[6], 17, 0xa8304613); /* 7 */
- b = FF(b, c, d, a, x[7], 22, 0xfd469501); /* 8 */
- a = FF(a, b, c, d, x[8], 7, 0x698098d8); /* 9 */
- d = FF(d, a, b, c, x[9], 12, 0x8b44f7af); /* 10 */
- c = FF(c, d, a, b, x[10], 17, 0xffff5bb1); /* 11 */
- b = FF(b, c, d, a, x[11], 22, 0x895cd7be); /* 12 */
- a = FF(a, b, c, d, x[12], 7, 0x6b901122); /* 13 */
- d = FF(d, a, b, c, x[13], 12, 0xfd987193); /* 14 */
- c = FF(c, d, a, b, x[14], 17, 0xa679438e); /* 15 */
- b = FF(b, c, d, a, x[15], 22, 0x49b40821); /* 16 */
-
- /* Round 2 */
- a = GG(a, b, c, d, x[1], 5, 0xf61e2562); /* 17 */
- d = GG(d, a, b, c, x[6], 9, 0xc040b340); /* 18 */
- c = GG(c, d, a, b, x[11], 14, 0x265e5a51); /* 19 */
- b = GG(b, c, d, a, x[0], 20, 0xe9b6c7aa); /* 20 */
- a = GG(a, b, c, d, x[5], 5, 0xd62f105d); /* 21 */
- d = GG(d, a, b, c, x[10], 9, 0x2441453); /* 22 */
- c = GG(c, d, a, b, x[15], 14, 0xd8a1e681); /* 23 */
- b = GG(b, c, d, a, x[4], 20, 0xe7d3fbc8); /* 24 */
- a = GG(a, b, c, d, x[9], 5, 0x21e1cde6); /* 25 */
- d = GG(d, a, b, c, x[14], 9, 0xc33707d6); /* 26 */
- c = GG(c, d, a, b, x[3], 14, 0xf4d50d87); /* 27 */
- b = GG(b, c, d, a, x[8], 20, 0x455a14ed); /* 28 */
- a = GG(a, b, c, d, x[13], 5, 0xa9e3e905); /* 29 */
- d = GG(d, a, b, c, x[2], 9, 0xfcefa3f8); /* 30 */
- c = GG(c, d, a, b, x[7], 14, 0x676f02d9); /* 31 */
- b = GG(b, c, d, a, x[12], 20, 0x8d2a4c8a); /* 32 */
-
- /* Round 3 */
- a = HH(a, b, c, d, x[5], 4, 0xfffa3942); /* 33 */
- d = HH(d, a, b, c, x[8], 11, 0x8771f681); /* 34 */
- c = HH(c, d, a, b, x[11], 16, 0x6d9d6122); /* 35 */
- b = HH(b, c, d, a, x[14], 23, 0xfde5380c); /* 36 */
- a = HH(a, b, c, d, x[1], 4, 0xa4beea44); /* 37 */
- d = HH(d, a, b, c, x[4], 11, 0x4bdecfa9); /* 38 */
- c = HH(c, d, a, b, x[7], 16, 0xf6bb4b60); /* 39 */
- b = HH(b, c, d, a, x[10], 23, 0xbebfbc70); /* 40 */
- a = HH(a, b, c, d, x[13], 4, 0x289b7ec6); /* 41 */
- d = HH(d, a, b, c, x[0], 11, 0xeaa127fa); /* 42 */
- c = HH(c, d, a, b, x[3], 16, 0xd4ef3085); /* 43 */
- b = HH(b, c, d, a, x[6], 23, 0x4881d05); /* 44 */
- a = HH(a, b, c, d, x[9], 4, 0xd9d4d039); /* 45 */
- d = HH(d, a, b, c, x[12], 11, 0xe6db99e5); /* 46 */
- c = HH(c, d, a, b, x[15], 16, 0x1fa27cf8); /* 47 */
- b = HH(b, c, d, a, x[2], 23, 0xc4ac5665); /* 48 */
-
- /* Round 4 */
- a = II(a, b, c, d, x[0], 6, 0xf4292244); /* 49 */
- d = II(d, a, b, c, x[7], 10, 0x432aff97); /* 50 */
- c = II(c, d, a, b, x[14], 15, 0xab9423a7); /* 51 */
- b = II(b, c, d, a, x[5], 21, 0xfc93a039); /* 52 */
- a = II(a, b, c, d, x[12], 6, 0x655b59c3); /* 53 */
- d = II(d, a, b, c, x[3], 10, 0x8f0ccc92); /* 54 */
- c = II(c, d, a, b, x[10], 15, 0xffeff47d); /* 55 */
- b = II(b, c, d, a, x[1], 21, 0x85845dd1); /* 56 */
- a = II(a, b, c, d, x[8], 6, 0x6fa87e4f); /* 57 */
- d = II(d, a, b, c, x[15], 10, 0xfe2ce6e0); /* 58 */
- c = II(c, d, a, b, x[6], 15, 0xa3014314); /* 59 */
- b = II(b, c, d, a, x[13], 21, 0x4e0811a1); /* 60 */
- a = II(a, b, c, d, x[4], 6, 0xf7537e82); /* 61 */
- d = II(d, a, b, c, x[11], 10, 0xbd3af235); /* 62 */
- c = II(c, d, a, b, x[2], 15, 0x2ad7d2bb); /* 63 */
- b = II(b, c, d, a, x[9], 21, 0xeb86d391); /* 64 */
-
- state.state[0] += a;
- state.state[1] += b;
- state.state[2] += c;
- state.state[3] += d;
- }
-
- /**
- * Updates hash with the bytebuffer given (using at maximum length bytes from
- * that buffer)
- *
- * @param stat Which state is updated
- * @param buffer Array of bytes to be hashed
- * @param offset Offset to buffer array
- * @param length Use at maximum `length' bytes (absolute
- * maximum is buffer.length)
- */
- public void Update(MD5State stat, byte buffer[], int offset,
- int length) {
- int index, partlen, i, start;
-
- finals = null;
-
- /* Length can be told to be shorter, but not inter */
- if ((length - offset) > buffer.length)
- length = buffer.length - offset;
-
- /* compute number of bytes mod 64 */
- index = (int) (stat.count[0] >>> 3) & 0x3f;
-
- if ((stat.count[0] += (length << 3)) < (length << 3))
- stat.count[1]++;
-
- stat.count[1] += length >>> 29;
-
- partlen = 64 - index;
-
- if (length >= partlen) {
- for (i = 0; i < partlen; i++)
- stat.buffer[i + index] = buffer[i + offset];
-
- Transform(stat, stat.buffer, 0);
-
- for (i = partlen; (i + 63) < length; i += 64)
- Transform(stat, buffer, i);
-
- index = 0;
- } else
- i = 0;
-
- /* buffer remaining input */
- if (i < length) {
- start = i;
- for (; i < length; i++)
- stat.buffer[index + i - start] = buffer[i + offset];
- }
- }
-
- /*
- * Update()s for other datatypes than byte[] also. Update(byte[], int)
- * is only the main driver.
- */
-
- /**
- * Plain update, updates this object
- */
-
- public void Update(byte buffer[], int offset, int length) {
- Update(this .state, buffer, offset, length);
- }
-
- public void Update(byte buffer[], int length) {
- Update(this .state, buffer, 0, length);
- }
-
- /**
- * Updates hash with given array of bytes
- *
- * @param buffer Array of bytes to use for updating the hash
- */
- public void Update(byte buffer[]) {
- Update(buffer, 0, buffer.length);
- }
-
- /**
- * Updates hash with a single byte
- *
- * @param b Single byte to update the hash
- */
- public void Update(byte b) {
- byte buffer[] = new byte[1];
- buffer[0] = b;
-
- Update(buffer, 1);
- }
-
- /**
- * Update buffer with given string.
- *
- * @param s String to be update to hash (is used as
- * s.getBytes())
- */
- public void Update(String s) {
- byte chars[];
-
- chars = s.getBytes();
-
- Update(chars, chars.length);
- }
-
- private byte[] Encode(int input[], int len) {
- int i, j;
- byte out[];
-
- out = new byte[len];
-
- for (i = j = 0; j < len; i++, j += 4) {
- out[j] = (byte) (input[i] & 0xff);
- out[j + 1] = (byte) ((input[i] >>> 8) & 0xff);
- out[j + 2] = (byte) ((input[i] >>> 16) & 0xff);
- out[j + 3] = (byte) ((input[i] >>> 24) & 0xff);
- }
-
- return out;
- }
-
- /**
- * Returns array of bytes (16 bytes) representing hash as of the
- * current state of this object. Note: getting a hash does not
- * invalidate the hash object, it only creates a copy of the real
- * state which is finalized.
- *
- * @return Array of 16 bytes, the hash of all updated bytes
- */
- public synchronized byte[] Final() {
- byte bits[];
- int index, padlen;
- MD5State fin;
-
- if (finals == null) {
- fin = new MD5State(state);
-
- bits = Encode(fin.count, 8);
-
- index = (int) ((fin.count[0] >>> 3) & 0x3f);
- padlen = (index < 56) ? (56 - index) : (120 - index);
-
- Update(fin, padding, 0, padlen);
- /**/
- Update(fin, bits, 0, 8);
-
- /* Update() sets finalds to null */
- finals = fin;
- }
-
- return Encode(finals.state, 16);
- }
-
- /**
- * Turns array of bytes into string representing each byte as
- * unsigned hex number.
- *
- * @param hash Array of bytes to convert to hex-string
- * @return Generated hex string
- */
- public static String asHex(byte hash[]) {
- StringBuffer buf = new StringBuffer(hash.length * 2);
- int i;
-
- for (i = 0; i < hash.length; i++) {
- if (((int) hash[i] & 0xff) < 0x10)
- buf.append("0");
-
- buf.append(Long.toString((int) hash[i] & 0xff, 16));
- }
-
- return buf.toString();
- }
-
- /**
- * Returns 32-character hex representation of this objects hash
- *
- * @return String of this object's hash
- */
- public String asHex() {
- return asHex(this .Final());
- }
-
- /**
- * One-stop md5 string encrypting.
- */
-
- public static String md5crypt(String input) {
- MD5 md5 = new MD5();
- md5.Init();
- md5.Update(input);
- return md5.asHex();
- }
-} \ No newline at end of file
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/MD5Crypt.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/MD5Crypt.java
deleted file mode 100644
index 25c757a2..00000000
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/MD5Crypt.java
+++ /dev/null
@@ -1,339 +0,0 @@
-/*------------------------------------------------------------------------------
- class
- MD5Crypt
- ------------------------------------------------------------------------------*/
-
-package com.gluster.storage.management.core.utils;
-
-
-/**
- * <p>This class defines a method,
- * {@link MD5Crypt#crypt(java.lang.String, java.lang.String) crypt()}, which
- * takes a password and a salt string and generates an OpenBSD/FreeBSD/Linux-compatible
- * md5-encoded password entry.</p>
- *
- * <p>Created: 3 November 1999</p>
- * <p>Release: $Name: $</p>
- * <p>Version: $Revision: 1.1 $</p>
- * <p>Last Mod Date: $Date: 2004/07/12 13:35:20 $</p>
- * <p>Java Code By: Jonathan Abbey, jonabbey@arlut.utexas.edu</p>
- * <p>Original C Version:<pre>
- * ----------------------------------------------------------------------------
- * "THE BEER-WARE LICENSE" (Revision 42):
- * <phk@login.dknet.dk> wrote this file. As long as you retain this notice you
- * can do whatever you want with this stuff. If we meet some day, and you think
- * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
- * ----------------------------------------------------------------------------
- * </pre></p>
- *
- * @author Jonathan Abbey <jonabbey at arlut.utexas.edu>
- */
-public final class MD5Crypt {
-
- /**
- *
- * Command line test rig.
- *
- */
-
- static public void main(String argv[]) {
- if ((argv.length < 1) || (argv.length > 3)) {
- System.err
- .println("Usage: MD5Crypt [-apache] password salt");
- System.exit(1);
- }
-
- if (argv.length == 3) {
- System.err.println(MD5Crypt.apacheCrypt(argv[1], argv[2]));
- } else if (argv.length == 2) {
- System.err.println(MD5Crypt.crypt(argv[0], argv[1]));
- } else {
- System.err.println(MD5Crypt.crypt(argv[0]));
- }
-
- System.exit(0);
- }
-
- static private final String SALTCHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
-
- static private final String itoa64 = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
-
- static private final String to64(long v, int size) {
- StringBuffer result = new StringBuffer();
-
- while (--size >= 0) {
- result.append(itoa64.charAt((int) (v & 0x3f)));
- v >>>= 6;
- }
-
- return result.toString();
- }
-
- static private final void clearbits(byte bits[]) {
- for (int i = 0; i < bits.length; i++) {
- bits[i] = 0;
- }
- }
-
- /**
- * convert an encoded unsigned byte value into a int
- * with the unsigned value.
- */
-
- static private final int bytes2u(byte inp) {
- return (int) inp & 0xff;
- }
-
- /**
- * <p>This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
- * md5-encoded password hash from a plaintext password and a
- * salt.</p>
- *
- * <p>The resulting string will be in the form '$1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
- *
- * @param password Plaintext password
- *
- * @return An OpenBSD/FreeBSD/Linux-compatible md5-hashed password field.
- */
-
- static public final String crypt(String password) {
- StringBuffer salt = new StringBuffer();
- java.util.Random randgen = new java.util.Random();
-
- /* -- */
-
- while (salt.length() < 8) {
- int index = (int) (randgen.nextFloat() * SALTCHARS.length());
- salt.append(SALTCHARS.substring(index, index + 1));
- }
-
- return MD5Crypt.crypt(password, salt.toString());
- }
-
- /**
- * <p>This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
- * md5-encoded password hash from a plaintext password and a
- * salt.</p>
- *
- * <p>The resulting string will be in the form '$1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
- *
- * @param password Plaintext password
- * @param salt A short string to use to randomize md5. May start with $1$, which
- * will be ignored. It is explicitly permitted to pass a pre-existing
- * MD5Crypt'ed password entry as the salt. crypt() will strip the salt
- * chars out properly.
- *
- * @return An OpenBSD/FreeBSD/Linux-compatible md5-hashed password field.
- */
-
- static public final String crypt(String password, String salt) {
- return MD5Crypt.crypt(password, salt, "$1$");
- }
-
- /**
- * <p>This method generates an Apache MD5 compatible
- * md5-encoded password hash from a plaintext password and a
- * salt.</p>
- *
- * <p>The resulting string will be in the form '$apr1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
- *
- * @param password Plaintext password
- *
- * @return An Apache-compatible md5-hashed password string.
- */
-
- static public final String apacheCrypt(String password) {
- StringBuffer salt = new StringBuffer();
- java.util.Random randgen = new java.util.Random();
-
- /* -- */
-
- while (salt.length() < 8) {
- int index = (int) (randgen.nextFloat() * SALTCHARS.length());
- salt.append(SALTCHARS.substring(index, index + 1));
- }
-
- return MD5Crypt.apacheCrypt(password, salt.toString());
- }
-
- /**
- * <p>This method actually generates an Apache MD5 compatible
- * md5-encoded password hash from a plaintext password and a
- * salt.</p>
- *
- * <p>The resulting string will be in the form '$apr1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
- *
- * @param password Plaintext password
- * @param salt A short string to use to randomize md5. May start with $apr1$, which
- * will be ignored. It is explicitly permitted to pass a pre-existing
- * MD5Crypt'ed password entry as the salt. crypt() will strip the salt
- * chars out properly.
- *
- * @return An Apache-compatible md5-hashed password string.
- */
-
- static public final String apacheCrypt(String password, String salt) {
- return MD5Crypt.crypt(password, salt, "$apr1$");
- }
-
- /**
- * <p>This method actually generates md5-encoded password hash from
- * a plaintext password, a salt, and a magic string.</p>
- *
- * <p>There are two magic strings that make sense to use here.. '$1$' is the
- * magic string used by the FreeBSD/Linux/OpenBSD MD5Crypt algorithm, and
- * '$apr1$' is the magic string used by the Apache MD5Crypt algorithm.</p>
- *
- * <p>The resulting string will be in the form '&lt;magic&gt;&lt;salt&gt;$&lt;hashed mess&gt;</p>
- *
- * @param password Plaintext password @param salt A short string to
- * use to randomize md5. May start with the magic string, which
- * will be ignored. It is explicitly permitted to pass a
- * pre-existing MD5Crypt'ed password entry as the salt. crypt()
- * will strip the salt chars out properly.
- *
- * @return An md5-hashed password string.
- */
-
- static public final String crypt(String password, String salt,
- String magic) {
- /* This string is magic for this algorithm. Having it this way,
- * we can get get better later on */
-
- byte finalState[];
- MD5 ctx, ctx1;
- long l;
-
- /* -- */
-
- /* Refine the Salt first */
-
- /* If it starts with the magic string, then skip that */
-
- if (salt.startsWith(magic)) {
- salt = salt.substring(magic.length());
- }
-
- /* It stops at the first '$', max 8 chars */
-
- if (salt.indexOf('$') != -1) {
- salt = salt.substring(0, salt.indexOf('$'));
- }
-
- if (salt.length() > 8) {
- salt = salt.substring(0, 8);
- }
-
- ctx = new MD5();
-
- ctx.Update(password); // The password first, since that is what is most unknown
- ctx.Update(magic); // Then our magic string
- ctx.Update(salt); // Then the raw salt
-
- /* Then just as many characters of the MD5(pw,salt,pw) */
-
- ctx1 = new MD5();
- ctx1.Update(password);
- ctx1.Update(salt);
- ctx1.Update(password);
- finalState = ctx1.Final();
-
- for (int pl = password.length(); pl > 0; pl -= 16) {
- ctx.Update(finalState, pl > 16 ? 16 : pl);
- }
-
- /* the original code claimed that finalState was being cleared
- to keep dangerous bits out of memory, but doing this is also
- required in order to get the right output. */
-
- clearbits(finalState);
-
- /* Then something really weird... */
-
- for (int i = password.length(); i != 0; i >>>= 1) {
- if ((i & 1) != 0) {
- ctx.Update(finalState, 1);
- } else {
- ctx.Update(password.getBytes(), 1);
- }
- }
-
- finalState = ctx.Final();
-
- /*
- * and now, just to make sure things don't run too fast
- * On a 60 Mhz Pentium this takes 34 msec, so you would
- * need 30 seconds to build a 1000 entry dictionary...
- *
- * (The above timings from the C version)
- */
-
- for (int i = 0; i < 1000; i++) {
- ctx1 = new MD5();
-
- if ((i & 1) != 0) {
- ctx1.Update(password);
- } else {
- ctx1.Update(finalState, 16);
- }
-
- if ((i % 3) != 0) {
- ctx1.Update(salt);
- }
-
- if ((i % 7) != 0) {
- ctx1.Update(password);
- }
-
- if ((i & 1) != 0) {
- ctx1.Update(finalState, 16);
- } else {
- ctx1.Update(password);
- }
-
- finalState = ctx1.Final();
- }
-
- /* Now make the output string */
-
- StringBuffer result = new StringBuffer();
-
- result.append(magic);
- result.append(salt);
- result.append("$");
-
- l = (bytes2u(finalState[0]) << 16)
- | (bytes2u(finalState[6]) << 8)
- | bytes2u(finalState[12]);
- result.append(to64(l, 4));
-
- l = (bytes2u(finalState[1]) << 16)
- | (bytes2u(finalState[7]) << 8)
- | bytes2u(finalState[13]);
- result.append(to64(l, 4));
-
- l = (bytes2u(finalState[2]) << 16)
- | (bytes2u(finalState[8]) << 8)
- | bytes2u(finalState[14]);
- result.append(to64(l, 4));
-
- l = (bytes2u(finalState[3]) << 16)
- | (bytes2u(finalState[9]) << 8)
- | bytes2u(finalState[15]);
- result.append(to64(l, 4));
-
- l = (bytes2u(finalState[4]) << 16)
- | (bytes2u(finalState[10]) << 8)
- | bytes2u(finalState[5]);
- result.append(to64(l, 4));
-
- l = bytes2u(finalState[11]);
- result.append(to64(l, 2));
-
- /* Don't leave anything around in vm they could use. */
- clearbits(finalState);
-
- return result.toString();
- }
-}
-
diff --git a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/ProcessUtil.java b/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/ProcessUtil.java
deleted file mode 100644
index 507c6d95..00000000
--- a/src/com.gluster.storage.management.core/src/com/gluster/storage/management/core/utils/ProcessUtil.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*******************************************************************************
- * 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.core.utils;
-
-import static com.gluster.storage.management.core.constants.CoreConstants.NEWLINE;
-
-import java.io.BufferedReader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.List;
-
-import com.gluster.storage.management.core.exceptions.GlusterRuntimeException;
-
-/**
- * Utility class for creating processes (foreground/background) with given
- * command and checking the output/exit status
- */
-public class ProcessUtil {
-
- private static final ProcessUtil instance = new ProcessUtil();
-
- public ProcessResult executeCommand(List<String> command) {
- return executeCommand(true, command);
- }
-
- /**
- * Executes given command in a separate process in FOREGROUND
- * @param command
- * @return {@link ProcessResult} object
- */
- public ProcessResult executeCommand(String... command) {
- ArrayList<String> commandList = new ArrayList<String>();
- for (String part : command) {
- commandList.add(part);
- }
- return executeCommand(commandList);
- }
-
- /**
- * Executes given command in foreground/background
- * @param runInForeground Boolean flag indicating whether the command should
- * be executed in foreground
- * @param command
- * @return {@link ProcessResult} object
- */
- public ProcessResult executeCommand(boolean runInForeground, List<String> command) {
- StringBuilder output = new StringBuilder();
- try {
- Process process = new ProcessBuilder(command).redirectErrorStream(true).start();
-
- if (runInForeground) {
- process.waitFor(); // Wait for process to finish
-
- InputStream is = process.getInputStream();
- InputStreamReader isr = new InputStreamReader(is);
- BufferedReader br = new BufferedReader(isr);
- String line;
-
- while ((line = br.readLine()) != null) {
- output.append(line);
- output.append(NEWLINE);
- }
- } else {
- output.append("Command [");
- output.append(command);
- output.append("] triggerred in background.");
- }
-
- return new ProcessResult(process.exitValue(), output.toString());
- } catch (Throwable e) {
- throw new GlusterRuntimeException("Exception while executing command [" + command + "]", e);
- }
- }
-
- public static void main(String args[]) {
- ProcessResult result = new ProcessUtil().executeCommand("ls", "-lrt", "/");
- System.out.println(result.getExitValue());
- System.out.println(result.getOutput());
- }
-}
diff --git a/src/com.gluster.storage.management.gateway.scripts/.project b/src/com.gluster.storage.management.gateway.scripts/.project
deleted file mode 100644
index 110db62b..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>com.gluster.storage.management.gateway.scripts</name>
- <comment></comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.python.pydev.PyDevBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.python.pydev.pythonNature</nature>
- </natures>
-</projectDescription>
diff --git a/src/com.gluster.storage.management.gateway.scripts/.pydevproject b/src/com.gluster.storage.management.gateway.scripts/.pydevproject
deleted file mode 100644
index c327cd69..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/.pydevproject
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?eclipse-pydev version="1.0"?>
-
-<pydev_project>
-<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
-<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 3.0</pydev_property>
-<pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH">
-<path>/com.gluster.storage.management.gateway.scripts/src</path>
-</pydev_pathproperty>
-</pydev_project>
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/Commands.py b/src/com.gluster.storage.management.gateway.scripts/src/Commands.py
deleted file mode 100644
index c728b565..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/Commands.py
+++ /dev/null
@@ -1,78 +0,0 @@
-COMMAND_CREATE_VOLUME = "create-volume"
-COMMAND_DELETE_VOLUME = "delete-volume"
-COMMAND_START_VOLUME = "start-volume"
-COMMAND_STOP_VOLUME = "stop-volume"
-COMMAND_GET_VOLUME_HEALTH_STATUS = "get-volume-health-status"
-COMMAND_GET_VOLUME_LIST = "get-volume-list"
-COMMAND_GET_VOLUME_LOG = "get-volume-log"
-COMMAND_CLEAR_VOLUME_LOGS = "clear-volume-logs"
-COMMAND_GET_VOLUME_PROPERTY = "get-volume-property"
-COMMAND_SET_VOLUME_PROPERTY = "set-volume-property"
-COMMAND_GET_VOLUME_STATUS = "get-volume-status"
-COMMAND_DOWNLOAD_VOLUME_LOGS = "download-volume-logs"
-COMMAND_DELETE_SERVER = "delete-server"
-COMMAND_GET_SERVER_DATE = "get-server-date"
-COMMAND_GET_SERVER_VERSION_INFO = "get-server-version-info"
-COMMAND_GET_INSTALLER_INFO = "get-installer-info"
-COMMAND_GET_SERVER_LIST = "get-server-list"
-COMMAND_GET_SERVER_SERVICE_STATUS = "get-server-service-status"
-COMMAND_GET_STORAGE_SERVER_POOL_INFO = "get-storage-server-pool-info"
-COMMAND_INSTALL_SERVER_BACKGROUND = "install-server-background"
-COMMAND_PREPARE_DATA_DISK_BACKGROUND = "prepare-data-disk-background"
-COMMAND_SET_SERVER_DATE = "set-server-date"
-COMMAND_SET_SERVER_NETWORK_CONFIG = "set-server-network-config"
-COMMAND_SET_STORAGE_SERVER_POOL_INFO = "set-storage-server-pool-info"
-COMMAND_GET_SERVER_NETWORK_CONFIG = "get-server-network-config"
-COMMAND_INSTALL_SERVER_STATUS = "install-server-status"
-COMMAND_GET_SERVER_DISK_LIST = "get-server-disk-list"
-COMMAND_PREPARE_DATA_DISK_STATUS = "prepare-data-disk-status"
-COMMAND_GET_SERVER_SYSTEM_RESOURCE = "get-server-system-resource"
-COMMAND_GET_SERVER_RESOURCE_RRD = "get-server-resource-rrd"
-COMMAND_RUN_SERVER_SERVICE = "run-server-service"
-COMMAND_SHUTDOWN_SERVER = "shutdown-server"
-COMMAND_GET_SERVER_STATUS = "get-server-status"
-COMMAND_GET_SERVER_LOG = "get-server-log"
-COMMAND_DOWNLOAD_SERVER_LOGS = "download-server-logs"
-COMMAND_CLEAR_SERVER_LOGS = "clear-server-logs"
-COMMAND_GET_SERVER_RESOURCE_RRD = "get-server-resource-rrd"
-COMMAND_GET_GSN_USER_INFO = "get-gsn-user-info"
-COMMAND_SET_GSN_USER_INFO = "set-gsn-user-info"
-COMMAND_GET_GLUSTER_UPDATE_INFO = "get-gluster-update-info"
-COMMAND_DOWNLOAD_GLUSTER_UPDATE_BACKGROUND = "download-gluster-update-background"
-COMMAND_DOWNLOAD_GLUSTER_UPDATE_STATUS = "download-gluster-update-status"
-COMMAND_INSTALL_GLUSTER_UPDATE = "install-gluster-update"
-COMMAND_EXPORT_CONFIG = "export-config"
-COMMAND_IMPORT_CONFIG = "import-config"
-COMMAND_SET_SYSTEM_PASSWORD = "set-system-password"
-COMMAND_GET_SERVER_VOLUME_LIST = "get-server-volume-list"
-COMMAND_RECONFIGURE_VOLUME = "reconfigure-volume"
-COMMAND_SET_SERVER_DIRECTORY_SERVICE_CONFIG = "set-server-directory-service-config"
-COMMAND_GET_SERVER_DIRECTORY_SERVICE_CONFIG = "get-server-directory-service-config"
-COMMAND_JOIN_SERVER_TO_DIRECTORY_SERVICE = "join-server-to-directory-service"
-COMMAND_SET_SERVER_TIME_CONFIG = "set-server-time-config"
-COMMAND_GET_SERVER_TIME_CONFIG = "get-server-time-config"
-COMMAND_LOGIN = "login"
-COMMAND_LOGOUT = "logout"
-COMMAND_GET_LOGIN_STATUS = "get-login-status"
-COMMAND_GET_SERVER_TRANSPORT_LIST = "get-server-transport-list"
-COMMAND_ADD_SERVER_PARTITION = "add-server-partition"
-COMMAND_ADD_VOLUME_USER = "add-volume-user"
-COMMAND_GET_PARTITION_VOLUME_LIST = "get-partition-volume-list"
-COMMAND_GET_VOLUME_USER_INFO = "get-volume-user-info"
-COMMAND_GET_VOLUME_USER_LIST = "get-volume-user-list"
-COMMAND_MIGRATE_PARTITION_BACKGROUND = "migrate-partition-background"
-COMMAND_MIGRATE_PARTITION_STATUS = "migrate-partition-status"
-COMMAND_MIGRATE_VOLUME_SERVER_PARTITION_BACKGROUND = "migrate-volume-server-partition-background"
-COMMAND_MIGRATE_VOLUME_SERVER_PARTITION_STATUS = "migrate-volume-server-partition-status"
-COMMAND_REMOVE_SERVER_PARTITION = "remove-server-partition"
-COMMAND_REMOVE_VOLUME_USER = "remove-volume-user"
-COMMAND_RENAME_VOLUME_USER = "rename-volume-user"
-COMMAND_RENAME_VOLUME = "rename-volume"
-COMMAND_RUN_SERVER_SERVICE = "run-server-service"
-COMMAND_SET_VOLUME_USER_PASSWORD = "set-volume-user-password"
-COMMAND_STOP_PARTITION_MIGRATION = "stop-partition-migration"
-COMMAND_STOP_VOLUME_SERVER_PARTITION_MIGRATION = "stop-volume-server-partition-migration"
-COMMAND_GET_SERVER_DISK_INFO = "get-server-disk-info"
-COMMAND_INITIALIZE_SERVER_DISK = "initialize-server-disk"
-COMMAND_SET_SERVER_COUNT = "set-server-count"
-COMMAND_GET_SERVER_COUNT = "get-server-count"
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/Common.py b/src/com.gluster.storage.management.gateway.scripts/src/Common.py
deleted file mode 100644
index c85e9a2b..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/Common.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# Copyright (c) 2009 Gluster, Inc. <http://www.gluster.com>
-# This file is part of GlusterSP.
-#
-# GlusterSP is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published
-# by the Free Software Foundation; either version 3 of the License,
-# or (at your option) any later version.
-#
-# GlusterSP 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/>.
-
-import sys
-import syslog
-
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/Disk.py b/src/com.gluster.storage.management.gateway.scripts/src/Disk.py
deleted file mode 100755
index 2c47d396..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/Disk.py
+++ /dev/null
@@ -1,140 +0,0 @@
-# Copyright (c) 2009 Gluster, Inc. <http://www.gluster.com>
-# This file is part of GlusterSP.
-#
-# GlusterSP is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published
-# by the Free Software Foundation; either version 3 of the License,
-# or (at your option) any later version.
-#
-# GlusterSP 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
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/>.
-
-import os
-import dbus
-
-class Disk:
- def __init__(self):
- """init"""
-
- self.volumes = []
- self.disks = []
- self.bus = dbus.SystemBus()
- self.hal_obj = self.bus.get_object("org.freedesktop.Hal",
- "/org/freedesktop/Hal/Manager")
- self.hal = dbus.Interface(self.hal_obj, "org.freedesktop.Hal.Manager")
- self.devices = []
- self.devices = self.hal.FindDeviceByCapability("storage")
-
- self.detect_disks()
- self.detect_mountable_volumes()
-
- def getDiskList(self):
-
- return self.disks
-
- def getMountableDiskList(self):
-
- return self.volumes
-
- def detect_disks(self):
- for device in self.devices:
- dev = self._get_device(device)
- if dev.GetProperty("storage.drive_type") != "cdrom":
- if not dev.GetProperty("block.is_volume"):
- self._add_disks(dev)
- continue
-
- def _add_disks(self, dev):
- disk = str(dev.GetProperty('block.device'))
- disk_size = str(int(dev.GetProperty('storage.size')) / 1024**2)
-
- try:
- if dev.GetProperty('storage.removable'):
- disk_size = str(int(dev.GetProperty('storage.removable.media_size')) / 1024**2)
- except:
- return
-
- self.disks.append({
- 'device': disk,
- 'description': str(dev.GetProperty('storage.model')) + " " + str(dev.GetProperty('storage.vendor')),
- 'interface': str(dev.GetProperty('storage.bus')),
- 'size': disk_size,
- 'drive_type': str(dev.GetProperty('storage.drive_type'))
- })
-
- def detect_mountable_volumes(self):
- """ Detect all mountable volumes using HAL via D-Bus """
- for device in self.devices:
- dev = self._get_device(device)
- if dev.GetProperty("storage.drive_type") != "cdrom":
- if dev.GetProperty("block.is_volume"):
- self._add_volume(dev)
- continue
- else: # iterate over children looking for a volume
- children = self.hal.FindDeviceStringMatch("info.parent",
- device)
- if not children and "disk" == dev.GetProperty("storage.drive_type"):
- self._add_volume(dev)
- for child in children:
- child = self._get_device(child)
- if child.GetProperty("block.is_volume"):
- self._add_volume(child, parent=dev)
- #break # don't break, allow all partitions
-
- def _add_volume(self, dev, parent=None):
- volume = str(dev.GetProperty('block.device'))
- if not parent:
- self.volumes.append ({
- 'device' : volume,
- 'label' : str(dev.GetProperty('block.device')),
- 'fstype' : None,
- 'fsversion': None,
- 'uuid' : None,
- 'interface': str(dev.GetProperty('storage.bus')),
- 'parent' : None,
- 'description': str(dev.GetProperty('storage.model')) + " " + str(dev.GetProperty('storage.vendor')),
- 'size' : None,
- 'totalsize' : str(int(dev.GetProperty('storage.size')) / 1024**2),
- 'drive_type': str(dev.GetProperty('storage.drive_type')),
- 'mount_point': "NA"
- })
- return
-
- self.volumes.append ({
- 'device' : volume,
- 'label' : str(dev.GetProperty('volume.label')),
- 'fstype' : str(dev.GetProperty('volume.fstype')),
- 'fsversion': str(dev.GetProperty('volume.fsversion')),
- 'uuid' : str(dev.GetProperty('volume.uuid')),
- 'interface': str(parent.GetProperty('storage.bus')),
- 'parent' : str(parent.GetProperty('block.device')),
- 'description': str(parent.GetProperty('storage.model')) + " " + str(parent.GetProperty('storage.vendor')),
- 'size' : str(int(dev.GetProperty('volume.size')) / 1024**2),
- 'totalsize' : str(int(parent.GetProperty('storage.size')) / 1024**2),
- 'drive_type': str(parent.GetProperty('storage.drive_type')),
- 'mount_point': str(dev.GetProperty('volume.mount_point'))
- })
- return
-
- def _get_device(self, udi):
- """ Return a dbus Interface to a specific HAL device UDI """
- dev_obj = self.bus.get_object("org.freedesktop.Hal", udi)
- return dbus.Interface(dev_obj, "org.freedesktop.Hal.Device")
-
- def get_free_bytes(self, device=None):
- """ Return the number of available bytes on our device """
- import statvfs
- stat = os.statvfs(device)
- return stat[statvfs.F_BSIZE] * stat[statvfs.F_BAVAIL]
-
- def get_used_bytes(self, device=None):
- """ Return the number of used bytes on our device """
- import statvfs
- stat = os.statvfs(device)
- return ((stat[statvfs.F_BSIZE] * stat[statvfs.F_BLOCKS]) - (stat[statvfs.F_BSIZE] * stat[statvfs.F_BAVAIL]))
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/DiskUtils.py b/src/com.gluster.storage.management.gateway.scripts/src/DiskUtils.py
deleted file mode 100644
index a0e5d802..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/DiskUtils.py
+++ /dev/null
@@ -1,939 +0,0 @@
-# Copyright (c) 2010 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-# Gluster Storage Platform is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 3 of
-# the License, or (at your option) any later version.
-#
-# Gluster Storage Platform 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 General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/>.
-
-import os
-import glob
-from copy import deepcopy
-import dbus
-import Globals
-import time
-import Utils
-import Disk
-import Protocol
-from FsTabUtils import *
-
-ONE_MB_SIZE = 1048576
-
-
-def _stripDev(device):
- if Utils.isString(device) and device.startswith("/dev/"):
- return device[5:]
- return device
-
-
-def _addDev(deviceName):
- if Utils.isString(deviceName) and not deviceName.startswith("/dev/"):
- return "/dev/" + deviceName
- return deviceName
-
-
-def getDeviceName(device):
- if type(device) == type([]):
- nameList = []
- for d in device:
- nameList.append(_stripDev(d))
- return nameList
- return _stripDev(device)
-
-
-def getDevice(deviceName):
- if Utils.isString(deviceName):
- return _addDev(deviceName)
- if type(deviceName) == type([]):
- nameList = []
- for d in deviceName:
- nameList.append(_addDev(d))
- return nameList
- return _addDev(deviceName)
-
-
-def getDiskPartitionByUuid(uuid):
- uuidFile = "/dev/disk/by-uuid/%s" % uuid
- if os.path.exists(uuidFile):
- return getDeviceName(os.path.realpath(uuidFile))
- return None
-
-
-def getUuidByDiskPartition(device):
- for uuidFile in glob.glob("/dev/disk/by-uuid/*"):
- if os.path.realpath(uuidFile) == device:
- return os.path.basename(uuidFile)
- return None
-
-
-def getDiskPartitionUuid(partition):
- Utils.log("WARNING: getDiskPartitionUuid() is deprecated by getUuidByDiskPartition()")
- return getUuidByDiskPartition(partition)
-
-
-def getDiskPartitionByLabel(label):
- ## TODO: Finding needs to be enhanced
- labelFile = "/dev/disk/by-label/%s" % label
- if os.path.exists(labelFile):
- if os.path.islink(labelFile):
- return getDeviceName(os.path.realpath(labelFile))
- return None
-
-
-def getDeviceByLabel(label):
- Utils.log("WARNING: getDeviceByLabel() is deprecated by getDiskPartitionByLabel()")
- return getDiskPartitionByLabel(label)
-
-
-def getDiskPartitionLabel(device):
- rv = Utils.runCommandFG(["sudo", "e2label", device], stdout=True)
- if rv["Status"] == 0:
- return rv["Stdout"].strip()
- 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:
- if fsTabEntry["MountPoint"] == "/":
- if fsTabEntry["Device"].startswith("UUID="):
- return getDiskPartitionByUuid(fsTabEntry["Device"].split("UUID=")[-1])
- if fsTabEntry["Device"].startswith("LABEL="):
- partitionName = getDiskPartitionByLabel(fsTabEntry["Device"].split("LABEL=")[-1])
- if partitionName:
- return partitionName
- return getDeviceName(fsTabEntry["Device"])
- return None
-
-def getMounts():
- mounts = {}
- for line in readFile("/proc/mounts"):
- str = line.strip()
- if str.startswith("/dev/"):
- tokens = str.split()
- device = {}
- mountPoint = tokens[1].strip()
- device["MountPoint"] = mountPoint
- device["FsType"] = tokens[2].strip()
- device["Uuid"] = getDiskPartitionUuid(tokens[0].strip())
- device["Status"] = "INITIALIZED"
- if mountPoint:
- if mountPoint in ["/", "/boot"]:
- device["Type"] = "BOOT"
- else:
- device["Type"] = "DATA"
- mounts[tokens[0].strip()] = device
- return mounts
-
-def getRaidDisk():
- array = []
- arrayList = []
- mdFound = False
-
- try:
- fp = open("/proc/mdstat")
- for line in fp:
- str = line.strip()
- if str.startswith("md"):
- array.append(str)
- mdFound = True
- continue
- if mdFound:
- if str:
- array.append(str)
- else:
- arrayList.append(array)
- array = []
- mdFound = False
- fp.close()
- except IOError, e:
- return None
-
- raidList = {}
- for array in arrayList:
- raid = {}
- tokens = array[0].split()
- raid['Interface'] = tokens[3]
- device = getDevice(tokens[0])
- raid['MountPoint'] = getDeviceMountPoint(device)
- if raid['MountPoint']:
- raid['Type'] = "DATA"
- rv = Utils.runCommand("blkid -c /dev/null %s" % (device), output=True, root=True)
- raid['Uuid'] = None
- raid['FsType'] = None
- raid['Status'] = "UNINITIALIZED"
- if isDiskInFormatting(device):
- raid['Status'] = "INITIALIZING"
- if not rv["Stderr"]:
- words = rv["Stdout"].strip().split()
- if words:
- 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]
-
- used = 0
- rv = Utils.runCommand("df %s" % (device), output=True, root=True)
- if rv["Status"] == 0:
- try:
- used = long(rv["Stdout"].split("\n")[1].split()[2]) / 1024
- except IndexError:
- pass
- except ValueError:
- pass
- raid['SpaceInUse'] = used
- raid['Disks'] = [x.split('[')[0] for x in tokens[4:]]
- raid['Size'] = float(array[1].split()[0]) / 1024.0
- raidList[tokens[0]] = raid
- return raidList
-
-
-def getOsDisk():
- Utils.log("WARNING: getOsDisk() is deprecated by getRootPartition()")
- return getRootPartition()
-
-
-def getDiskInfo(diskDeviceList=None):
- diskDeviceList = getDevice(diskDeviceList)
- if Utils.isString(diskDeviceList):
- diskDeviceList = [diskDeviceList]
-
- mounts = getMounts()
- if Utils.runCommand("/usr/bin/lshal") != 0:
- Utils.log("failed running /usr/bin/lshal")
-
- dbusSystemBus = dbus.SystemBus()
- halObj = dbusSystemBus.get_object("org.freedesktop.Hal",
- "/org/freedesktop/Hal/Manager")
- halManager = dbus.Interface(halObj, "org.freedesktop.Hal.Manager")
- storageUdiList = halManager.FindDeviceByCapability("storage")
-
- diskInfo = {}
- diskList = []
- for udi in storageUdiList:
- halDeviceObj = dbusSystemBus.get_object("org.freedesktop.Hal", udi)
- halDevice = dbus.Interface(halDeviceObj,
- "org.freedesktop.Hal.Device")
- if halDevice.GetProperty("storage.drive_type") in ["cdrom", "floppy"] or \
- halDevice.GetProperty("block.is_volume"):
- continue
- disk = {}
- disk["Device"] = str(halDevice.GetProperty('block.device'))
- if diskDeviceList and disk["Device"] not in diskDeviceList:
- continue
- disk["Description"] = str(halDevice.GetProperty('storage.vendor')) + " " + str(halDevice.GetProperty('storage.model'))
- if halDevice.GetProperty('storage.removable'):
- disk["Size"] = long(halDevice.GetProperty('storage.removable.media_size'))
- else:
- disk["Size"] = long(halDevice.GetProperty('storage.size')) / 1024**2
- disk["Interface"] = str(halDevice.GetProperty('storage.bus'))
- disk["DriveType"] = str(halDevice.GetProperty('storage.drive_type'))
- disk["Status"] = 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
-
- partitionUdiList = halManager.FindDeviceStringMatch("info.parent", udi)
- if isDiskInFormatting(disk["Device"]):
- disk["Status"] = "INITIALIZING"
- else:
- if partitionUdiList:
- disk["Status"] = "INITIALIZED"
- else:
- disk["Status"] = "UNINITIALIZED"
- disk["Type"] = "UNKNOWN"
-
- if mounts and mounts.has_key(disk["Device"]):
- disk["Uuid"] = mounts[disk["Device"]]["Uuid"]
- disk["Type"] = mounts[disk["Device"]]["Type"]
- disk["Status"] = mounts[disk["Device"]]["Status"]
- disk["FsType"] = mounts[disk["Device"]]["FsType"]
- disk["MountPoint"] = mounts[disk["Device"]]["MountPoint"]
-
- partitionList = []
- diskSpaceInUse = 0
- for partitionUdi in partitionUdiList:
- used = 0
- partitionHalDeviceObj = dbusSystemBus.get_object("org.freedesktop.Hal",
- partitionUdi)
- partitionHalDevice = dbus.Interface(partitionHalDeviceObj,
- "org.freedesktop.Hal.Device")
- if not partitionHalDevice.GetProperty("block.is_volume"):
- continue
- partitionDevice = str(partitionHalDevice.GetProperty('block.device'))
- if partitionHalDevice.GetProperty("volume.is_mounted"):
- rv = Utils.runCommandFG(["df", str(partitionHalDevice.GetProperty('volume.mount_point'))], stdout=True)
- if rv["Status"] == 0:
- try:
- used = long(rv["Stdout"].split("\n")[1].split()[2]) / 1024
- diskSpaceInUse += used
- except IndexError:
- pass
- except ValueError:
- pass
-
- if disk["Device"] == partitionDevice:
- disk["Uuid"] = str(partitionHalDevice.GetProperty('volume.uuid'))
- disk["Init"] = True # TODO: use isDataDiskPartitionFormatted function to cross verify this
- disk["Status"] = "INITIALIZED"
- mountPoint = str(partitionHalDevice.GetProperty('volume.mount_point'))
- if mountPoint:
- if mountPoint in ["/", "/boot"]:
- disk["Type"] = "BOOT"
- else:
- disk["Type"] = "DATA"
- disk["FsType"] = str(partitionHalDevice.GetProperty('volume.fstype'))
- if disk["FsType"] and "UNINITIALIZED" == disk["Status"]:
- disk["Status"] = "INITIALIZED"
- disk["FsVersion"] = str(partitionHalDevice.GetProperty('volume.fsversion'))
- disk["MountPoint"] = str(partitionHalDevice.GetProperty('volume.mount_point'))
- disk["ReadOnlyAccess"] = str(partitionHalDevice.GetProperty('volume.is_mounted_read_only'))
- if not disk["Size"]:
- disk["Size"] = long(partitionHalDevice.GetProperty('volume.size')) / 1024**2
- disk["SpaceInUse"] = used
- continue
-
- partition = {}
- partition["Init"] = False
- partition["Type"] = "UNKNOWN"
- partition["Device"] = partitionDevice
- partition["Uuid"] = str(partitionHalDevice.GetProperty('volume.uuid'))
- partition["Size"] = long(partitionHalDevice.GetProperty('volume.size')) / 1024**2
- partition["FsType"] = str(partitionHalDevice.GetProperty('volume.fstype'))
- partition["FsVersion"] = str(partitionHalDevice.GetProperty('volume.fsversion'))
- partition["Label"] = str(partitionHalDevice.GetProperty('volume.label'))
- partition["MountPoint"] = str(partitionHalDevice.GetProperty('volume.mount_point'))
- partition["Size"] = long(partitionHalDevice.GetProperty('volume.size')) / 1024**2
-
- if isDiskInFormatting(partitionDevice):
- partition["Status"] = "INITIALIZING"
- else:
- if partition["FsType"]:
- partition["Status"] = "INITIALIZED"
- else:
- partition["Status"] = "UNINITIALIZED"
-
- partition["SpaceInUse"] = used
- if partition["MountPoint"] or isDataDiskPartitionFormatted(partitionDevice):
- partition["Init"] = True
- partition["Status"] = "INITIALIZED"
- if partition["MountPoint"]:
- if partition["MountPoint"] in ["/", "/boot"]:
- partition["Type"] = "BOOT"
- else:
- partition["Type"] = "DATA"
- else:
- if "SWAP" == partition["FsType"].strip().upper():
- partition["Type"] = "SWAP"
- partition["ReadOnlyAccess"] = str(partitionHalDevice.GetProperty('volume.is_mounted_read_only'))
- partitionList.append(partition)
- disk["Partitions"] = partitionList
- if not disk["SpaceInUse"]:
- 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):
- return diskInfo["disks"]
-
-def readFsTab(fsTabFile=Globals.FSTAB_FILE):
- try:
- fsTabfp = open(fsTabFile)
- except IOError, e:
- Utils.log("readFsTab(): " + str(e))
- return None
-
- fsTabEntryList = []
- for line in fsTabfp:
- tokens = line.strip().split()
- if not tokens or tokens[0].startswith('#'):
- continue
- fsTabEntry = {}
- fsTabEntry["Device"] = None
- fsTabEntry["MountPoint"] = None
- fsTabEntry["FsType"] = None
- fsTabEntry["Options"] = None
- fsTabEntry["DumpOption"] = 0
- fsTabEntry["fsckOrder"] = 0
- try:
- fsTabEntry["Device"] = tokens[0]
- fsTabEntry["MountPoint"] = tokens[1]
- fsTabEntry["FsType"] = tokens[2]
- fsTabEntry["Options"] = tokens[3]
- fsTabEntry["DumpOption"] = tokens[4]
- fsTabEntry["fsckOrder"] = tokens[5]
- except IndexError:
- pass
- if fsTabEntry["Device"] and fsTabEntry["MountPoint"] and fsTabEntry["FsType"] and fsTabEntry["Options"]:
- fsTabEntryList.append(fsTabEntry)
- fsTabfp.close()
- return fsTabEntryList
-
-
-def checkDiskMountPoint(diskMountPoint):
- try:
- fstabEntries = open(Globals.FSTAB_FILE).readlines()
- except IOError:
- fstabEntries = []
- found = False
- for entry in fstabEntries:
- entry = entry.strip()
- if not entry:
- continue
- entries = entry.split()
- if entries and len(entries) > 1 and entries[0].startswith("UUID=") and entries[1].upper() == diskMountPoint.upper():
- return True
- return False
-
-
-def getMountPointByUuid(partitionUuid):
- # check uuid in etc/fstab
- try:
- fstabEntries = open(Globals.FSTAB_FILE).readlines()
- except IOError:
- fstabEntries = []
- found = False
- for entry in fstabEntries:
- entry = entry.strip()
- if not entry:
- continue
- if entry.split()[0] == "UUID=" + partitionUuid:
- return entry.split()[1]
- return None
-
-
-def getDiskSizeInfo(partition):
- # get values from df output
- total = None
- used = None
- free = None
- command = "df -kl -t ext3 -t ext4 -t xfs"
- rv = Utils.runCommandFG(command, stdout=True, root=True)
- message = Utils.stripEmptyLines(rv["Stdout"])
- if rv["Stderr"]:
- Utils.log("failed to get disk details. %s" % Utils.stripEmptyLines(rv["Stdout"]))
- return None, None, None
- for line in rv["Stdout"].split("\n"):
- tokens = line.split()
- if len(tokens) < 4:
- continue
- if tokens[0] == partition:
- total = int(tokens[1]) / 1024.0
- used = int(tokens[2]) / 1024.0
- free = int(tokens[3]) / 1024.0
- break
-
- if total:
- return total, used, free
-
- # get total size from parted output
- for i in range(len(partition), 0, -1):
- pos = i - 1
- if not partition[pos].isdigit():
- break
- disk = partition[:pos+1]
- partitionNumber = partition[pos+1:]
- if not partitionNumber.isdigit():
- return None, None, None
-
- number = int(partitionNumber)
- command = "parted -ms %s unit kb print" % disk
- rv = Utils.runCommandFG(command, stdout=True, root=True)
- message = Utils.stripEmptyLines(rv["Stdout"])
- if rv["Stderr"]:
- Utils.log("failed to get disk details. %s" % Utils.stripEmptyLines(rv["Stdout"]))
- return None, None, None
-
- lines = rv["Stdout"].split(";\n")
- if len(lines) < 3:
- return None,None,None
-
- for line in lines[2:]:
- tokens = line.split(':')
- if len(tokens) < 4:
- continue
- if tokens[0] == str(number):
- total = int(tokens[3].split('kB')[0]) / 1024.0
- break
- return total, used, free
-
-
-def isDataDiskPartitionFormatted(device):
- #Todo: Proper label needs to be added for data partition
- #if getDiskPartitionLabel(device) != Globals.DATA_PARTITION_LABEL:
- # return False
- device = getDeviceName(device)
- diskObj = Disk.Disk()
- for disk in diskObj.getMountableDiskList():
- if disk['device'].upper() == device.upper():
- mountPoint = disk['mount_point']
- if not mountPoint:
- return False
- if not os.path.exists(mountPoint):
- return False
-
- uuid = getUuidByDiskPartition(device)
- if not uuid:
- return False
-
- for fsTabEntry in readFsTab():
- if fsTabEntry["Device"] == ("UUID=%s" % uuid) and fsTabEntry["MountPoint"] == mountPoint:
- return True
- return False
-
-
-def getDiskDom(diskDeviceList=None, bootPartition=None, skipDisk=None):
- diskDeviceList = getDevice(diskDeviceList)
- if Utils.isString(diskDeviceList):
- diskDeviceList = [diskDeviceList]
-
- if skipDisk:
- skipDisk = getDevice(skipDisk)
- if Utils.isString(skipDisk):
- skipDisk = [skipDisk]
-
- diskInfo = getDiskInfo(diskDeviceList)
- diskList = diskInfo["disks"]
- if not diskList:
- return None
-
- raidPartitions = {}
- raidDisk = getRaidDisk()
-
- for k, v in raidDisk.iteritems():
- for i in v['Disks']:
- raidPartitions[i] = k
-
- #for partition in raidDisk.values():
- # raidDiskPartitions += partition['disks']
-
- diskDom = Protocol.XDOM()
- disksTag = diskDom.createTag("disks", None)
- raidDisks = {}
- if not bootPartition:
- bootPartition = getRootPartition()
- for disk in diskList:
- if skipDisk and disk["Device"] in skipDisk:
- continue
- diskTag = diskDom.createTag("disk", None)
- diskDevice = getDeviceName(disk["Device"])
- diskTag.appendChild(diskDom.createTag("name", diskDevice))
- diskTag.appendChild(diskDom.createTag("description", disk["Description"]))
- diskTag.appendChild(diskDom.createTag("uuid", disk["Uuid"]))
- 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"]))
-
- diskTag.appendChild(diskDom.createTag("size", disk["Size"]))
- diskTag.appendChild(diskDom.createTag("spaceInUse", disk["SpaceInUse"]))
- partitionsTag = diskDom.createTag("partitions", None)
- if raidPartitions.has_key(diskDevice):
- rdList = {}
- rdList[diskDevice] = [deepcopy(diskTag)]
- 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)
- device = getDeviceName(partition["Device"])
- partitionTag.appendChild(diskDom.createTag("name", device))
- if partition["Uuid"]: #TODO: Move this verification and findings to getDiskInfo function
- partitionTag.appendChild(diskDom.createTag("uuid", partition["Uuid"]))
- else:
- partitionTag.appendChild(diskDom.createTag("uuid", getUuidByDiskPartition("/dev/" + device)))
- partitionTag.appendChild(diskDom.createTag("status", partition["Status"]))
- #partitionTag.appendChild(diskDom.createTag("init", str(partition["Init"]).lower()))
- partitionTag.appendChild(diskDom.createTag("type", str(partition["Type"])))
- partitionTag.appendChild(diskDom.createTag("fsType", partition["FsType"]))
- partitionTag.appendChild(diskDom.createTag("mountPoint", partition['MountPoint']))
- partitionTag.appendChild(diskDom.createTag("size", partition["Size"]))
- partitionTag.appendChild(diskDom.createTag("spaceInUse", partition["SpaceInUse"]))
- if raidPartitions.has_key(device):
- tempPartitionTag = diskDom.createTag("partitions", None)
- if raidDisks.has_key(raidPartitions[device]):
- rdList = raidDisks[raidPartitions[device]]
- 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]
- continue
- partitionsTag.appendChild(partitionTag)
- diskTag.appendChild(partitionsTag)
- disksTag.appendChild(diskTag)
-
- for rdisk in raidDisk.keys():
- raidDiskTag = diskDom.createTag("disk", None)
- raidDiskTag.appendChild(diskDom.createTag("name", rdisk))
- raidDiskTag.appendChild(diskDom.createTag("description"))
- raidDiskTag.appendChild(diskDom.createTag("uuid", raidDisk[rdisk]['Uuid']))
- raidDiskTag.appendChild(diskDom.createTag("type", raidDisk[rdisk]['Type']))
- raidDiskTag.appendChild(diskDom.createTag("mountPoint", raidDisk[rdisk]['MountPoint']))
- raidDiskTag.appendChild(diskDom.createTag("status", raidDisk[rdisk]['Status']))
- raidDiskTag.appendChild(diskDom.createTag("interface", raidDisk[rdisk]['Interface']))
- raidDiskTag.appendChild(diskDom.createTag("fsType", raidDisk[rdisk]['FsType']))
- raidDiskTag.appendChild(diskDom.createTag("fsVersion"))
- raidDiskTag.appendChild(diskDom.createTag("size", raidDisk[rdisk]['Size']))
- raidDiskTag.appendChild(diskDom.createTag("spaceInUse", raidDisk[rdisk]['SpaceInUse']))
- raidDisksTag = diskDom.createTag("raidDisks", None)
- if raidDisks.has_key(rdisk):
- for item in raidDisks[rdisk]:
- for diskTag in item.values():
- raidDisksTag.appendChild(diskTag[0])
- raidDiskTag.appendChild(raidDisksTag)
- disksTag.appendChild(raidDiskTag)
- diskDom.addTag(disksTag)
- return diskDom
-
-
-def initializeDisk(disk, boot=False, startSize=0, sudo=False):
- if boot and startSize > 0:
- return False
-
- disk = getDevice(disk)
- diskObj = getDiskList(disk)[0]
-
- if boot or startSize == 0:
- command = "dd if=/dev/zero of=%s bs=1024K count=1" % diskObj["Device"]
- if runCommandFG(command, root=sudo) != 0:
- if boot:
- Utils.log("failed to clear boot sector of disk %s" % diskObj["Device"])
- return False
- Utils.log("failed to clear boot sector of disk %s. ignoring" % diskObj["Device"])
-
- command = "parted -s %s mklabel gpt" % diskObj["Device"]
- if runCommandFG(command, root=sudo) != 0:
- return False
-
- if boot:
- command = "parted -s %s mkpart primary ext3 0MB %sMB" % (diskObj["Device"], Globals.OS_PARTITION_SIZE)
- if runCommandFG(command, root=sudo) != 0:
- return False
- command = "parted -s %s set 1 boot on" % (diskObj["Device"])
- if runCommandFG(command, root=sudo) != 0:
- return False
- startSize = Globals.OS_PARTITION_SIZE
-
- size = (diskObj["Size"] / ONE_MB_SIZE) - startSize
- while size > Globals.MAX_PARTITION_SIZE:
- endSize = startSize + Globals.MAX_PARTITION_SIZE
- command = "parted -s %s mkpart primary ext3 %sMB %sMB" % (diskObj["Device"], startSize, endSize)
- if runCommandFG(command, root=sudo) != 0:
- return False
- size -= Globals.MAX_PARTITION_SIZE
- startSize = endSize
-
- if size:
- command = "parted -s %s mkpart primary ext3 %sMB 100%%" % (diskObj["Device"], startSize)
- if runCommandFG(command, root=sudo) != 0:
- return False
-
- if runCommandFG("udevadm settle", root=sudo) != 0:
- if runCommandFG("udevadm settle", root=sudo) != 0:
- Utils.log("udevadm settle for disk %s failed. ignoring" % diskObj["Device"])
- time.sleep(1)
-
- if runCommandFG("partprobe %s" % diskObj["Device"], root=sudo) != 0:
- Utils.log("partprobe %s failed" % diskObj["Device"])
- return False
-
- if runCommandFG("gptsync %s" % diskObj["Device"], root=sudo) != 0:
- Utils.log("gptsync %s failed. ignoring" % diskObj["Device"])
-
- # wait forcefully to appear devices in /dev
- time.sleep(2)
- return True
-
-
-def initializeOsDisk(diskObj):
- Utils.log("WARNING: initializeOsDisk() is deprecated by initializeDisk(boot=True)")
- return initializeDisk(diskObj, boot=True)
-
-
-def initializeDataDisk(diskObj):
- Utils.log("WARNING: initializeDataDisk() is deprecated by initializeDisk()")
- return initializeDisk(diskObj)
-
-def getBootPartition(serverName):
- diskDom = XDOM()
- diskDom.parseFile("%s/%s/disk.xml" % (Globals.SERVER_VOLUME_CONF_DIR, serverName))
- if not diskDom:
- return None
- partitionDom = XDOM()
- partitionUuid = None
- partitionName = None
- for partitionTag in diskDom.getElementsByTagRoute("disk.partition"):
- partitionDom.setDomObj(partitionTag)
- boot = partitionDom.getTextByTagRoute("boot")
- if boot and boot.strip().upper() == 'YES':
- partitionUuid = partitionDom.getTextByTagRoute("uuid")
- partitionName = partitionDom.getTextByTagRoute("device")
- break
- if not (partitionUuid and partitionName):
- return None
-
- # check device label name
- deviceBaseName = os.path.basename(partitionName)
- process = runCommandBG(['sudo', 'e2label', partitionName])
- if type(process) == type(True):
- return None
- if process.wait() != 0:
- return None
- output = process.communicate()
- deviceLabel = output[0].split()[0]
- if deviceLabel != Globals.BOOT_PARTITION_LABEL:
- return None
-
- # check uuid in etc/fstab
- try:
- fstabEntries = open(Globals.FSTAB_FILE).readlines()
- except IOError:
- fstabEntries = []
- found = False
- for entry in fstabEntries:
- entry = entry.strip()
- if not entry:
- continue
- if entry.split()[0] == "UUID=" + partitionUuid:
- found = True
- break
- if not found:
- return None
- return partitionName
-
-
-def isDiskInFormatting(device):
- DEVICE_FORMAT_LOCK_FILE = "/var/lock/%s.lock" % device
- return os.path.exists(DEVICE_FORMAT_LOCK_FILE)
-
-
-def isDiskInFormat(device):
- Utils.log("WARNING: isDiskInFormat() is deprecated by isDataDiskPartitionFormatted()")
- return isDataDiskPartitionFormatted(device)
-
-
-def diskOrder(serverExportList):
- newServerExportList = []
- while serverExportList:
- serverExport = deepcopy(serverExportList[0])
- if newServerExportList and serverExport.split(":")[0] == newServerExportList[-1].split(":")[0]:
- inserted = False
- for i in range(0, len(newServerExportList) - 1):
- if serverExport.split(":")[0] == newServerExportList[i].split(":")[0]:
- continue
- if i == 0:
- newServerExportList.insert(i, serverExport)
- inserted = True
- break
- if serverExport.split(":")[0] == newServerExportList[i - 1].split(":")[0]:
- continue
- newServerExportList.insert(i, serverExport)
- inserted = True
- break
- if not inserted:
- newServerExportList.append(serverExport)
- else:
- newServerExportList.append(serverExport)
- serverExportList.remove(serverExport)
- i = 0
- while serverExportList and i < len(serverExportList):
- if serverExport.split(":")[0] == serverExportList[i].split(":")[0]:
- i += 1
- continue
- serverExport = deepcopy(serverExportList[i])
- newServerExportList.append(serverExport)
- serverExportList.remove(serverExport)
- return newServerExportList
-
-
-def updateServerDiskConfig(serverName, diskDom, requestFlag=True, partitionFlag=True):
- command = "command.server."
- if not requestFlag:
- command = ""
- diskList = {}
- for tagE in diskDom.getElementsByTagRoute(command + "disk"):
- diskList[diskDom.getTextByTagRoute(command + "device")] = tagE
- configDom = XDOM()
- if not configDom.parseFile("%s/%s/disk.xml" % (Globals.SERVER_VOLUME_CONF_DIR, serverName)):
- return diskDom.writexml("%s/%s/disk.xml" % (Globals.SERVER_VOLUME_CONF_DIR, serverName))
- diskTag = configDom.getElementsByTagRoute("disks.disk")
- disks = configDom.getElementsByTagRoute("disks")
- if not (diskTag or disks):
- return None
- for tagE in diskTag:
- diskDom = XDOM()
- diskDom.setDomObj(tagE)
- device = diskDom.getTextByTagRoute("device")
- if partitionFlag and device in diskList:
- disks[0].removeChild(tagE)
- disks[0].appendChild(deepcopy(diskList[device]))
- continue
- if not partitionFlag and device in diskList:
- partitionList = []
- for childNodeTag in tagE.childNodes:
- if childNodeTag.nodeName == 'partition':
- partitionList.append(childNodeTag)
- tagE.childNodes = []
- tagE.childNodes = diskList[device].childNodes + partitionList
- return configDom.writexml("%s/%s/disk.xml" % (Globals.SERVER_VOLUME_CONF_DIR, serverName))
-
-
-def compareDisksDom(diskDomA, diskDomB, requestFlag=True):
- command = "command.server.disk."
- if not requestFlag:
- command = ""
- sourceDiskList = {}
- sourceDisk = {}
- for tagE in diskDomA.getElementsByTagRoute("disk"):
- sourceDisk["description"] = diskDomA.getTextByTagRoute("description")
- sourceDisk["size"] = diskDomA.getTextByTagRoute("size")
- sourceDisk["init"] = diskDomA.getTextByTagRoute("init")
- sourceDisk["interface"] = diskDomA.getTextByTagRoute("interface")
- sourceDiskList[diskDomA.getTextByTagRoute("device")] = sourceDisk
- objDiskList = {}
- objDisk = {}
- for tagE in diskDomB.getElementsByTagRoute("disk"):
- objDisk["description"] = diskDomB.getTextByTagRoute("description")
- objDisk["size"] = diskDomB.getTextByTagRoute("size")
- objDisk["init"] = diskDomB.getTextByTagRoute("init")
- objDisk["interface"] = diskDomB.getTextByTagRoute("interface")
- objDiskList[diskDomB.getTextByTagRoute("device")] = objDisk
- return sourceDiskList == objDiskList
-
-
-def compareDiskDom(diskDomA, diskDomB, requestFlag=True):
- command = "command.server.disk."
- if not requestFlag:
- command = ""
- sourceDisk = {}
- sourceDisk["device"] = diskDomA.getTextByTagRoute("device")
- sourceDisk["description"] = diskDomA.getTextByTagRoute("description")
- sourceDisk["size"] = diskDomA.getTextByTagRoute("size")
- sourceDisk["init"] = diskDomA.getTextByTagRoute("init")
- sourceDisk["interface"] = diskDomA.getTextByTagRoute("interface")
- for tagE in diskDomA.getElementsByTagRoute("partition"):
- sourceDiskPartitions = {}
- partitionDom = XDOM()
- partitionDom.setDomObj(tagE)
- sourceDiskPartitions["size"] = partitionDom.getTextByTagRoute("size")
- #sourceDiskPartitions["free"] = partitionDom.getTextByTagRoute("free")
- sourceDiskPartitions["format"] = partitionDom.getTextByTagRoute("format")
- sourceDiskPartitions["uuid"] = partitionDom.getTextByTagRoute("uuid")
- sourceDisk[partitionDom.getTextByTagRoute("device")] = sourceDiskPartitions
-
- objDisk = {}
- objDisk["device"] = diskDomB.getTextByTagRoute(command + "device")
- objDisk["description"] = diskDomB.getTextByTagRoute(command + "description")
- objDisk["size"] = diskDomB.getTextByTagRoute(command + "size")
- objDisk["init"] = diskDomB.getTextByTagRoute(command + "init")
- objDisk["interface"] = diskDomB.getTextByTagRoute(command + "interface")
- for tagE in diskDomB.getElementsByTagRoute(command + "partition"):
- objDiskPartitions = {}
- partitionDom = XDOM()
- partitionDom.setDomObj(tagE)
- objDiskPartitions["size"] = partitionDom.getTextByTagRoute("size")
- #objDiskPartitions["free"] = partitionDom.getTextByTagRoute("free")
- objDiskPartitions["format"] = partitionDom.getTextByTagRoute("format")
- objDiskPartitions["uuid"] = partitionDom.getTextByTagRoute("uuid")
- objDisk[partitionDom.getTextByTagRoute("device")] = objDiskPartitions
- return sourceDisk == objDisk
-
-
-def getServerConfigDiskDom(serverName, diskName=None):
- diskConfigDom = XDOM()
- if not diskConfigDom.parseFile("%s/%s/disk.xml" % (Globals.SERVER_VOLUME_CONF_DIR, serverName)):
- Utils.log("Unable to parse %s/%s/disk.xml" % (Globals.SERVER_VOLUME_CONF_DIR, serverName))
- return None
- diskTag = diskConfigDom.getElementsByTagRoute("disks.disk")
- if not diskTag:
- Utils.log("Unable to reterive disk information %s/%s/disk.xml" % (Globals.SERVER_VOLUME_CONF_DIR, serverName))
- return None
- if diskName:
- for tagE in diskTag:
- diskDom = XDOM()
- diskDom.setDomObj(tagE)
- if diskName == diskDom.getTextByTagRoute("device"):
- return diskDom
- return None
-
- for tagE in diskTag:
- for partitionTag in tagE.getElementsByTagName("partition"):
- tagE.removeChild(partitionTag)
- return diskConfigDom
-
-
-def getDeviceMountPoint(device):
- try:
- fp = open("/proc/mounts")
- for token in [line.strip().split() for line in fp.readlines()]:
- if token and len(token) > 2 and token[0] == device:
- return token[1]
- fp.close()
- except IOError, e:
- return None
-
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/GetServerNetworkConfig.py b/src/com.gluster.storage.management.gateway.scripts/src/GetServerNetworkConfig.py
deleted file mode 100644
index 3311eb56..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/GetServerNetworkConfig.py
+++ /dev/null
@@ -1,96 +0,0 @@
-# Copyright (C) 2009 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-# Gluster Storage Platform is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 3 of
-# the License, or (at your option) any later version.
-#
-# Gluster Storage Platform 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 General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/>.
-
-import sys
-import syslog
-import Globals
-import Commands
-import re
-from ServerUtils import *
-from Protocol import *
-from NetworkUtils import *
-
-def getServerNetworkConfig(requestXml):
- serverName = requestXml.getTextByTagRoute("command.server-name")
- version = requestXml.getVersion()
- messageId = requestXml.getAttribute("id")
-
- if not serverName:
- responseDom = ResponseXml(Commands.COMMAND_GET_SERVER_NETWORK_CONFIG, "No server name given", messageId, version)
- responseDom.appendTagRoute("server.name", serverName)
- return responseDom
- responseDom = ResponseXml(Commands.COMMAND_GET_SERVER_NETWORK_CONFIG, "OK", messageId, version)
- serverTag = responseDom.createTag("server", None)
- serverTag.appendChild(responseDom.createTag("name", serverName))
- nameServerList, domain, searchDomain = readResolvConfFile()
- if domain:
- domainName = domain[0]
- else:
- domainName = None
- serverTag.appendChild(responseDom.createTag("domainname", domainName))
- i = 1
- for dns in nameServerList:
- serverTag.appendChild(responseDom.createTag("dns%s" % i, dns))
- i += 1
- #TODO: probe and retrieve timezone, ntp-server, preferred-network details and update the tags
- configDom = XDOM()
- if configDom.parseFile("%s/%s/network.xml" % (Globals.SERVER_CONF_DIR, serverName)):
- serverTag.appendChild(responseDom.createTag("timezone", configDom.getTextByTagRoute("network.timezone")))
- serverTag.appendChild(responseDom.createTag("ntp-server", configDom.getTextByTagRoute("network.ntp-server")))
- preferredNetwork = configDom.getTextByTagRoute("network.preferred-network")
- if not preferredNetwork:
- preferredNetwork = "any"
- serverTag.appendChild(responseDom.createTag("preferred-network", preferredNetwork))
-
- deviceList = {}
- for device in getNetDeviceList():
- deviceList[device["device"]] = device
- try:
- macAddress = open("/sys/class/net/%s/address" % device["device"]).read().strip()
- except IOError:
- continue
- interfaceTag = responseDom.createTag("interface", None)
- interfaceTag.appendChild(responseDom.createTag("device", device["device"]))
- interfaceTag.appendChild(responseDom.createTag("description", device["description"]))
- interfaceTag.appendChild(responseDom.createTag("hwaddr", macAddress))
- if deviceList[device["device"]]:
- if deviceList[device["device"]]["onboot"]:
- interfaceTag.appendChild(responseDom.createTag("onboot", "yes"))
- else:
- interfaceTag.appendChild(responseDom.createTag("onboot", "no"))
- interfaceTag.appendChild(responseDom.createTag("bootproto", deviceList[device["device"]]["bootproto"]))
- interfaceTag.appendChild(responseDom.createTag("ipaddr", deviceList[device["device"]]["ipaddr"]))
- interfaceTag.appendChild(responseDom.createTag("netmask", deviceList[device["device"]]["netmask"]))
- interfaceTag.appendChild(responseDom.createTag("gateway", deviceList[device["device"]]["gateway"]))
- if deviceList[device["device"]]["mode"]:
- interfaceTag.appendChild(responseDom.createTag("mode", deviceList[device["device"]]["mode"]))
- if deviceList[device["device"]]["master"]:
- interfaceTag.appendChild(responseDom.createTag("bonding", "yes"))
- spliter = re.compile(r'[\D]')
- interfaceTag.appendChild(responseDom.createTag("bondid", spliter.split(device["master"])[-1]))
- else:
- interfaceTag.appendChild(responseDom.createTag("onboot", "no"))
- interfaceTag.appendChild(responseDom.createTag("bootproto", "none"))
- serverTag.appendChild(interfaceTag)
- responseDom.appendTag(serverTag)
- return responseDom
-
-def test():
- requestString = """<command request="get-server-network-config" id="123" version="3.1.2.2">
-<server-name>s1</server-name></command>"""
- requestDom = RequestXml(requestString)
- print getServerNetworkConfig(requestDom).toxml()
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/Globals.py b/src/com.gluster.storage.management.gateway.scripts/src/Globals.py
deleted file mode 100644
index f8a07c25..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/Globals.py
+++ /dev/null
@@ -1,123 +0,0 @@
-# Copyright (C) 2010 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-# Gluster Storage Platform is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 3 of
-# the License, or (at your option) any later version.
-#
-# Gluster Storage Platform 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 General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/>.
-
-MULTICAST_GROUP = '224.224.1.1'
-MULTICAST_PORT = 5353
-GLUSTER_PLATFORM_VERSION = "3.2"
-
-## System configuration constants
-SYSCONFIG_NETWORK_DIR = "/etc/sysconfig/network-scripts"
-DNSMASQ_CONF_DIR = "/etc/dnsmasq.d"
-
-FSTAB_FILE = "/etc/fstab"
-NFS_EXPORTS_FILE = "/etc/exports"
-SAMBA_CONF_FILE = "/etc/samba/smb.conf"
-TIMEZONE_FILE = "/etc/timezone"
-ZONEINFO_DIR = "/usr/share/zoneinfo"
-LOCALTIME_FILE = "/etc/localtime"
-KERBEROS_CONF_FILE = "/etc/krb5.conf"
-NSSWITCH_CONF_FILE = "/etc/nsswitch.conf"
-NTP_CONF_FILE = "/etc/ntp.conf"
-MODPROBE_CONF_FILE = "/etc/modprobe.d/bonding.conf"
-SYSCONFIG_NETWORK_FILE = "/etc/sysconfig/network"
-RESOLV_CONF_FILE = "/etc/resolv.conf"
-DNSMASQ_LEASE_FILE = "/var/tmp/dnsmasq.leases"
-LIVE_MODE_FILE = "/etc/live"
-ADD_SERVER_COMPLETED_FILE = "/var/tmp/installation-completed"
-
-DNSMASQ_DNS_CONF_FILE = DNSMASQ_CONF_DIR + "/dns.conf"
-DNSMASQ_DHCP_CONF_FILE = DNSMASQ_CONF_DIR + "/dhcp.conf"
-##
-
-## Base constants
-MAX_PARTITION_SIZE = 16777216 # 16 TB
-OS_PARTITION_SIZE = 4000 # 4 GB
-SESSION_TIMEOUT = 1800 # 30 minutes
-SERVER_AGENT_PORT = 50000
-
-BOOT_PARTITION_LABEL = "GLUSTEROS"
-DATA_PARTITION_LABEL = "GLUSTERDATA"
-VOLUME_USER_DESCRIPTION = "Gluster Volume User"
-SERVER_AGENT_RUN_USERNAME = "gluster"
-INSTALLER_SERVER_NAME = "$installer$"
-
-GLUSTER_BASE_DIR = "/etc/glustermg"
-GLUSTER_LUN_DIR = "/data"
-REEXPORT_DIR = "/reexport"
-NFS_EXPORT_DIR = "/nfs"
-CIFS_EXPORT_DIR = "/cifs"
-WEBDAV_DOCUMENT_ROOT_DIR = "/var/www/html"
-UPDATES_DIR = "/UPDATES"
-TRANSPORT_HOME_DIR = "/transport"
-GLUSTERFS_LOG_DIR = "/var/log/glusterfs"
-LOG_DIR = "/var/log/glustermg"
-
-GLUSTER_UPDATES_FILE = "updates.xml"
-INSTALLER_STATUS_FILE = "/var/log/install-server-status.log"
-INSTALL_PLATFORM_LOCK_FILE = "/var/lock/install-gluster-platform.lock"
-LAST_ACCESSED_NETWORK_FILE = "last-accessed-network"
-PREPARE_DATA_DISK_LOCK_FILE = "/var/tmp/prepare-data-disk.lock"
-##
-
-## Derived constants
-GLUSTER_CONF_DIR = GLUSTER_BASE_DIR + "/conf"
-GLUSTER_TMP_DIR = GLUSTER_BASE_DIR + "/tmp"
-VOLUME_CONF_DIR = GLUSTER_BASE_DIR + "/volumes"
-SERVER_CONF_DIR = GLUSTER_BASE_DIR + "/servers"
-DNS_RECORDS_DIR = GLUSTER_BASE_DIR + "/dns-records"
-INSTALLER_CONF_DIR = SERVER_CONF_DIR + "/" + INSTALLER_SERVER_NAME
-
-GSN_USER_INFO_FILE = GLUSTER_BASE_DIR + "/gsn-user.info"
-GLUSTER_VERSION_FILE = GLUSTER_BASE_DIR + "/version"
-GLUSTER_UPDATE_SITE_FILE = GLUSTER_BASE_DIR + "/update-site"
-GLUSTER_DIRECTORY_SERVICE_CONF_FILE = GLUSTER_BASE_DIR + "/directory.xml"
-GLUSTER_TIME_CONF_FILE = GLUSTER_BASE_DIR + "/timeconfig.xml"
-TRANSACTION_KEY_FILE = GLUSTER_BASE_DIR + "/transaction.key"
-SERVER_COUNT_FILE = GLUSTER_BASE_DIR + "/server-count"
-SIGNATURE_FILE = GLUSTER_BASE_DIR + "/.signature"
-GLUSTER_SERVER_POOL_FILE = GLUSTER_BASE_DIR + "/pool"
-GLUSTER_ADMIN_FILE = GLUSTER_BASE_DIR + "/.password"
-
-VOLUME_SMBCONF_FILE = VOLUME_CONF_DIR + "/volumes.smbconf.list"
-
-GLOBAL_NETWORK_FILE = INSTALLER_CONF_DIR + "/network.xml"
-INSTALL_SERVER_CONF_FILE = INSTALLER_CONF_DIR + "/installer.xml"
-INSTALLER_INFO_FILE = INSTALLER_CONF_DIR + "/installer.info"
-INSTALLED_SERVER_COUNT_FILE = INSTALLER_CONF_DIR + "/installed-server-count"
-
-SESSION_FILE = GLUSTER_TMP_DIR + "/login.sessions"
-
-GENERAL_LOG_FILE = LOG_DIR + "/general.log"
-INSTALLER_LOG_FILE = LOG_DIR + "/installer.log"
-PEER_AGENT_LOG_FILE = LOG_DIR + "/peeragent.log"
-SERVER_AGENT_LOG_FILE = LOG_DIR + "/serveragent.log"
-TRANSPORT_AGENT_LOG_FILE = LOG_DIR + "/transport.log"
-##
-
-
-## Global variables
-## TODO: These should be removed
-DOWNLOAD_GLUSTER_UPDATE_PROCESS = None
-DOWNLOAD_GLUSTER_UPDATE_LEVEL = None
-DOWNLOAD_GLUSTER_CURRENT_UPDATE_LEVEL = None
-DOWNLOAD_GLUSTER_UPDATE_MD5SUM = None
-REQUEST_MAP = {}
-VERSION_DICTONARY = {}
-##
-
-AWS_WEB_SERVICE_URL = "http://169.254.169.254/latest"
-REAL_SAMBA_CONF_FILE = "/etc/samba/real.smb.conf"
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/GlusterdUtils.py b/src/com.gluster.storage.management.gateway.scripts/src/GlusterdUtils.py
deleted file mode 100644
index 7c0e899c..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/GlusterdUtils.py
+++ /dev/null
@@ -1,250 +0,0 @@
-# Copyright (c) 2010 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-# Gluster Storage Platform is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 3 of
-# the License, or (at your option) any later version.
-#
-# Gluster Storage Platform 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 General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/>.
-
-import os
-import Utils
-
-import ServerUtils
-
-
-def getGlusterVolumeInfo(volumeName=None):
- volumeNameList = None
- if Utils.isString(volumeName):
- volumeNameList = [volumeName]
- if type(volumeName) == type([]):
- volumeNameList = volumeName
-
- status = Utils.runCommand("gluster volume info", output=True, root=True)
- if status["Status"] != 0:
- Utils.log("Failed to execute 'gluster volume info' command")
- return None
-
- volumeInfoDict = {}
- volumeInfo = {}
- volumeName = None
- brickList = []
- for line in status['Stdout'].split("\n"):
- if not line:
- if volumeName and volumeInfo:
- volumeInfo["Bricks"] = brickList
- volumeInfoDict[volumeName] = volumeInfo
- volumeInfo = {}
- volumeName = None
- brickList = []
- continue
-
- tokens = line.split(":")
- if tokens[0].strip().upper() == "BRICKS":
- continue
- elif tokens[0].strip().upper() == "VOLUME NAME":
- volumeName = tokens[1].strip()
- volumeInfo["VolumeName"] = volumeName
- elif tokens[0].strip().upper() == "TYPE":
- volumeInfo["VolumeType"] = tokens[1].strip()
- elif tokens[0].strip().upper() == "STATUS":
- volumeInfo["VolumeStatus"] = tokens[1].strip()
- elif tokens[0].strip().upper() == "TRANSPORT-TYPE":
- volumeInfo["TransportType"] = tokens[1].strip()
- elif tokens[0].strip().upper().startswith("BRICK"):
- brickList.append(":".join(tokens[1:]).strip())
-
- if volumeName and volumeInfo:
- volumeInfoDict[volumeName] = volumeInfo
-
- if not volumeNameList:
- return volumeInfoDict
-
- # remove unwanted volume info
- for volumeName in list(set(volumeInfoDict.keys()) - set(volumeNameList)):
- del volumeInfoDict[volumeName]
-
- return volumeInfoDict
-
-
-def isVolumeRunning(volumeName):
- if not volumeName:
- return False
- volumeInfo = getGlusterVolumeInfo(volumeName)
- if not volumeInfo:
- return False
- status = volumeInfo[volumeName]["VolumeStatus"]
- if not status:
- return False
- if status.upper() == "STARTED":
- return True
- return False
-
-
-def isVolumeExist(volumeName):
- if not volumeName:
- return False
- if getGlusterVolumeInfo(volumeName):
- return True
- return False
-
-
-def peerProbe(serverName):
- command = "gluster peer probe %s" % serverName
- status = Utils.runCommand(command, output=True, root=True)
- if status["Status"] == 0:
- return True
- Utils.log("command [%s] failed with [%d:%s]" % (command, status["Status"], os.strerror(status["Status"])))
- return False
-
-
-def setAuthAllow(volumeName, authList, includeServers=True):
- if not (volumeName and authList):
- return False
- vacl = []
- if includeServers:
- for serverName in ServerUtils.getAllServerList():
- vacl += ServerUtils.getServerIpList(serverName)
- vacl += authList
-
- command = "gluster volume set %s auth.allow %s" % (volumeName, ",".join(list(set(vacl))))
- status = Utils.runCommand(command, output=True, root=True)
- if status["Status"] == 0:
- return True
- Utils.log("command [%s] failed with [%d:%s]" % (command, status["Status"], os.strerror(status["Status"])))
- return False
-
-
-def volumeCreate(volumeName, volumeType, transportTypeList, brickList):
- command = "gluster volume create %s" % volumeName
-
- if volumeType.upper() == "MIRROR":
- command += " replica 2"
- elif volumeType.upper() == "STRIPE":
- command += " stripe 4"
-
- if "RDMA" in transportTypeList:
- command += " transport rdma"
-
- command += " " + " ".join(brickList)
-
- status = Utils.runCommand(command, output=True, root=True)
- if status["Status"] == 0:
- return True
- Utils.log("command [%s] failed with [%d:%s]" % (command, status["Status"], os.strerror(status["Status"])))
- return False
-
-
-def volumeDelete(volumeName):
- command = "gluster --mode=script volume delete %s" % volumeName
- status = Utils.runCommand(command, output=True, root=True)
- if status["Status"] == 0:
- return True
- Utils.log("command [%s] failed with [%d:%s]" % (command, status["Status"], os.strerror(status["Status"])))
- return False
-
-
-def volumeLogFileName(volumeName, brick, logDir):
- command = "gluster volume log filename %s %s %s" % (volumeName, brick, logDir)
- status = Utils.runCommand(command, output=True, root=True)
- if status["Status"] == 0:
- return True
- Utils.log("command [%s] failed with [%d:%s]" % (command, status["Status"], os.strerror(status["Status"])))
- return False
-
-
-def startVolumeMigration(volumeName, sourcePath, destinationPath):
- command = "gluster volume replace-brick %s %s %s start" % (volumeName, sourcePath, destinationPath)
- status = Utils.runCommand(command, output=True, root=True)
- if status["Status"] == 0:
- lines = status["Stdout"].split("\n")
- if lines[0].split()[-1] == "successfully":
- return True
- Utils.log("command [%s] failed with [%d:%s]" % (command, status["Status"], os.strerror(status["Status"])))
- return False
-
-
-def stopVolumeMigration(volumeName, sourcePath, destinationPath):
- command = "gluster volume replace-brick %s %s %s abort" % (volumeName, sourcePath, destinationPath)
- status = Utils.runCommand(command, output=True, root=True)
- if status["Status"] == 0:
- lines = status["Stdout"].split("\n")
- if lines[0].split()[-1] == "successful":
- return True
- Utils.log("command [%s] failed with [%d:%s]" % (command, status["Status"], os.strerror(status["Status"])))
- return False
-
-
-def commitVolumeMigration(volumeName, sourcePath, destinationPath):
- command = "gluster volume replace-brick %s %s %s commit" % (volumeName, sourcePath, destinationPath)
- status = Utils.runCommand(command, output=True, root=True)
- if status["Status"] == 0:
- lines = status["Stdout"].split("\n")
- if lines[0].split()[-1] == "successful":
- return True
- Utils.log("command [%s] failed with [%d:%s]" % (command, status["Status"], os.strerror(status["Status"])))
- return False
-
-
-def getMigrationStatus(volumeName, sourcePath, destinationPath):
- command = "gluster volume replace-brick %s %s %s status" % (volumeName, sourcePath, destinationPath)
- status = Utils.runCommand(command, output=True, root=True)
- if status['Status'] == 0 and status['Stdout']:
- lines = status["Stdout"].split("\n")
- if "Current file" in lines[0]:
- return "started"
- if "Migration complete" in lines[0]:
- return "completed"
- Utils.log("command [%s] returns unknown status:%s" % (command, lines[0]))
- return "failed"
- #if status['Status'] == 0 and status['Stdout']:
- # for line in status['Stdout'].split('\n'):
- # words = line.split()
- # if words and words[0].upper() == "STATUS:":
- # return " ".join(words[1:]).upper()
- Utils.log("command [%s] failed with [%d:%s]" % (command, status["Status"], os.strerror(status["Status"])))
- return None
-
-
-def volumeRebalanceStart(volumeName):
- command = "gluster volume rebalance %s start" % volumeName
- status = Utils.runCommand(command, output=True, root=True)
- if status["Status"] == 0:
- lines = status["Stdout"].split("\n")
- if lines[0].split()[-1] == "successful":
- return True
- Utils.log("command [%s] failed with [%d:%s]" % (command, status["Status"], os.strerror(status["Status"])))
- return False
-
-
-def volumeRebalanceStop(volumeName):
- command = "gluster volume rebalance %s stop" % volumeName
- status = Utils.runCommand(command, output=True, root=True)
- if status["Status"] == 0:
- lines = status["Stdout"].split("\n")
- if lines[0].split()[0] == "stopped":
- return True
- Utils.log("command [%s] failed with [%d:%s]" % (command, status["Status"], os.strerror(status["Status"])))
- return False
-
-
-def volumeRebalanceStatus(volumeName):
- command = "gluster volume rebalance %s status" % volumeName
- status = Utils.runCommand(command, output=True, root=True)
- if status["Status"] == 0:
- lines = status["Stdout"].split("\n")
- if "rebalance not started" in lines[0]:
- return "not started"
- if "rebalance completed" in lines[0]:
- return "completed"
- return "running"
- Utils.log("command [%s] failed with [%d:%s]" % (command, status["Status"], os.strerror(status["Status"])))
- return False
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/NetworkUtils.py b/src/com.gluster.storage.management.gateway.scripts/src/NetworkUtils.py
deleted file mode 100755
index 42e9892c..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/NetworkUtils.py
+++ /dev/null
@@ -1,483 +0,0 @@
-# Copyright (c) 2010 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-# Gluster Storage Platform is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 3 of
-# the License, or (at your option) any later version.
-#
-# Gluster Storage Platform 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 General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/>.
-
-import sys
-
-if not "/usr/share/system-config-network/" in sys.path:
- sys.path.append("/usr/share/system-config-network")
-
-import os
-import tempfile
-import Globals
-
-from Utils import *
-#from netconfpkg.NCHardwareList import getHardwareList
-
-def readHostFile(fileName=None):
- hostEntryList = []
- if not fileName:
- fileName = "/etc/hosts"
- try:
- for line in open(fileName):
- tokens = line.split("#")[0].strip().split()
- if len(tokens) < 2:
- continue
- hostEntryList.append({tokens[0] : tokens[1:]})
- return hostEntryList
- except IOError:
- log("failed to read %s file" % fileName)
- return None
-
-
-def writeHostFile(hostEntryList, fileName=None):
- if fileName:
- hostFile = fileName
- else:
- hostFile = tempfile.mktemp(prefix="GSPSA")
- try:
- fp = open(hostFile, "w")
- for host in hostEntryList:
- fp.write("%s\t%s\n" % (host.keys()[0], " ".join(host.values()[0])))
- fp.close()
- if hostFile == fileName:
- return True
- except IOError:
- log("failed to write %s file" % hostFile)
- return False
- if runCommandFG("mv -f %s /etc/hosts" % hostFile, root=True) != 0:
- log("failed to rename file %s to /etc/hosts" % hostFile)
- return False
- return True
-
-
-def readResolvConfFile(fileName=None, includeLocalHost=False):
- nameServerList = []
- domain = None
- searchDomain = None
- if not fileName:
- fileName = Globals.RESOLV_CONF_FILE
- try:
- for line in open(fileName):
- tokens = line.split("#")[0].strip().split()
- if len(tokens) < 2:
- continue
- if tokens[0].upper() == "NAMESERVER":
- if includeLocalHost == False and tokens[1] == "127.0.0.1":
- continue
- nameServerList.append(tokens[1])
- continue
- if tokens[0].upper() == "DOMAIN":
- domain = tokens[1:]
- continue
- if tokens[0].upper() == "SEARCH":
- searchDomain = tokens[1:]
- continue
- return nameServerList, domain, searchDomain
- except IOError:
- log("failed to read %s file" % fileName)
- return None, None, None
-
-
-def writeResolvConfFile(nameServerList, domain, searchDomain, fileName=None, appendLocalHost=True):
- if fileName:
- resolvConfFile = fileName
- else:
- resolvConfFile = tempfile.mktemp(prefix="GSPSA")
- try:
- fp = open(resolvConfFile, "w")
- if appendLocalHost:
- fp.write("nameserver 127.0.0.1\n")
- for nameServer in nameServerList:
- fp.write("nameserver %s\n" % nameServer)
- if domain:
- fp.write("domain %s\n" % " ".join(domain))
- if searchDomain:
- fp.write("search %s\n" % " ".join(searchDomain))
- fp.close()
- if resolvConfFile == fileName:
- return True
- except IOError:
- log("failed to write %s file" % resolvConfFile)
- return False
- if runCommandFG("mv -f %s %s" % (resolvConfFile, Globals.RESOLV_CONF_FILE), root=True) != 0:
- log("failed to rename file %s to %s" % (resolvConfFile, Globals.RESOLV_CONF_FILE))
- return False
- return True
-
-
-def readIfcfgConfFile(deviceName, root=""):
- conf = {}
- fileName = "%s%s/ifcfg-%s" % (root, Globals.SYSCONFIG_NETWORK_DIR, deviceName)
- try:
- for line in open(fileName):
- tokens = line.split("#")[0].split("=")
- if len(tokens) != 2:
- continue
- conf[tokens[0].strip().lower()] = tokens[1].strip()
- return conf
- except IOError:
- log("failed to read %s file" % fileName)
- return None
-
-
-def writeIfcfgConfFile(deviceName, conf, root="", deviceFile=None):
- if not deviceFile:
- deviceFile = "%s%s/ifcfg-%s" % (root, Globals.SYSCONFIG_NETWORK_DIR, deviceName)
- if root:
- ifcfgConfFile = deviceFile
- else:
- ifcfgConfFile = tempfile.mktemp(prefix="GSPSA")
- try:
- fp = open(ifcfgConfFile, "w")
- for key in conf.keys():
- if key == "description":
- fp.write("#%s=%s\n" % (key.upper(), conf[key]))
- continue
- if key in ['link', 'mode']:
- continue
- if conf["device"].startswith("bond") and key in ['hwaddr', 'master', 'slave']:
- continue
- if key == "slave" and conf['master']:
- fp.write("SLAVE=yes\n")
- continue
- if key == "onboot":
- if conf[key] == True:
- fp.write("ONBOOT=yes\n")
- elif isString(conf[key]) and conf[key].upper() == "YES":
- fp.write("ONBOOT=yes\n")
- else:
- fp.write("ONBOOT=no\n")
- continue
- if not conf[key]:
- continue
- fp.write("%s=%s\n" % (key.upper(), conf[key]))
- fp.close()
- if ifcfgConfFile == deviceFile:
- return True
- except IOError:
- log("failed to write %s file" % ifcfgConfFile)
- return False
- if runCommandFG("mv -f %s %s" % (ifcfgConfFile, deviceFile), root=True) != 0:
- log("failed to rename file %s to %s" % (ifcfgConfFile, deviceFile))
- return False
- return True
-
-def getNetDeviceDetail(deviceName):
- deviceDetail = {}
- deviceDetail['Name'] = deviceName
- rv = runCommandFG("ifconfig %s" % deviceName, stdout=True, root=True)
- if rv["Status"] != 0:
- return False
- for line in rv["Stdout"].split():
- tokens = line.strip().split(":")
- if tokens[0].upper() == "ENCAP":
- deviceDetail['Model'] = tokens[1].strip().upper()
- break
-
- for line in rv["Stdout"].split("\n"):
- if line.strip().startswith("inet addr:"):
- tokens = line.strip().split(":")
- if tokens[0].upper() == "INET ADDR":
- try:
- deviceDetail['Ip'] = tokens[1].strip().split()[0]
- deviceDetail['Mask'] = tokens[-1].strip()
- except IndexError:
- pass
- break
- return deviceDetail
-
-def getNetDeviceGateway(deviceName):
- rv = runCommand("route -n", output=True, root=True)
- if rv["Status"] != 0:
- return None
- if not rv["Stdout"]:
- return None
- lines = [line for line in rv["Stdout"].split("\n") if line.find("UG") != -1 and line.find(deviceName)]
- if not lines:
- return None
- line = lines[-1].split()
- if line and len(line) > 1:
- return line[1]
- return None
-
-def getNetSpeed(deviceName):
- rv = runCommandFG("ethtool %s" % deviceName, stdout=True, root=True)
- if rv["Status"] != 0:
- return False
- for line in rv["Stdout"].split("\n"):
- tokens = line.strip().split(":")
- if tokens[0].upper() == "SPEED":
- return tokens[1].strip().upper().split("MB")[0]
- return None
-
-def getLinkStatus(deviceName):
- return True
- ## ethtool takes very long time to respond. So its disabled now
- rv = runCommandFG("ethtool %s" % deviceName, stdout=True, root=True)
- if rv["Status"] != 0:
- return False
- for line in rv["Stdout"].split("\n"):
- tokens = line.strip().split(":")
- if tokens[0].upper() == "LINK DETECTED":
- if tokens[1].strip().upper() == "YES":
- return True
- else:
- return False
- return False
-
-
-def getBondMode(deviceName, fileName=None):
- if not fileName:
- fileName = Globals.MODPROBE_CONF_FILE
- try:
- for line in open(fileName):
- tokens = line.split("#")[0].split()
- if len(tokens) < 4:
- continue
- if tokens[0].upper() == "OPTIONS" and tokens[1] == deviceName:
- if tokens[2].startswith("mode="):
- return tokens[2].split("=")[1]
- if tokens[3].startswith("mode="):
- return tokens[3].split("=")[1]
- if tokens[4].startswith("mode="):
- return tokens[4].split("=")[1]
- if tokens[5].startswith("mode="):
- return tokens[5].split("=")[1]
- return None
- except IOError:
- log("failed to read %s file" % fileName)
- return None
-
-
-def setBondMode(deviceName, mode, fileName=None):
- if not fileName:
- fileName = Globals.MODPROBE_CONF_FILE
- tempFileName = getTempFileName()
- try:
- fp = open(tempFileName, "w")
- lines = open(fileName).readlines()
- except IOError:
- log("unable to open file %s" % Globals.MODPROBE_CONF_FILE)
- return False
- for line in lines:
- tokens = line.split()
- if len(tokens) > 1 and "OPTIONS" == tokens[0].upper() and "BOND" in tokens[1].upper() and deviceName == tokens[1]:
- fp.write("options %s max_bonds=2 mode=%s miimon=100\n" % (deviceName, mode))
- deviceName = None
- continue
- fp.write(line)
- if deviceName:
- fp.write("alias %s bonding\n" % deviceName)
- fp.write("options %s max_bonds=2 mode=%s miimon=100\n" % (deviceName, mode))
- fp.close()
- if runCommandFG(["mv", "-f", tempFileName, fileName], root=True) != 0:
- log("unable to move file from %s to %s" % (tempFileName, fileName))
- return False
- return True
-
-def getNetDeviceList(root=""):
- netDeviceList = []
- for deviceName in os.listdir("/sys/class/net/"):
- netDevice = {}
- netDevice["device"] = None
- netDevice["description"] = None
- netDevice["hwaddr"] = None
- netDevice["type"] = None
- netDevice["onboot"] = None
- netDevice["bootproto"] = None
- netDevice["gateway"] = None
- netDevice["peerdns"] = None
- netDevice["autodns"] = None
- netDevice["dns1"] = None
- netDevice["dns2"] = None
- netDevice["dns3"] = None
- netDevice["master"] = None
- netDevice["slave"] = None
- netDevice["nmcontrolled"] = None
- netDevice["link"] = None
- netDevice["mode"] = None
-
- #netDevice["device"] = device.Name
- netDevice["device"] = deviceName
- #netDevice["description"] = device.Description
- netDevice["description"] = deviceName
- #netDevice["type"] = device.Type
- netDevice["type"] = None
- netDevice["link"] = getLinkStatus(deviceName)
- netDevice["mode"] = getBondMode(deviceName, root + Globals.MODPROBE_CONF_FILE)
- deviceDetail = getNetDeviceDetail(deviceName)
- if deviceDetail.has_key('Model'):
- netDevice["model"] = deviceDetail['Model']
- else:
- netDevice["model"] = None
- if deviceDetail.has_key('Ip'):
- netDevice["ipaddr"] = deviceDetail['Ip']
- else:
- netDevice["ipaddr"] = None
- if deviceDetail.has_key('Mask'):
- netDevice["netmask"] = deviceDetail['Mask']
- else:
- netDevice["netmask"] = None
- netDevice["speed"] = getNetSpeed(deviceName)
- try:
- netDevice["hwaddr"] = open("/sys/class/net/%s/address" % deviceName).read().strip()
- except IOError:
- pass
-
- netDeviceList.append(netDevice)
-
- conf = readIfcfgConfFile(deviceName, root)
- if not conf:
- continue
- try:
- netDevice["onboot"] = conf["onboot"]
- except KeyError:
- pass
- try:
- netDevice["bootproto"] = conf["bootproto"]
- except KeyError:
- pass
- if conf.has_key("ipaddr") and conf["ipaddr"]:
- netDevice["ipaddr"] = conf["ipaddr"]
- try:
- netDevice["netmask"] = conf["netmask"]
- except KeyError:
- pass
- if conf.has_key("gateway") and conf["gateway"]:
- netDevice["gateway"] = conf["gateway"]
- else:
- netDevice["gateway"] = getNetDeviceGateway(deviceName)
- try:
- netDevice["peerdns"] = conf["peerdns"]
- except KeyError:
- pass
- try:
- netDevice["autodns"] = conf["autodns"]
- except KeyError:
- pass
- try:
- netDevice["dns1"] = conf["dns1"]
- except KeyError:
- pass
- try:
- netDevice["dns2"] = conf["dns2"]
- except KeyError:
- pass
- try:
- netDevice["dns3"] = conf["dns3"]
- except KeyError:
- pass
- try:
- netDevice["master"] = conf["master"]
- except KeyError:
- pass
- try:
- netDevice["slave"] = conf["slave"]
- except KeyError:
- pass
- try:
- netDevice["nmcontrolled"] = conf["nmcontrolled"]
- except KeyError:
- pass
-
- return netDeviceList
-
- ## bondDevices = [os.path.basename(device) for device in glob.glob("/sys/class/net/bond*")]
-
- ## bondDevices = [os.path.basename(device) for device in glob.glob("/sys/class/net/bond*")]
- ## for deviceName in bondDevices:
- ## if deviceName in linkedBondList:
- ## if deviceName in sysConfigDeviceList:
- ## deviceList[deviceName] = sysConfigDeviceList[deviceName]
- ## else:
- ## deviceList[deviceName] = {'device':deviceName, 'onboot':'no', 'bootproto':'none'}
- ## continue
- ## if len(ethDevices) > 2:
- ## deviceList[deviceName] = {'device':deviceName, 'onboot':'no', 'bootproto':'none'}
-
-
-def configureDhcpServer(serverIpAddress, dhcpIpAddress):
- tmpDhcpConfFile = tempfile.mktemp(prefix="GSPSA")
-
- serverPortString = "68"
- try:
- for arg in open("/proc/cmdline").read().strip().split():
- token = arg.split("=")
- if token[0] == "dhcp":
- serverPortString = token[1]
- break
- except IOError:
- log(syslog.LOG_ERR, "Failed to read /proc/cmdline. Continuing with default port 68")
- try:
- serverPort = int(serverPortString)
- except ValueError:
- log(syslog.LOG_ERR, "Invalid dhcp port '%s' in /proc/cmdline. Continuing with default port 68" % serverPortString)
- serverPort = 68
-
- try:
- fp = open(tmpDhcpConfFile, "w")
- fp.write("bind-interfaces\n")
- fp.write("except-interface=lo\n")
- fp.write("dhcp-range=%s,%s\n" % (dhcpIpAddress, dhcpIpAddress))
- fp.write("dhcp-lease-max=1\n")
- fp.write("dhcp-alternate-port=%s\n" % serverPort)
- fp.write("dhcp-leasefile=%s\n" % Globals.DNSMASQ_LEASE_FILE)
- #fp.write("server=%s\n" % serverIpAddress)
- #fp.write("dhcp-script=/usr/sbin/server-info\n")
- fp.close()
- except IOError:
- log(syslog.LOG_ERR, "unable to write dnsmasq dhcp configuration %s" % tmpDhcpConfFile)
- return False
- if runCommandFG("mv -f %s %s" % (tmpDhcpConfFile, Globals.DNSMASQ_DHCP_CONF_FILE), root=True) != 0:
- log(syslog.LOG_ERR, "unable to copy dnsmasq dhcp configuration to %s" % Globals.DNSMASQ_DHCP_CONF_FILE)
- return False
- return True
-
-
-def isDhcpServer():
- return os.path.exists(Globals.DNSMASQ_DHCP_CONF_FILE)
-
-
-def getDhcpServerStatus():
- if runCommandFG("service dnsmasq status", root=True) == 0:
- return True
- return False
-
-
-def startDhcpServer():
- if runCommandFG("service dnsmasq start", root=True) == 0:
- return True
- return False
-
-
-def stopDhcpServer():
- if runCommandFG("service dnsmasq stop", root=True) == 0:
- runCommandFG("rm -f %s" % Globals.DNSMASQ_LEASE_FILE, root=True)
- return True
- return False
-
-
-def restartDhcpServer():
- stopDhcpServer()
- runCommandFG("rm -f %s" % Globals.DNSMASQ_LEASE_FILE, root=True)
- return startDhcpServer()
-
-
-def reloadDhcpServer():
- if runCommandFG("service dnsmasq reload", root=True) == 0:
- return True
- return False
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/Protocol.py b/src/com.gluster.storage.management.gateway.scripts/src/Protocol.py
deleted file mode 100644
index ff073593..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/Protocol.py
+++ /dev/null
@@ -1,438 +0,0 @@
-# Copyright (C) 2009 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-# Gluster Storage Platform is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 3 of
-# the License, or (at your option) any later version.
-#
-# Gluster Storage Platform 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 General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/>.
-
-import xml
-import xml.parsers.expat
-import xml.dom.minidom as MDOM
-import os
-import Globals
-import copy
-import Utils
-
-XML_STRING = 0
-XML_FILE = 1
-
-class XDOM:
- _domObj = None
-
- def __init__(self):
- self._domObj = MDOM.Document()
- return
-
- @classmethod
- def getText(self, nodeList):
- rc = ""
- for node in nodeList:
- if node.nodeType == node.TEXT_NODE:
- rc = rc + node.data
- return rc.strip()
-
- def parseString(self, requestString):
- try:
- self._domObj = MDOM.parseString(requestString)
- except xml.parsers.expat.ExpatError, e:
- Utils.log("XML string parse error: %s" % str(e))
- return False
- return True
-
- def parseFile(self, fileName):
- try:
- self._domObj = MDOM.parse(fileName)
- except IOError, e:
- Utils.log("error reading file: %s" % str(e))
- return False
- except xml.parsers.expat.ExpatError, e:
- Utils.log("XML file %s parse error: %s" % (fileName, str(e)))
- return False
- return True
-
- def setDomObj(self, dom):
- if dom and type(dom) != type([]):
- self._domObj = dom
- return True
- return False
-
- def createTextNode(self, text):
- if not self._domObj:
- return False
- if not text:
- return False
- return self._domObj.createTextNode(str(text))
-
- def createTag(self, tag, text=None):
- if not self._domObj:
- return None
- if tag == None:
- return None
-
- tagE = self._domObj.createElement(str(tag))
- if text:
- tagEText = self._domObj.createTextNode(str(text))
- tagE.appendChild(tagEText)
- return tagE
-
- def addTag(self, tag):
- if not self._domObj:
- return False
- if not tag:
- return False
-
- self._domObj.appendChild(tag)
- return True
-
- def createTagRoute(self, tagRoute, text=None):
- if not tagRoute:
- return False
-
- tagList = tagRoute.split(".")
- tag = None
- previousTag = None
- for tagName in tagList[:-1]:
- newTag = self.createTag(tagName, None)
- if not tag:
- tag = newTag
- previousTag = newTag
- continue
- previousTag.appendChild(newTag)
- previousTag = newTag
-
- if previousTag:
- previousTag.appendChild(self.createTag(tagList[-1], text))
- else:
- tag = self.createTag(tagList[-1], text)
- return tag
-
- def appendTagRoute(self, tagRoute, value=None):
- if not self._domObj:
- return False
- if not tagRoute:
- return False
-
- parentTagE = self._domObj
-
- tagNameList = tagRoute.split(".")
- newTagRoute = tagNameList.pop(-1)
-
- for i in range(len(tagNameList), 0, -1):
- tagE = self.getElementsByTagRoute(".".join(tagNameList[:i]))
- if tagE:
- parentTagE = tagE[0]
- break
- newTagRoute = tagNameList[i-1] + "." + newTagRoute
-
- newTagE = self.createTagRoute(newTagRoute, value)
- if not newTagE:
- return False
- try:
- parentTagE.appendChild(newTagE)
- except xml.dom.HierarchyRequestErr, e:
- Utils.log("error occured. %s" + str(e))
- return False
- return True
-
- def setTextByTagRoute(self, tagRoute, tagValue):
- if not self._domObj:
- return None
-
- if not tagRoute:
- return None
-
- tagE = self.getElementsByTagRoute(tagRoute)
- if not tagE:
- return False
-
- parentTagE = self.getElementsByTagRoute(".".join(tagRoute.split(".")[:-1]))
- if not parentTagE:
- return False
-
- parentTagE[0].childNodes.remove(tagE[0])
- parentTagE[0].appendChild(self.createTag(tagRoute.split(".")[-1], tagValue))
- return True
-
- def getElementsByTagRoute(self, tagRoute):
- if not self._domObj:
- return None
-
- if not tagRoute:
- return None
-
- x = None
- for tag in tagRoute.split("."):
- if x is None:
- x = self._domObj.getElementsByTagName(tag)
- continue
- if x == []:
- break
- x = x[0].getElementsByTagName(tag)
- return x
-
- def getTextByTagRoute(self, tagRoute):
- if not self._domObj:
- return None
-
- x = self.getElementsByTagRoute(tagRoute)
- if x:
- return self.getText(x[0].childNodes)
- return None
-
- def getElementsByTagName(self, name):
- if not self._domObj:
- return None
- return self._domObj.getElementsByTagName(name)
-
- def writexml(self, fileName, indent="", addindent="", newl=""):
- if not self._domObj:
- return None
- try:
- fp = open(fileName, "w")
- self._domObj.writexml(fp, indent, addindent, newl)
- fp.close()
- return True
- except IOError:
- return False
-
- def toString(self, indent=" ", newl="\n", encoding = None):
- if not self._domObj:
- return None
- return self._domObj.toprettyxml(indent, newl, encoding)
-
- def toxml(self, encoding = None):
- if not self._domObj:
- return None
- return self._domObj.toxml(encoding)
-
- def toprettyxml(self, indent=" ", newl="\n", encoding = None):
- return self.toString(indent, newl, encoding)
-
- def getAttribute(self, attributeName):
- if not attributeName:
- return None
- try:
- return self.getElementsByTagName("command")[0].getAttribute(attributeName)
- except IndexError:
- return False
-
- def setAttribute(self, attributeName, attributeValue):
- if not (attributeName and attributeValue):
- return None
- try:
- return self.getElementsByTagName("command")[0].setAttribute(attributeName, attributeValue)
- except IndexError:
- return False
-
- def getRequestCommand(self):
- return self.getAttribute("request")
-
- def getResponseCommand(self):
- return self.getAttribute("response")
-
- def getResponseCode(self):
- return self.getAttribute("response-code")
-
- def getMessageId(self):
- return self.getAttribute("id")
-
- def getVersion(self):
- return self.getAttribute("version")
-
- def getRequestAction(self):
- return self.getAttribute("action")
-
- def setVersion(self, value):
- return self.setAttribute("version", value)
-
- def setRequestAction(self, value):
- return self.setAttribute("action", value)
-
- def createCommandTag(self, command, responseCode, id, version=Globals.GLUSTER_PLATFORM_VERSION):
- commandTag = self._domObj.createElement("command")
- commandTag.setAttribute("response", command)
- commandTag.setAttribute("response-code", responseCode)
- commandTag.setAttribute("id", id)
- commandTag.setAttribute("version", version)
- return commandTag
-##--end of XDOM
-
-class RequestXml(XDOM):
- def __init__(self, requestString, type=None):
- if None == requestString:
- XDOM.__init__(self)
- return
- try:
- if None == type:
- if os.path.isfile(requestString):
- self._domObj = MDOM.parse(requestString)
- else:
- self._domObj = MDOM.parseString(requestString)
- elif XML_FILE == type:
- self._domObj = MDOM.parse(requestString)
- elif XML_STRING == type:
- self._domObj = MDOM.parseString(requestString)
- except IOError:
- XDOM.__init__(self)
- except xml.parsers.expat.ExpatError:
- XDOM.__init__(self)
-
-##--end of RequestXML
-
-class ResponseXml(XDOM):
- _commandTag = None
- def __init__(self, command, responseCode, id, version=Globals.GLUSTER_PLATFORM_VERSION):
- XDOM.__init__(self)
- if command and responseCode and id:
- self._commandTag = self.createCommandTag(command, responseCode, id, version)
- self._domObj.appendChild(self._commandTag)
-
- def appendCommand(self, command, responseCode, id, version=Globals.GLUSTER_PLATFORM_VERSION):
- if command and responseCode and id:
- self._commandTag = self.createCommandTag(command, responseCode, id, version)
- self._domObj.appendChild(self._commandTag)
- return True
- return False
-
- def append(self, tagName, tagValue=None):
- if not self._commandTag:
- return False
- tag = self.createTag(tagName, tagValue)
- if tag:
- self._commandTag.appendChild(tag)
- return True
- return False
-
- def appendTag(self, tag):
- if not tag:
- return False
- if not self._commandTag:
- return False
- self._commandTag.appendChild(tag)
- return True
-
- def appendTagRoute(self, tagRoute, value=None):
- if not self._commandTag:
- return False
- if not tagRoute:
- return False
-
- parentTagE = self._commandTag
-
- tagNameList = tagRoute.split(".")
- newTagRoute = tagNameList.pop(-1)
-
- for i in range(len(tagNameList), 0, -1):
- tagE = self.getElementsByTagRoute(".".join(["command"] + tagNameList[:i]))
- if tagE:
- parentTagE = tagE[0]
- break
- newTagRoute = tagNameList[i-1] + "." + newTagRoute
-
- newTagE = self.createTagRoute(newTagRoute, value)
- if not newTagE:
- return False
- try:
- parentTagE.appendChild(newTagE)
- except xml.dom.HierarchyRequestErr, e:
- Utils.log("error occured. %s" + str(e))
- return False
- return True
-
- def appendTagRouteOld(self, tagRoute, value=None):
- if not tagRoute:
- return False
- if not self._commandTag:
- return False
-
- tmpTagRoute = ""
- previousTagE = self._commandTag
- tagE = None
- for tagName in tagRoute.split("."):
- if not tmpTagRoute:
- tagE = self.getElementsByTagRoute("command." + tagName)
- else:
- tagE = self.getElementsByTagRoute("command." + tmpTagRoute + "." + tagName)
- if not tagE:
- break
- if len(tagE) != 1:
- return False
- previousTagE = tagE[0]
- if not tmpTagRoute:
- tmpTagRoute = tagName
- else:
- tmpTagRoute = tmpTagRoute + "." + tagName
-
- if tmpTagRoute == tagRoute:
- return False
- newTagRoute = tagRoute[len(tmpTagRoute):]
- if newTagRoute[0] == '.':
- newTagRoute = newTagRoute[1:]
-
- if previousTagE.childNodes and previousTagE.childNodes[0].nodeType == previousTagE.TEXT_NODE:
- return False
- previousTagE.appendChild(self.createTagRoute(newTagRoute, value))
- return True
-##--end of ResponseXml
-
-def test():
- #volumes = RequestXml(VolumeFile, XML_FILE).getElementsByTagRoute("volume-list.volume")
- requestStr = '''<command request="create-volume" id="123" version="3.1">
-<volume>
-<name>movies1</name>
-<type>cluster mirror</type>
-<start>512000</start>
-<server>zresearch</server>
-<vacl>192.168.20.*</vacl>
-<vacl>192.168.30.*</vacl>
-<nfs>
-<export>no</export>
-</nfs>
-<cifs>
-<export>no</export>
-</cifs>
-<webdav>
-<export>no</export>
-</webdav>
-</volume>
-</command>'''
-
- requestXml = RequestXml(requestStr)
- print requestXml.getAttribute("")
-
-def test1():
- rs = ResponseXml("create-volume", "OK", "xyz")
- rs.appendTagRoute("volume.detail.name", "music")
- print rs.toprettyxml()
- rs.append("volume", "data")
- print rs.toprettyxml()
- rs.appendTagRoute("volume.detail.ipaddr", "192.168.10.1")
- print rs.toprettyxml()
- print rs.appendTagRoute("volume.detail.ipaddr.v6", "ff:ff::ff::")
- print rs.toprettyxml()
-
- print rs.getTextByTagRoute("command.volume.detail")
-
-def test2():
- rs = ResponseXml("download-volume-logs", "OK", "xyz")
- te = rs.createTag("interface", None)
- te.appendChild(rs.createTag("device", "DEVICE1"))
- te.appendChild(rs.createTag("description", "my device one"))
- rs.appendTag(te)
-
- te = rs.createTag("interface", None)
- te.appendChild(rs.createTag("device", "DEVICE2"))
- te.appendChild(rs.createTag("description", "my device two"))
- rs.appendTag(te)
- print rs.toprettyxml()
-
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/RRDUtils.py b/src/com.gluster.storage.management.gateway.scripts/src/RRDUtils.py
deleted file mode 100644
index 1ad0deee..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/RRDUtils.py
+++ /dev/null
@@ -1,72 +0,0 @@
-import rrdtool
-import os
-from socket import gethostname
-from itertools import groupby
-
-class RRD:
- def __init__ (self):
- self.COLORS = [0xff7777, 0x7777ff, 0x55ff55, 0xffcc77, 0xff77ff, 0x77ffff,0xffff77, 0x55aaff]
- self.HOST = gethostname()
- self.DIR = "/var/lib/collectd"
-
- def fade_component(self, component):
- return ((component + 255 * 5) / 6)
-
- def fade_color(self, color):
- r = 0;
- for i in [0,1,2]:
- shft = (i * 8)
- component = ((color >> shft) & 255)
- r |= (self.fade_component(component) << shft)
- return r
-
- def generate_pngs(self):
-
- rrdlist = os.popen ("find %s -type f -name '*.rrd'" % self.DIR)
-
- for rrd in rrdlist:
- self.dss = []
- self.defs = ""
-
- rrdinfo = rrdtool.info(rrd.strip())
-
- for key in rrdinfo.keys():
- if key.split('[')[0] == 'ds':
- self.dss.append(key.split('[')[1].split(']')[0])
- self.dss.sort()
-
- self.dss = [a for a,b in groupby(self.dss)]
-
- for ds in self.dss:
- self.defs = self.defs + " DEF:%s_avg=%s:%s:AVERAGE " % (ds, rrd.strip(), ds)
- self.defs = self.defs + " DEF:%s_max=%s:%s:MAX " % (ds, rrd.strip(), ds)
-
- j = 0
- for ds in self.dss:
- color = self.COLORS[j % len(self.COLORS)]
- j = j + 1
- faded_color = self.fade_color(color)
- self.defs = self.defs + " AREA:%s_max#%06x " % (ds, faded_color)
-
- j = 0
- for ds in self.dss:
- color = self.COLORS[j % len(self.COLORS)]
- j = j + 1
- self.defs = self.defs + " LINE2:%s_avg#%06x:%s " % (ds, color, ds)
- self.defs = self.defs + " GPRINT:%s_avg:AVERAGE:%%5.1lf%%sAvg " % ds
- self.defs = self.defs + " GPRINT:%s_max:MAX:%%5.1lf%%sMax " % ds
-
- for span in ['1hour', '1day', '1week', '1month']:
- os.system ("mkdir -p %s/%s" % (self.DIR, self.HOST))
- image = os.path.dirname(rrd.strip()) + "-" + span + ".png"
- cmd = "rrdtool graph " + image + " -t \"%s %s\"" % (os.path.dirname(rrd.strip()), span) + " --imgformat PNG --width 600 --height 100 --start now-" + span + " --end now --interlaced " + self.defs + " >/dev/null 2>&1"
- os.system(cmd)
-
-
-def main ():
-
- rrd = RRD ()
- rrd.generate_pngs ()
-
-if __name__ == "__main__":
- main()
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/ServerUtils.py b/src/com.gluster.storage.management.gateway.scripts/src/ServerUtils.py
deleted file mode 100644
index 1fec994c..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/ServerUtils.py
+++ /dev/null
@@ -1,308 +0,0 @@
-# Copyright (c) 2010 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-# Gluster Storage Platform is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 3 of
-# the License, or (at your option) any later version.
-#
-# Gluster Storage Platform 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 General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/>.
-
-import os
-import re
-import subprocess
-import glob
-import Globals
-from Protocol import *
-from Utils import *
-
-def isValidServer(serverName):
- for profile in getProfileList():
- if profile.ProfileName == "default" and profile.Active:
- if serverName == profile.DNS.Hostname:
- return True
- return False
-
-def getHostname():
- for profile in getProfileList():
- if profile.ProfileName == "default" and profile.Active:
- return profile.DNS.Hostname
- return None
-
-def getDomainName():
- try:
- domainName = open(Globals.DOMAINNAME_FILE).read()
- except IOError:
- return None
- return domainName.split()[0]
-
-def replaceServerIp(fileName, findWhat, replaceWith):
- try:
- data = open(fileName).read()
- fp = open(fileName, "w")
- fp.write(re.sub(findWhat, replaceWith, data))
- fp.close()
- return True
- except IOError:
- return False
- except ValueError:
- return False
- except OSError:
- return False
-
-def serverName2IpAddress(serverName):
- command = "dig %s | grep '^%s'" % (serverName, serverName)
- ps = subprocess.Popen(command,
- shell=True,
- stdout=subprocess.PIPE,
- stdin=subprocess.PIPE,
- stderr=subprocess.PIPE,
- close_fds=True)
- ipAddress = serverName
- if ps.wait() == 0:
- output = ps.communicate()
- ipAddress = output[0].split()[-1]
- return ipAddress
-
-def getInstallerIp():
- if not os.path.exists(Globals.INSTALLER_INFO_FILE):
- return None
- try:
- for line in open(Globals.INSTALLER_INFO_FILE):
- tokens = line.split("=")
- if tokens[0] == "IP-ADDRESS":
- return tokens[1].split(",")[0].strip()
- except IOError:
- syslog.syslog(syslog.LOG_ERR, "unable to read %s file" % Globals.INSTALLER_INFO_FILE)
- return False
-
-def setInstallerIp(installerIp):
- try:
- open(Globals.INSTALLER_INFO_FILE, "w").write("IP-ADDRESS=%s\n" % installerIp)
- return True
- except IOError:
- log(syslog.LOG_ERR, "unable to create %s file" % Globals.INSTALLER_INFO_FILE)
- return False
-
-def getCurrentServerName():
- try:
- for line in open(Globals.SYSCONFIG_NETWORK_FILE):
- tokens = line.split("=")
- if tokens[0] == "HOSTNAME":
- return tokens[1].strip()
- except IOError:
- syslog.syslog(syslog.LOG_ERR, "unable to read %s file" % Globals.SYSCONFIG_NETWORK_FILE)
- return False
-
-def getLastAccessedNetwork(serverName):
- lastAccessedNetworkFile = ("/%s/servers/%s/%s" %
- (Globals.GLUSTER_CONF_DIR, serverName, Globals.LAST_ACCESSED_NETWORK_FILE))
- try:
- return open(lastAccessedNetworkFile).read().strip()
- except IOError:
- log(syslog.LOG_ERR, "failed to read last accessed network file %s" % lastAccessedNetworkFile)
- pass
- return False
-
-def setLastAccessedNetwork(serverName, ipAddress):
- lastAccessedNetworkFile = ("/%s/servers/%s/%s" %
- (Globals.GLUSTER_CONF_DIR, serverName, Globals.LAST_ACCESSED_NETWORK_FILE))
- try:
- open(lastAccessedNetworkFile, "w").write(ipAddress.strip() + "\n")
- except IOError:
- log(syslog.LOG_ERR, "failed to write last accessed network file %s" % lastAccessedNetworkFile)
- return False
- return True
-
-def getServerIpList(serverName, preferredNetworkOnly=False):
- networkXmlFile = ("%s/servers/%s/network.xml" % (Globals.GLUSTER_CONF_DIR, serverName))
- configDom = XDOM()
- if not configDom.parseFile(networkXmlFile):
- log(syslog.LOG_ERR, "failed to read %s file" % networkXmlFile)
- return None
- preferredNetwork = configDom.getTextByTagRoute("preferred-network")
- ipList = []
- interfaceDom = XDOM()
- for tagE in configDom.getElementsByTagName("interface"):
- interfaceDom.setDomObj(tagE)
- deviceName = interfaceDom.getTextByTagRoute("device")
- hostIp = interfaceDom.getTextByTagRoute("ipaddr")
- if not hostIp:
- continue
- if preferredNetworkOnly:
- if preferredNetwork.upper() == "ANY" or preferredNetwork.upper() == deviceName.upper():
- ipList.append(hostIp)
- else:
- ipList.append(hostIp)
- if preferredNetworkOnly:
- lastAccessedNetworkIp = getLastAccessedNetwork(serverName)
- if lastAccessedNetworkIp in ipList:
- ipList.remove(lastAccessedNetworkIp)
- ipList = [lastAccessedNetworkIp] + ipList
- return ipList
-
-def getServerPreferredIpList(serverName):
- return getServerIpList(serverName, True)
-
-def getExecuteServerList(serverList):
- executeServerList = {}
- for serverName in serverList:
- if serverName == Globals.INSTALLER_SERVER_NAME:
- installerIp = getInstallerIp()
- if installerIp:
- executeServerList[serverName] = [installerIp]
- continue
- executeServerList[serverName] = getServerPreferredIpList(serverName)
- return executeServerList
-
-def getAllServerList():
- serverList = []
- for filePath in glob.glob("%s/servers/*" % Globals.GLUSTER_CONF_DIR):
- if os.path.isdir(filePath):
- serverList.append(os.path.basename(filePath))
- try:
- serverList.remove(Globals.INSTALLER_SERVER_NAME)
- except ValueError:
- pass
- return serverList
-
-def getServerNetworkConfigFromLocalFile(serverName):
- configDom = XDOM()
- configDom.parseFile("%s/servers/%s/network.xml" % (Globals.GLUSTER_CONF_DIR, serverName))
- return configDom
-
-def updateServerNetworkConfigXmlFile(serverName, serverNetworkDom):
- configDom = XDOM()
- serverTag = serverNetworkDom.getElementsByTagRoute("server")[0]
- configDom.setDomObj(serverTag)
- if not configDom.writexml("%s/%s/network.xml" % (Globals.SERVER_VOLUME_CONF_DIR, serverName)):
- log("Faild to write xml file %s/%s/network.xml" % (Globals.SERVER_VOLUME_CONF_DIR, serverName))
-
-def compareServerNetworkDom(serverNetworkDomA, serverNetworkDomB, requestFlag=True):
- command = "command.server."
- if not requestFlag:
- command = ""
- sourceServer = {}
- tagText = serverNetworkDomA.getTextByTagRoute("name")
- if not tagText:
- taxText = None
- sourceServer["name"] = tagText
- tagText = serverNetworkDomA.getTextByTagRoute("domain-name")
- if not tagText:
- tagText = None
- sourceServer["domain-name"] = tagText
- tagText = serverNetworkDomA.getTextByTagRoute("search-domain")
- if not tagText:
- tagText = None
- sourceServer["search-domain"] = tagText
- tagText = serverNetworkDomA.getTextByTagRoute("dns1")
- if not tagText:
- tagText = None
- sourceServer["dns1"] = tagText
- tagText = serverNetworkDomA.getTextByTagRoute("dns2")
- if not tagText:
- tagText = None
- sourceServer["dns2"] = tagText
- tagText = serverNetworkDomA.getTextByTagRoute("dns3")
- if not tagText:
- tagText = None
- sourceServer["dns3"] = tagText
- for tagE in serverNetworkDomA.getElementsByTagRoute("interface"):
- interfaceDom = XDOM()
- interfaceDom.setDomObj(tagE)
- sourceServerList = {}
- tagText = interfaceDom.getTextByTagRoute("description")
- if not tagText:
- tagText = None
- sourceServerList["description"] = tagText
- tagText = interfaceDom.getTextByTagRoute("hwaddr")
- if not tagText:
- tagText = None
- sourceServerList["hwaddr"] = tagText
- tagText = interfaceDom.getTextByTagRoute("onboot")
- if not tagText:
- tagText = None
- sourceServerList["onboot"] = tagText
- tagText = interfaceDom.getTextByTagRoute("bootproto")
- if not tagText:
- tagText = None
- sourceServerList["bootproto"] = tagText
- tagText = interfaceDom.getTextByTagRoute("ipaddr")
- if not tagText:
- tagText = None
- sourceServerList["ipaddr"] = tagText
- tagText = interfaceDom.getTextByTagRoute("netmask")
- if not tagText:
- tagText = None
- sourceServerList["netmask"] = tagText
- tagText = interfaceDom.getTextByTagRoute("gateway")
- if not tagText:
- tagText = None
- sourceServerList["gateway"] = tagText
- sourceServer[interfaceDom.getTextByTagRoute("device")] = sourceServerList
- objServer = {}
- tagText = serverNetworkDomB.getTextByTagRoute(command + "name")
- if not tagText:
- taxText = None
- objServer["name"] = tagText
- tagText = serverNetworkDomB.getTextByTagRoute(command + "domain-name")
- if not tagText:
- tagText = None
- objServer["domain-name"] = tagText
- tagText = serverNetworkDomB.getTextByTagRoute(command + "search-domain")
- if not tagText:
- tagText = None
- objServer["search-domain"] = tagText
- tagText = serverNetworkDomB.getTextByTagRoute(command + "dns1")
- if not tagText:
- tagText = None
- objServer["dns1"] = tagText
- tagText = serverNetworkDomB.getTextByTagRoute(command + "dns2")
- if not tagText:
- tagText = None
- objServer["dns2"] = tagText
- tagText = serverNetworkDomB.getTextByTagRoute(command + "dns3")
- if not tagText:
- tagText = None
- objServer["dns3"] = tagText
- for tagE in serverNetworkDomB.getElementsByTagRoute(command + "interface"):
- interfaceDom = XDOM()
- interfaceDom.setDomObj(tagE)
- objServerList = {}
- tagText = interfaceDom.getTextByTagRoute("description")
- if not tagText:
- tagText = None
- objServerList["description"] = tagText
- tagText = interfaceDom.getTextByTagRoute("hwaddr")
- if not tagText:
- tagText = None
- objServerList["hwaddr"] = tagText
- tagText = interfaceDom.getTextByTagRoute("onboot")
- if not tagText:
- tagText = None
- objServerList["onboot"] = tagText
- tagText = interfaceDom.getTextByTagRoute("bootproto")
- if not tagText:
- tagText = None
- objServerList["bootproto"] = tagText
- tagText = interfaceDom.getTextByTagRoute("ipaddr")
- if not tagText:
- tagText = None
- objServerList["ipaddr"] = tagText
- tagText = interfaceDom.getTextByTagRoute("netmask")
- if not tagText:
- tagText = None
- objServerList["netmask"] = tagText
- tagText = interfaceDom.getTextByTagRoute("gateway")
- if not tagText:
- tagText = None
- objServerList["gateway"] = tagText
- objServer[interfaceDom.getTextByTagRoute("device")] = objServerList
- return sourceServer == objServer
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/Utils.py b/src/com.gluster.storage.management.gateway.scripts/src/Utils.py
deleted file mode 100644
index 391a2bb3..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/Utils.py
+++ /dev/null
@@ -1,1066 +0,0 @@
-# Copyright (c) 2010 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-# Gluster Storage Platform is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 3 of
-# the License, or (at your option) any later version.
-#
-# Gluster Storage Platform 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 General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/>.
-
-import sys
-import os
-import re
-import socket
-import struct
-import syslog
-import subprocess
-#import spwd
-import time
-#import uuid
-import tempfile
-import grp
-import pwd
-import inspect
-from datetime import datetime
-import urllib
-
-import Globals
-import Protocol
-
-RUN_COMMAND_ERROR = -1024
-LOG_SYSLOG = 1
-SYSLOG_REQUIRED = False
-LOG_FILE_NAME = None
-LOG_FILE_OBJ = None
-
-
-def _getLogCode(priority):
- if syslog.LOG_EMERG == priority:
- return "M"
- elif syslog.LOG_ALERT == priority:
- return "A"
- elif syslog.LOG_CRIT == priority:
- return "C"
- elif syslog.LOG_ERR == priority:
- return "E"
- elif syslog.LOG_WARNING == priority:
- return "W"
- elif syslog.LOG_NOTICE == priority:
- return "N"
- elif syslog.LOG_INFO == priority:
- return "I"
- elif syslog.LOG_DEBUG == priority:
- return "D"
- else: # UNKNOWN
- return "X"
-
-
-def setLogFile(fileName):
- global LOG_FILE_NAME
-
- if fileName:
- LOG_FILE_NAME = fileName
- return True
- return False
-
-
-def closeLog():
- global LOG_FILE_OBJ
- global SYSLOG_REQUIRED
-
- if SYSLOG_REQUIRED:
- syslog.closelog()
- SYSLOG_REQUIRED = False
- return True
-
- if LOG_FILE_OBJ:
- try:
- LOG_FILE_OBJ.close()
- LOG_FILE_OBJ = None
- except IOError, e:
- sys.stderr.write("Failed to close file: %s\n" % e)
- return False
- return True
-
-
-def openLog(fileName=None):
- global LOG_FILE_NAME
- global LOG_FILE_OBJ
- global SYSLOG_REQUIRED
-
- if fileName == LOG_SYSLOG:
- syslog.openlog(os.path.basename(sys.argv[0]))
- SYSLOG_REQUIRED = True
- return True
-
- if fileName:
- LOG_FILE_NAME = fileName
-
- if not LOG_FILE_NAME:
- return False
-
- closeLog()
-
- try:
- LOG_FILE_OBJ = open(LOG_FILE_NAME, "a")
- except IOError, e:
- sys.stderr.write("Failed to open file %s: %s\n" % (LOG_FILE_NAME, e))
- return False
- return True
-
-def record(priority, message=None):
- global LOG_FILE_OBJ
- global SYSLOG_REQUIRED
-
- stack = inspect.stack()[1]
- if stack[3] == "<module>":
- prefix = "%s:%s:%s" % (stack[1], stack[2], stack[3])
- else:
- prefix = "%s:%s:%s()" % (stack[1], stack[2], stack[3])
-
- if type(priority) == type("") or type(priority) == type(u""):
- logPriority = syslog.LOG_INFO
- logMessage = priority
- else:
- logPriority = priority
- logMessage = message
-
- if SYSLOG_REQUIRED:
- syslog.syslog(logPriority, "[%s]: %s" % (prefix, logMessage))
- return
-
- fp = sys.stderr
- if LOG_FILE_OBJ:
- fp = LOG_FILE_OBJ
-
- fp.write("[%s] %s [%s]: %s" % (str(datetime.now()), _getLogCode(logPriority), prefix, logMessage))
- if logMessage[-1] != '\n':
- fp.write("\n")
- fp.flush()
- return
-
-
-def trace(message):
- if message:
- log(syslog.LOG_DEBUG, message)
-
-
-def isString(value):
- return (type(value) == type("") or type(value) == type(u""))
-
-
-def getTempFileName():
- filedesc, filename = tempfile.mkstemp(prefix="GSP_")
- os.close(filedesc)
- return filename
-
-
-def runCommandBG(command, stdinFileObj=None, stdoutFileObj=None, stderrFileObj=None,
- shell=False, root=None):
- log("runCommandBG(): Trying to execute command [%s]" % command)
-
- if shell:
- if not isString(command):
- return None
- else:
- if isString(command):
- command = command.split()
-
- if root == True:
- if shell:
- command = "sudo " + command
- else:
- command = ['sudo'] + command
- elif isString(root):
- if shell:
- command = "sudo -u " + root + " " + command
- else:
- command = ['sudo', '-u', root] + command
-
- if not stdinFileObj:
- stdinFileObj=subprocess.PIPE
- if not stdoutFileObj:
- stdoutFileObj=subprocess.PIPE
- if not stderrFileObj:
- stderrFileObj=subprocess.PIPE
-
- try:
- process = subprocess.Popen(command,
- bufsize=-1,
- stdin=stdinFileObj,
- stdout=stdoutFileObj,
- stderr=stderrFileObj,
- shell=shell)
- return process
- except OSError, e:
- log("runCommandBG(): Failed to run command [%s]: %s" % (command, e))
- return None
-
-
-def runCommand(command,
- input='', output=False,
- shell=False, root=None):
- rv = {}
- rv["Status"] = RUN_COMMAND_ERROR
- rv["Stdout"] = None
- rv["Stderr"] = None
-
- try:
- stdinFileName = getTempFileName()
- stdinFileObj = open(stdinFileName, "w")
- stdinFileObj.write(input)
- stdinFileObj.close()
- stdinFileObj = open(stdinFileName, "r")
-
- stdoutFileName = getTempFileName()
- stdoutFileObj = open(stdoutFileName, "w")
-
- stderrFileName = getTempFileName()
- stderrFileObj = open(stderrFileName, "w")
- except IOError, e:
- log("Failed to create temporary file for executing command [%s]: %s" % (command, e))
- if output:
- return rv
- return rv["Status"]
-
- stdoutContent = None
- stderrContent = None
-
- process = runCommandBG(command,
- stdinFileObj=stdinFileObj,
- stdoutFileObj=stdoutFileObj,
- stderrFileObj=stderrFileObj,
- shell=shell, root=root)
- if process:
- rv['Status'] = process.wait()
- rv['Stdout'] = open(stdoutFileName).read()
- rv['Stderr'] = open(stderrFileName).read()
-
- os.remove(stdinFileName)
- os.remove(stdoutFileName)
- os.remove(stderrFileName)
-
- log("runCommand(): execution status of command [%s] = [%s]" % (command, rv))
-
- if output:
- return rv
- return rv["Status"]
-
-
-def runCommandFG(command, stdout=False, stderr=False,
- shell=False, root=None):
- if stdout or stderr:
- output = True
- else:
- output = False
- return runCommand(command, output=output, shell=shell, root=root)
-
-
-def IP2Number(ipString):
- try:
- return socket.htonl(struct.unpack("I", socket.inet_aton(ipString))[0])
- except socket.error:
- return None
- except TypeError:
- return None
- except struct.error:
- return None
-
-
-def Number2IP(number):
- try:
- return socket.inet_ntoa(struct.pack("I", socket.ntohl(number)))
- except socket.error:
- return None
- except AttributeError:
- return None
- except ValueError:
- return None
-
-
-def computeHostName(hostName):
- if not hostName:
- return False
-
- hostPrefix = ""
- for i in range(len(hostName), 0, -1):
- pos = i - 1
- if hostName[pos].isdigit():
- continue
- break
- hostPrefix = hostName[:pos+1]
- try:
- hostIndex = int(hostName[pos+1:])
- except ValueError:
- hostIndex = 0
- # TODO: Check the availablity of the (server) name
- return "%s%s" % (hostPrefix, hostIndex + 1)
-
-
-def daemonize():
- try:
- pid = os.fork()
- if pid > 0:
- # exit first parent
- sys.exit(0)
- except OSError, e:
- #sys.stderr.write("fork #1 failed: %d (%s)\n" % (e.errno, e.strerror))
- return False
-
- # decouple from parent environment
- os.chdir("/")
- os.setsid()
- os.umask(0)
-
- # do second fork
- try:
- pid = os.fork()
- if pid > 0:
- # exit from second parent
- sys.exit(0)
- except OSError, e:
- #sys.stderr.write("fork #2 failed: %d (%s)\n" % (e.errno, e.strerror))
- return False
-
- # redirect standard file descriptors
- sys.stdout.flush()
- sys.stderr.flush()
- si = file("/dev/null", 'r')
- so = file("/dev/null", 'a+')
- se = file("/dev/null", 'a+', 0)
- os.dup2(si.fileno(), sys.stdin.fileno())
- os.dup2(so.fileno(), sys.stdout.fileno())
- os.dup2(se.fileno(), sys.stderr.fileno())
- return True
-
-
-def getDownloadStatus(fileName):
- try:
- lines = [line for line in open(fileName)
- if "saved" in line or "%" in line]
- except IOError:
- return 0
- if not lines:
- return 0
- if "saved" in lines[-1]:
- return 100
- return lines[-1].split("%")[0].split()[-1]
-
-
-def getMeminfo():
- """-> dict of data from meminfo (str:int).
- Values are in kilobytes.
- """
- import re
- re_parser = re.compile(r'^(?P<key>\S*):\s*(?P<value>\d*)\s*kB' )
- result = {}
- for line in open('/proc/meminfo'):
- match = re_parser.match(line)
- if not match:
- continue # skip lines that don't parse
- key, value = match.groups(['key', 'value'])
- result[key] = int(value)
- result['MemUsed'] = (result['MemTotal'] - result['MemFree'])
- return result
-
-
-def getCpuUsage():
- """-> dict of cpuid : (usertime, nicetime, systemtime, idletime)
- cpuid "cpu" means the total for all CPUs.
- cpuid "cpuN" means the value for CPU N.
- """
- wanted_records = [line for line in open('/proc/stat') if
- line.startswith('cpu')]
- result = {}
- for cpuline in wanted_records:
- fields = cpuline.split()[:5]
- data = map(int, fields[1:])
- result[fields[0]] = tuple(data)
- return result
-
-def _getCpuStatList():
- try:
- fp = open("/proc/stat")
- cpuStatList = map(float, fp.readline().split()[1:])
- fp.close()
- return cpuStatList
- except IOError, e:
- Utils.log("Failed to open /proc/stat: %s" % str(e))
- return None
-
-def getCpuUsageAvg():
- st1 = _getCpuStatList()
- time.sleep(2)
- st2 = _getCpuStatList()
- if not (st1 and st2):
- return None
- delta = [st2[i] - st1[i] for i in range(len(st1))]
- cpuPercent = sum(delta[:3]) / delta[3] * 100.0
- return str('%.4f' % cpuPercent)
-
-def getLoadavg():
- try:
- loadavgstr = open('/proc/loadavg', 'r').readline().strip()
- except IOError:
- syslog.syslog(syslog.LOG_ERR, "failed to find cpu load")
- return None
-
- data = map(float, loadavgstr.split()[1:])
- # returns 1 minute load average
- return data[0]
-
-
-def getInfinibandPortStatus():
-
- """ Check for availability of infiniband port
- and return which port is active in a key pair value
- """
-
- # Check for existence of infiniband ports
- value = os.popen ("ls /sys/class/infiniband").readline().strip()
-
- if not value:
- return None
-
- portlist = os.popen ("echo /sys/class/infiniband/*/ports/*").readline().split()
-
- portkeys = {}
-
- for port in portlist:
- value = os.popen ("cat %s/state" %
- port.strip()).readline().split(':')[1].strip()
- portkeys[port.strip()] = value
-
- return portkeys
-
-
-def getServerFqdn():
- rv = runCommand("hostname --fqdn", output=True, root=True)
- if not rv["Stderr"]:
- return stripEmptyLines(rv["Stdout"])
- return socket.gethostname()
-
-
-def getServerCount():
- try:
- return int(open(Globals.SERVER_COUNT_FILE).read().strip())
- except IOError:
- log("failed to read file %s" % Globals.SERVER_COUNT_FILE)
- return 1
- except ValueError:
- log("invalid number format in file %s" % Globals.SERVER_COUNT_FILE)
- return 1
-
-
-def setServerCount(count):
- try:
- open(Globals.SERVER_COUNT_FILE, "w").write("%s\n" % count)
- return True
- except IOError:
- log("failed to write file %s" % Globals.SERVER_COUNT_FILE)
- return False
-
-
-def getInstalledServerCount():
- try:
- return int(open(Globals.INSTALLED_SERVER_COUNT_FILE).read().strip())
- except IOError:
- log("failed to read file %s" % Globals.INSTALLED_SERVER_COUNT_FILE)
- return 1
- except ValueError:
- log("invalid number format in file %s" % Globals.INSTALLED_SERVER_COUNT_FILE)
- return 1
-
-
-def setInstalledServerCount(count):
- try:
- open(Globals.INSTALLED_SERVER_COUNT_FILE, "w").write("%s\n" % count)
- return True
- except IOError:
- log("failed to write file %s" % Globals.INSTALLED_SERVER_COUNT_FILE)
- return False
-
-
-def getLastInstalledServerIpList():
- ipList = {}
- networkDom = Protocol.XDOM()
- if not networkDom.parseFile(Globals.GLOBAL_NETWORK_FILE):
- log("failed to parse file %s" % Globals.GLOBAL_NETWORK_FILE)
- for tagE in networkDom.getElementsByTagRoute("server.interface"):
- interfaceDom = Protocol.XDOM()
- interfaceDom.setDomObj(tagE)
- ipAddress = interfaceDom.getTextByTagRoute("ipaddr")
- if ipAddress:
- ipList[interfaceDom.getTextByTagRoute("device")] = ipAddress
- return ipList
-
-
-def getFreeIpAddress(device=None):
- serverCount = getServerCount()
- installedServerCount = getInstalledServerCount()
- if serverCount == installedServerCount:
- return None
-
- availableServerCount = serverCount - installedServerCount
- ipList = getLastInstalledServerIpList()
-
- if not ipList:
- return None
-
- if device:
- if device not in ipList.keys():
- return None
- deviceIpAddress = ipList[device]
- else:
- deviceIpAddress = ipList.values()[0]
- ipNumber = IP2Number(deviceIpAddress)
-
- for i in range((ipNumber + availableServerCount), ipNumber, -1):
- ipAddress = Number2IP(i)
- if runCommandFG(["ping", "-qnc", "1", ipAddress]) != 0:
- return ipAddress
- return None
-
-
-def getPasswordHash(userName):
- try:
- #return spwd.getspnam(userName).sp_pwd
- return "Not implimented"
- except KeyError:
- return None
-
-
-def getTransactionKey():
- try:
- tokens = open(Globals.TRANSACTION_KEY_FILE).read().split(',')
- except IOError:
- return None, None
- return tokens
-
-
-def generateSignature():
- #return str(uuid.uuid4()) + ('--%f' % time.time())
- return ('--%f' % time.time())
-
-
-def getSignature():
- try:
- return open(Globals.SIGNATURE_FILE).read().strip()
- except IOError:
- log(syslog.LOG_ERR, "unable to read signaure from %s file" % Globals.SIGNATURE_FILE)
- return False
-
-
-def storeSignature(signature, fileName=Globals.SIGNATURE_FILE):
- try:
- open(fileName, "w").write(signature + "\n")
- except IOError:
- log(syslog.LOG_ERR, "unable to write signature %s to %s file" % (signature, fileName))
- return False
- return True
-
-
-def isUserExist(userName):
- try:
- grp.getgrnam(userName).gr_gid
- return True
- except KeyError:
- pass
- try:
- pwd.getpwnam(userName).pw_uid
- return True
- except KeyError:
- pass
- return False
-
-
-def getGsnUserInfo(fileName=Globals.GSN_USER_INFO_FILE):
- userInfo = {}
- userInfo["UserId"] = None
- userInfo["Password"] = None
- try:
- for line in open(fileName):
- line = line.strip()
- k = line[:line.index("=")]
- v = line[line.index("=") + 1:]
- if v[0] == "'" or v[0] == '"':
- v = v[1:]
- if v[-1] == "'" or v[-1] == '"':
- v = v[:-1]
- if k.upper() == "GSN_ID":
- userInfo["UserId"] = v
- if k.upper() == "GSN_PASSWORD":
- userInfo["Password"] = v
- except IOError, e:
- log("Failed to read file %s: %s" % (fileName, e))
- return userInfo
-
-
-def setGsnUserInfo(userInfo, fileName=Globals.GSN_USER_INFO_FILE):
- try:
- fp = open(fileName, "w")
- fp.write("GSN_ID=%s\n" % userInfo["UserId"])
- fp.write("GSN_PASSWORD=%s\n" % userInfo["Password"])
- fp.close()
- return True
- except IOError, e:
- log("Failed to write file %s: %s" % (fileName, e))
- return False
-
-
-def getPlatformVersion(fileName=Globals.GLUSTER_VERSION_FILE):
- versionInfo = {}
- versionInfo["Version"] = None
- versionInfo["Update"] = None
- try:
- lines = open(Globals.GLUSTER_VERSION_FILE).readlines()
- for line in open(fileName):
- line = line.strip()
- k = line[:line.index("=")]
- v = line[line.index("=") + 1:]
- if v[0] == "'" or v[0] == '"':
- v = v[1:]
- if v[-1] == "'" or v[-1] == '"':
- v = v[:-1]
- if k.upper() == "VERSION":
- versionInfo["Version"] = v
- if k.upper() == "UPDATE":
- versionInfo["Update"] = v
- except IOError, e:
- log("Failed to read file %s: %s" % (fileName, e))
- return versionInfo
-
-
-def setPlatformVersion(versionInfo, fileName=Globals.GLUSTER_VERSION_FILE):
- if isString(versionInfo):
- tokens = versionInfo.strip().split(".")
- if len(tokens) < 2:
- log("Invalid version format %s. Expecting <MAJOR>.<MINOR>.<PATCHLEVEL>" % versionInfo)
- return False
- version = ".".join(tokens[:2])
- update = ".".join(tokens[2:])
- if not update:
- update = "0"
- else:
- version = versionInfo["Version"]
- update = versionInfo["Update"]
- try:
- fp = open(fileName, "w")
- fp.write("VERSION=%s\n" % version)
- fp.write("UPDATE=%s\n" % update)
- fp.close()
- return True
- except IOError, e:
- log("Failed to write file %s: %s" % (fileName, e))
- return False
-
-
-def getGlusterUpdateDom(serverVersion):
- errorMessage = ""
- updateInfoDom = None
- try:
- baseUrl = open(Globals.GLUSTER_UPDATE_SITE_FILE).read().strip()
- except IOError, e:
- log("Failed to read file %s: %s" % (Globals.GLUSTER_UPDATE_SITE_FILE, e))
- errorMessage = "Failed to read update site file"
- return updateInfoDom, errorMessage
-
- try:
- url = "%s/%s/%s" % (baseUrl, serverVersion, Globals.GLUSTER_UPDATES_FILE)
- connection = urllib.urlopen(url)
- if connection.getcode() != 200:
- connection.close()
- errorMessage = "Error received from server to open URL %s" % url
- return updateInfoDom, errorMessage
- updateInfoString = connection.read()
- connection.close()
- except IOError, e:
- log("Failed to get update information from URL %s: %s" % (url, e))
- errorMessage = "Error getting update information"
- return updateInfoDom, errorMessage
-
- updateInfoDom = Protocol.XDOM()
- if not updateInfoDom.parseString(updateInfoString):
- log("XML parse error on update information content [%s]" % updateInfoString)
- errorMessage = "Parse error on update information"
- updateInfoDom = None
- return updateInfoDom, errorMessage
-
-
-def removeFile(fileName, root=False):
- if root:
- if runCommand("rm %s" % fileName, root=True) == 0:
- return True
- return False
- try:
- os.remove(fileName)
- return True
- except OSError, e:
- log("Failed to remove file %s: %s" % (fileName, e))
- return False
-
-
-def isLiveMode():
- return os.path.exists(Globals.LIVE_MODE_FILE)
-
-def convertKbToMb(kb):
- return kb / 1024.0
-
-
-def getIPIndex(indexFile):
- try:
- fp = open(indexFile)
- line = fp.readline()
- fp.close()
- index = int(line)
- except IOError:
- index = 0
- except ValueError:
- index = False
- return index
-
-def setIPIndex(index, indexFile):
- try:
- fp = open(indexFile, "w")
- fp.write(str(index))
- fp.close()
- except IOError:
- return False
- return True
-
-def IP2Number(ipString):
- try:
- return socket.htonl(struct.unpack("I", socket.inet_aton(ipString))[0])
- except socket.error:
- return None
- except TypeError:
- return None
- except struct.error:
- return None
-
-def Number2IP(number):
- try:
- return socket.inet_ntoa(struct.pack("I", socket.ntohl(number)))
- except socket.error:
- return None
- except AttributeError:
- return None
- except ValueError:
- return None
-
-def hasEntryFoundInFile(searchString, dnsEntryFileName):
- try:
- addServerEntryList = open(dnsEntryFileName).read().split()
- except IOError:
- return None
- if searchString in addServerEntryList:
- return True
- return False
-
-
-def computeIpAddress(ipAddress, startIp, endIp):
- startIpNumber = IP2Number(startIp)
- endIpNumber = IP2Number(endIp)
- if not ipAddress:
- return startIp
- nextIpNumber = IP2Number(ipAddress)
- while True:
- nextIpNumber = nextIpNumber + 1
- ipAddress = Number2IP(nextIpNumber)
- rv = runCommandFG(["ping", "-qnc", "1", ipAddress])
- if type(rv) == type(True):
- return False
- if rv != 0:
- break
-
- if nextIpNumber >= startIpNumber and nextIpNumber <= endIpNumber:
- return ipAddress
-
- nextIpNumber = IP2Number(startIp)
- while True:
- ipAddress = Number2IP(nextIpNumber)
- nextIpNumber = nextIpNumber + 1
- rv = runCommandFG(["ping", "-qnc", "1", ipAddress])
- if type(rv) == type(True):
- return False
- if rv != 0:
- break
-
- if IP2Number(ipAddress) >= startIpNumber and IP2Number(ipAddress) <= endIpNumber:
- return ipAddress
- return False
-
-
-def setHostNameAndIp(hostName, ipAddress, lastAddServerDetailFile):
- try:
- fp = open(lastAddServerDetailFile, "w")
- fp.write("HOSTNAME=" + hostName + "\n")
- fp.write("IPADDRESS=" + ipAddress);
- fp.close()
- except IOError:
- return False
- return True
-
-def getPort():
- try:
- fd = open(Globals.PORT_FILE, "r")
- portString = fd.readline()
- fd.close()
- port = int(portString)
- except IOError:
- port = Globals.DEFAULT_PORT - 2
- except ValueError:
- port = Globals.DEFAULT_PORT - 2
- return port
-
-def setPort(port):
- try:
- fd = open(Globals.PORT_FILE, "w")
- fd.write(str(port))
- fd.close()
- except IOError:
- return False
- return True
-
-def getServerAgentCredentials():
- try:
- lines = open(Globals.SERVERAGENT_AUTH_FILE).readlines()
- except IOError:
- return None,None
-
- userName = None
- password = None
-
- for l in lines:
- if l[-1] == '\n':
- l = l[:-1]
- k = l[:l.index('=')]
- v = l[l.index('=') + 1:]
- if v[0] == "'" or v[0] == '"':
- v = v[1:]
- if v[-1] == "'" or v[-1] == '"':
- v = v[:-1]
- if k.upper() == "AGENT_ID":
- userName = v
- if k.upper() == "AGENT_PASSWORD":
- password = v
-
- return userName, password
-
-def getGatewayAgentCredentials():
- try:
- lines = open(Globals.GATEWAYAGENT_AUTH_FILE).readlines()
- except IOError:
- return None
-
- #userName = None
- password = None
-
- for l in lines:
- if l[-1] == '\n':
- l = l[:-1]
- k = l[:l.index('=')]
- v = l[l.index('=') + 1:]
- if v[0] == "'" or v[0] == '"':
- v = v[1:]
- if v[-1] == "'" or v[-1] == '"':
- v = v[:-1]
- #if k.upper() == "AGENT_ID":
- # userName = v
- if k.upper() == "AGENT_PASSWORD":
- password = v
-
- return password
-
-def getWebAgentCredentials():
- try:
- lines = open(Globals.WEBAGENT_AUTH_FILE).readlines()
- except IOError:
- return None,None
-
- userName = None
- password = None
-
- for l in lines:
- if l[-1] == '\n':
- l = l[:-1]
- k = l[:l.index('=')]
- v = l[l.index('=') + 1:]
- if v[0] == "'" or v[0] == '"':
- v = v[1:]
- if v[-1] == "'" or v[-1] == '"':
- v = v[:-1]
- if k.upper() == "AGENT_ID":
- userName = v
- if k.upper() == "AGENT_PASSWORD":
- password = v
-
- return userName, password
-
-def daemonize():
- try:
- pid = os.fork()
- if pid > 0:
- # exit first parent
- sys.exit(0)
- except OSError, e:
- #sys.stderr.write("fork #1 failed: %d (%s)\n" % (e.errno, e.strerror))
- return False
-
- # decouple from parent environment
- os.chdir("/")
- os.setsid()
- os.umask(0)
-
- # do second fork
- try:
- pid = os.fork()
- if pid > 0:
- # exit from second parent
- sys.exit(0)
- except OSError, e:
- #sys.stderr.write("fork #2 failed: %d (%s)\n" % (e.errno, e.strerror))
- return False
-
- # redirect standard file descriptors
- sys.stdout.flush()
- sys.stderr.flush()
- si = file("/dev/null", 'r')
- so = file("/dev/null", 'a+')
- se = file("/dev/null", 'a+', 0)
- os.dup2(si.fileno(), sys.stdin.fileno())
- os.dup2(so.fileno(), sys.stdout.fileno())
- os.dup2(se.fileno(), sys.stderr.fileno())
- return True
-
-def getFreeIpAddress():
- startRange, endRange = getStoragePoolInfo()
- if not (startRange and endRange):
- return None
-
- startIpNumber = IP2Number(startRange)
- endIpNumber = IP2Number(endRange)
-
- for ipNumber in range(endIpNumber, startIpNumber, -1):
- rv = runCommandFG(["ping", "-qnc", "1", Number2IP(ipNumber)])
- if type(rv) == type(True):
- return None
- if rv != 0:
- return Number2IP(ipNumber)
- return None
-
-def getDhcpServerStatus():
- status = runCommandFG(["sudo", "service", "dnsmasq", " status"])
- if type(status) == type(True) or 0 != status:
- return False
- return True
-
-def startDhcpServer():
- status = runCommandFG(["sudo", "service", "dnsmasq", " start"])
- if type(status) == type(True) or 0 != status:
- return False
- return True
-
-def stopDhcpServer():
- status = runCommandFG(["sudo", "service", "dnsmasq", " stop"])
- if type(status) == type(True) or 0 != status:
- return False
- return True
-
-def getStoragePoolInfo():
- startRange = None
- endRange = None
- try:
- for line in open(Globals.GLUSTER_SERVER_POOL_FILE):
- tokens = line.split("=")
- if tokens[0] == "STARTRANGE":
- startRange = tokens[1].strip()
- if tokens[0] == "ENDRANGE":
- endRange = tokens[1].strip()
- except IOError:
- log(syslog.LOG_ERR, "unable to read %s file" % Globals.GLUSTER_SERVER_POOL_FILE)
- return startRange, endRange
-
-def configureDnsmasq(serverIpAddress, dhcpIpAddress):
- dnsmasqConfFile = Globals.GLUSTER_CONF_CONF_DIR + "/dnsmasq.conf"
- serverPortString = "68"
- try:
- for arg in open("/proc/cmdline").read().strip().split():
- token = arg.split("=")
- if token[0] == "dhcp":
- serverPortString = token[1]
- break
- except IOError:
- log(syslog.LOG_ERR, "Failed to read /proc/cmdline. Continuing with default port 68")
- try:
- serverPort = int(serverPortString)
- except ValueError:
- log(syslog.LOG_ERR, "Invalid dhcp port '%s' in /proc/cmdline. Continuing with default port 68" % serverPortString)
- serverPort = 68
-
- try:
- fp = open(dnsmasqConfFile, "w")
- fp.write("no-hosts\n")
- #fp.write("addn-hosts=%s\n" % Globals.GLUSTER_DNS_ENTRIES)
- fp.write("bind-interfaces\n")
- fp.write("except-interface=lo\n")
- fp.write("dhcp-range=%s,%s\n" % (dhcpIpAddress, dhcpIpAddress))
- fp.write("dhcp-lease-max=1\n")
- #fp.write("dhcp-option=option:router,%s\n" % serverIp)
- #fp.write("dhcp-option=option:ntp-server,%s\n" % serverIp)
- fp.write("dhcp-alternate-port=%s\n" % serverPort)
- fp.write("server=%s\n" % serverIpAddress)
- fp.write("dhcp-script=/usr/sbin/server-info\n")
- fp.close()
- except IOError:
- log(syslog.LOG_ERR, "unable to write dnsmasq configuration %s" % dnsmasqConfFile)
- return False
- status = runCommandFG(["sudo", "cp", "-f", Globals.GLUSTER_CONF_CONF_DIR + "/dnsmasq.conf", Globals.DNSMASQ_CONF_FILE])
- if type(status) == type(True) or 0 != status:
- log(syslog.LOG_ERR, "unable to copy dnsmasq configuration to " + Globals.DNSMASQ_CONF_FILE)
- return False
- return True
-
-def configureDhcpServer(serverIpAddress, dhcpIpAddress):
- return configureDnsmasq(serverIpAddress, dhcpIpAddress)
-
-def log(priority, message=None):
- if type(priority) == type(""):
- logPriority = syslog.LOG_INFO
- logMessage = priority
- else:
- logPriority = priority
- logMessage = message
- if not logMessage:
- return
- #if Globals.DEBUG:
- # sys.stderr.write(logMessage)
- else:
- syslog.syslog(logPriority, logMessage)
- return
-
-
-def stripEmptyLines(content):
- ret = ""
- for line in content.split("\n"):
- if line.strip() != "":
- ret += line
- return ret
-
-
-def getDeviceFormatStatusFile(device):
- return "/var/tmp/format_%s.status" % device.replace('/', '_')
-
-def getDeviceFormatLockFile(device):
- return "/var/lock/format_%s.lock" % device.replace('/', '_')
-
-def getDeviceFormatOutputFile(device):
- return "/var/tmp/format_%s.out" % device.replace('/', '_')
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/VolumeUtils.py b/src/com.gluster.storage.management.gateway.scripts/src/VolumeUtils.py
deleted file mode 100644
index b1031ccc..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/VolumeUtils.py
+++ /dev/null
@@ -1,612 +0,0 @@
-# Copyright (c) 2010 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-# Gluster Storage Platform is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 3 of
-# the License, or (at your option) any later version.
-#
-# Gluster Storage Platform 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 General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/>.
-
-import os
-import glob
-import tempfile
-from operator import itemgetter
-import Globals
-from Protocol import *
-from Utils import *
-from DiskUtils import *
-from ServerUtils import *
-import GlusterdUtils as Glusterd
-
-
-def isVolumeExist(volumeName):
- volumeDom = XDOM()
- return volumeDom.parseFile("%s/%s.xml" % (Globals.VOLUME_CONF_DIR, volumeName)) and \
- Glusterd.isVolumeExist(volumeName)
-
-
-def getVolumeUuid(volumeName):
- fileName = "%s/%s.xml" % (Globals.VOLUME_CONF_DIR, volumeName)
- volumeDom = XDOM()
- if not volumeDom.parseFile(fileName):
- log("Failed to parse volume configuration file %s of %s" % (fileName, volumeName))
- return None
- return volumeDom.getTextByTagRoute("uuid")
-
-
-def readVolumeSmbConfFile(fileName=Globals.VOLUME_SMBCONF_FILE):
- entryList = []
- try:
- fp = open(fileName)
- for line in fp:
- tokens = line.split("#")[0].strip().split(";")[0].strip().split("=")
- if len(tokens) != 2:
- continue
- if tokens[0].strip().upper() == "INCLUDE":
- entryList.append(tokens[1].strip())
- fp.close()
- except IOError, e:
- log("Failed to open file %s: %s" % (fileName, str(e)))
- return entryList
-
-
-def writeVolumeSmbConfFile(entryList, fileName=Globals.VOLUME_SMBCONF_FILE):
- try:
- fp = open(fileName, "w")
- for entry in entryList:
- fp.write("include = %s\n" % entry)
- fp.close()
- return True
- except IOError, e:
- log("Failed to write file %s: %s" % (fileName, str(e)))
- return False
-
-
-def includeVolume(volumeName, fileName=Globals.VOLUME_SMBCONF_FILE):
- volumeFile = "%s/%s.smbconf" % (Globals.VOLUME_CONF_DIR, volumeName)
- if not os.path.exists(volumeFile):
- return False
- entryList = readVolumeSmbConfFile(fileName)
- if volumeFile in entryList:
- return True
- entryList.append(volumeFile)
- return writeVolumeSmbConfFile(entryList, fileName)
-
-
-def excludeVolume(volumeName, fileName=Globals.VOLUME_SMBCONF_FILE):
- volumeFile = "%s/%s.smbconf" % (Globals.VOLUME_CONF_DIR, volumeName)
- if not os.path.exists(volumeFile):
- return False
- entryList = readVolumeSmbConfFile(fileName)
- if volumeFile not in entryList:
- return True
- entryList.remove(volumeFile)
- log("entryList = %s" % entryList)
- return writeVolumeSmbConfFile(entryList, fileName)
-
-
-def writeVolumeCifsConfiguration(volumeName, userList, adminUser=None):
- volumeFile = "%s/%s.smbconf" % (Globals.VOLUME_CONF_DIR, volumeName)
- try:
- fp = open(volumeFile, "w")
- fp.write("[%s]\n" % volumeName)
- fp.write(" comment = %s volume served by Gluster\n" % volumeName)
- fp.write(" path = %s/%s\n" % (Globals.CIFS_EXPORT_DIR, volumeName))
- fp.write(" guest ok = yes\n")
- fp.write(" public = yes\n")
- fp.write(" writable = yes\n")
- if adminUser:
- fp.write(" admin users = %s, %s\n" % (adminUser, ", ".join(userList)))
- fp.write(" valid users = %s, %s\n" % (adminUser, ", ".join(userList)))
- else:
- fp.write(" admin users = %s\n" % (", ".join(userList)))
- fp.write(" valid users = %s\n" % (", ".join(userList)))
- fp.close()
- return True
- except IOError, e:
- log("Failed to write file %s: %s" % (volumeFile, str(e)))
- return False
-
-
-def removeVolumeCifsConfiguration(volumeName):
- volumeFile = "%s/%s.smbconf" % (Globals.VOLUME_CONF_DIR, volumeName)
- try:
- os.remove(volumeFile)
- return True
- except OSError, e:
- log("Failed to remove file %s: %s" % (volumeFile, str(e)))
- return False
-
-
-def getVolumeListByPartitionName(partitionName):
- volumeConfigFileList = glob.glob(Globals.VOLUME_CONF_DIR + "/*.xml")
- if not volumeConfigFileList:
- return None
-
- volumeList = []
- for volumeXmlFile in volumeConfigFileList:
- volumeDom = XDOM()
- volumeDom.parseFile(volumeXmlFile)
- serverTopology = volumeDom.getElementsByTagRoute("volume.topology.group")
- serverPartitionFound = False
- for topology in serverTopology:
- partitionDom = XDOM()
- for partition in topology.getElementsByTagName("partition"):
- partitionDom.setDomObj(partition)
- if partitionDom.getTextByTagRoute("name") == partitionName:
- serverPartitionFound = True
- break
- if serverPartitionFound:
- volumeList.append(volumeDom.getElementsByTagRoute("volume")[0])
- break
- return volumeList
-
-
-def addServerPartitionConfig(inputDom, groupOrder, partitionTag):
- if not(inputDom and groupOrder and partitionTag):
- return False
- groupDom = XDOM()
- for group in inputDom.getElementsByTagRoute("topology.group"):
- groupDom.setDomObj(group)
- order = groupDom.getTextByTagRoute("order")
- if order and int(order) == groupOrder:
- group.appendChild(partitionTag)
- return inputDom
- return False
-
-
-def removeServerPartitionConfig(inputDom, partitionName):
- if not(inputDom and partitionName):
- return False
- for group in inputDom.getElementsByTagRoute("topology.group"):
- partitionDom = XDOM()
- for partition in group.getElementsByTagName("partition"):
- partitionDom.setDomObj(partition)
- if partitionDom.getTextByTagRoute("name") == partitionName:
- group.removeChild(partition)
- return inputDom
- return False
-
-
-def updateServerPartitionConfig(inputDom, partitionName, partitionTag):
- if not(inputDom and partitionName and partitionTag):
- return False
- for group in inputDom.getElementsByTagRoute("topology.group"):
- partitionDom = XDOM()
- for partition in group.getElementsByTagName("partition"):
- partitionDom.setDomObj(partition)
- if partitionDom.getTextByTagRoute("name") == partitionName:
- try:
- group.replaceChild(partitionTag, partition)
- return inputDom
- except AttributeError:
- return False
- return False
-
-
-def getServerPartitionConfigUuid(serverGroupList, serverPartition):
- for group in serverGroupList:
- if not group:
- continue
- partitionDom = XDOM()
- for partition in group.getElementsByTagName("partition"):
- partitionDom.setDomObj(partition)
- partitionName = partition.getTextByTagName("name")
- if not partitionName:
- continue
- if partitionName == serverPartition:
- return partitionDom.getTextByTagName("uuid")
- return False
-
-
-def setServerPartitionConfigProperty(inputDom, partitionName, propertyDict):
- if not(inputDom and partitionName and propertyDict):
- return False
- for group in inputDom.getElementsByTagRoute("topology.group"):
- partitionDom = XDOM()
- for partition in group.getElementsByTagName("partition"):
- partitionDom.setDomObj(partition)
- if partitionDom.getTextByTagRoute("name") == partitionName:
- for part in propertyDict.keys():
- x = partition.getElementsByTagName(part)
- if x:
- x[0].childNodes[0].nodeValue = propertyDict[part]
- return inputDom
- return False
-
-
-def getSortedServerPartitionConfigProperty(inputDom):
- groupDict = {}
- if not inputDom:
- return None
- groupDom = XDOM()
- for group in inputDom.getElementsByTagRoute("topology.group"):
- groupDom.setDomObj(group)
- groupOrder = groupDom.getTextByTagRoute("order")
- if not groupOrder:
- return None
- groupOrder = int(groupOrder)
- if groupOrder < 1:
- return None
- partitionDom = XDOM()
- partitionDict = {}
- for partition in group.getElementsByTagName("partition"):
- partitionDom.setDomObj(partition)
- partitionName = partitionDom.getTextByTagRoute("name")
- if not partitionName:
- return None
- partitionOrder = partitionDom.getTextByTagRoute("order")
- if not partitionOrder:
- return None
- partitionUuid = partitionDom.getTextByTagRoute("uuid")
- partitionOrder = int(partitionOrder)
- if partitionOrder < 1:
- return None
- partitionDetails = partitionName.split(":")
- if not partitionDetails or len(partitionDetails) < 1:
- return None
- partitionDict[partitionOrder] = { "order":partitionOrder,
- "servername":partitionDetails[0],
- "name":partitionDetails[1],
- "uuid":partitionUuid}
- groupDict[groupOrder] = partitionDict
-
- serverList = []
- groupOrderList = groupDict.keys()
- groupOrderList.sort()
- for groupOrder in groupOrderList:
- partitionOrderList = groupDict[groupOrder].keys()
- partitionOrderList.sort()
- for partitionOrder in partitionOrderList:
- serverList.append(groupDict[groupOrder][partitionOrder])
-
- return serverList
-
-
-def getSortedServerPartitionList(serverGroupElements):
- serverPartitionDict = {}
- groupOrderList = []
- serverList = []
- partitionDom = XDOM()
- for group in serverGroupElements:
- if not group:
- continue
- groupOrderE = group.getElementsByTagName("order")
- if not (groupOrderE and groupOrderE[0].childNodes):
- return None
- value = int(XDOM.getText(groupOrderE[0].childNodes))
- if value > 0:
- groupOrderList.append(value)
- partitionDict = {}
- for partition in group.getElementsByTagName("partition"):
- partitionDom.setDomObj(partition)
-
- partitionName = partitionDom.getTextByTagRoute("name")
- if not partitionName:
- return None
- partitionOrder = partitionDom.getTextByTagRoute("order")
- if not partitionOrder:
- return None
- partitionUuid = partitionDom.getTextByTagRoute("uuid")
- partitionDict[int(partitionOrder)] = [partitionName, partitionUuid]
- serverPartitionDict[value] = partitionDict
- groupOrderList.sort()
-
- for groupOrder in groupOrderList:
- items = serverPartitionDict[groupOrder].items()
- items.sort(key = itemgetter(0))
- serverList = serverList + [ items[i][1] for i in range(0,len(items))]
- return serverList
-
-
-def clearExportDirectory(serverList, volumeName, volumeUuid):
- thisServerName = getCurrentServerName()
- for exportServer in serverList:
- serverName, partition = exportServer[0].split(":")
- if thisServerName != serverName:
- continue
- partitionUuid = getUuidByDiskPartition(getDevice(partition))
- if not partitionUuid:
- log("unable to find uuid of partition %s" % partition)
- return False
- volumeDirName = "%s/%s/%s" % (Globals.GLUSTER_LUN_DIR, partitionUuid, volumeUuid)
- if os.path.exists(volumeDirName):
- ## Removing /data/PARTITION-UUID/VOLUME-UUID/
- ## TODO: Get an option to remove it at this time
- if runCommandFG("mv -f %s %s.delete" % (volumeDirName, volumeDirName), root=True) != 0:
- return False
- if runCommandFG("rm -f %s/%s/volumes/%s" % (Globals.GLUSTER_LUN_DIR, partitionUuid, volumeName), root=True) != 0:
- return False
- return True
-
-
-def createExportDirectory(serverList, volumeName, volumeUuid):
- thisServerName = getCurrentServerName()
- tempVolumeNameFile = getTempFileName()
-
- try:
- fp = open(tempVolumeNameFile, "w")
- fp.write("VOLUME_NAME=%s\n" % volumeName)
- fp.write("VOLUME_UUID=%s\n" % volumeUuid)
- fp.close()
- except IOError, e:
- log("failed to create temporary file for volume-name: %s" % (volumeName, str(e)))
- return False
-
- for exportServer in serverList:
- serverName, partition = exportServer[0].split(":")
- if thisServerName != serverName:
- continue
- partitionUuid = getUuidByDiskPartition(getDevice(partition))
- if not partitionUuid:
- log("unable to find uuid of partition %s" % partition)
- return False
-
- volumeDirName = "%s/%s/%s" % (Globals.GLUSTER_LUN_DIR, partitionUuid, volumeUuid)
- ## Creating /data/PARTITION-UUID/VOLUME-UUID/
- if runCommandFG("mkdir %s" % volumeDirName, root=True) != 0:
- return False
-
- ## Creating /data/PARTITION-UUID/VOLUME-UUID/exports/
- ## Creating /data/PARTITION-UUID/VOLUME-UUID/exports/brick1/
- if runCommandFG("mkdir -p %s/exports/brick1" % volumeDirName, root=True) != 0:
- return False
-
- ## Creating /data/PARTITION-UUID/VOLUME-UUID/log/
- if runCommandFG("mkdir %s/log" % volumeDirName, root=True) != 0:
- return False
-
- ## Creating /data/PARTITION-UUID/VOLUME-UUID/config/
- if runCommandFG("mkdir %s/config" % volumeDirName, root=True) != 0:
- return False
-
- volumeLinkDirName = "%s/%s/volumes" % (Globals.GLUSTER_LUN_DIR, partitionUuid)
- if not os.path.exists(volumeLinkDirName):
- if runCommandFG("mkdir %s" % volumeLinkDirName, root=True) != 0:
- return False
-
- ## Creating symlink
- ## /data/PARTITION-UUID/volumes/VOLUME-NAME -> /data/PARTITION-UUID/VOLUME-UUID/
- command = "ln -fTs %s %s/%s" % (volumeDirName,
- volumeLinkDirName, volumeName)
- if runCommandFG(command, root=True) != 0:
- return False
-
- if runCommandFG("cp -f %s %s/config/volume-name" % (tempVolumeNameFile, volumeDirName), root=True) != 0:
- return False
-
- try:
- os.remove(tempVolumeNameFile)
- except OSError, e:
- log("Failed to remove file %s: %s" % (tempVolumeNameFile, str(e)))
-
- return True
-
-
-def getPartitionListByServerName(volumeDom, serverName, serverPartitionList=None):
- partitionList = {}
- if serverPartitionList:
- for partitionName in serverPartitionList:
- partitionUuid = getServerDiskPartitionUuid(serverName, partitionName)
- if not partitionUuid:
- log(syslog.LOG_ERR, "failed to get disk partition %s uuid of server %s" % (partitionName, serverName))
- return None
- partitionList[partitionName] = partitionUuid
- return partitionList
- for group in volumeDom.getElementsByTagRoute("topology.group"):
- for partitionTag in group.getElementsByTagName("partition"):
- nameE = partitionTag.getElementsByTagName("name")
- if not nameE:
- continue
- partition = XDOM.getText(nameE[0].childNodes)
- if not partition:
- continue
- server, partitionName = partition.split(":")
- if server != serverName:
- continue
- partitionUuid = getServerDiskPartitionUuid(serverName, partitionName)
- if not partitionUuid:
- log(syslog.LOG_ERR, "failed to get disk partition %s uuid of server %s" % (partitionName, serverName))
- return None
- partitionList[partitionName] = partitionUuid
- return partitionList
-
-
-def isVolumeRunning(volumeName):
- return Glusterd.isVolumeRunning(volumeName)
-
-def addVolumeMigrationDetails(sourcePartition, destinationPartition, volumeName):
- migrationDom = XDOM()
- if not os.path.exists(Globals.VOLUME_MIGRATION_LIST_FILE):
- migrationDom.appendTagRoute("volume-migration")
- else:
- if not migrationDom.parseFile(Globals.VOLUME_MIGRATION_LIST_FILE):
- log("Failed to load volume-migration.xml file")
- return None
- migrationList = migrationDom.getElementsByTagRoute("volume-migration.migration")
- for tagE in migrationList:
- dom = XDOM()
- dom.setDomObj(tagE)
- if dom.getTextByTagRoute("source-partition") == sourcePartition and \
- dom.getTextByTagRoute("destination-partition") == destinationPartition and \
- dom.getTextByTagRoute("volume-name") == volumeName:
- return False
- migrationTag = migrationDom.getElementsByTagRoute("volume-migration")
- if not migrationTag:
- return None
- partitionTag = migrationDom.createTag("migration")
- partitionTag.appendChild(migrationDom.createTag("source-partition", sourcePartition))
- partitionTag.appendChild(migrationDom.createTag("destination-partition", destinationPartition))
- partitionTag.appendChild(migrationDom.createTag("volume-name", volumeName))
- migrationTag[0].appendChild(partitionTag)
- if not migrationDom.writexml(Globals.VOLUME_MIGRATION_LIST_FILE):
- log("Unable to write disk migration details into %s/volume-migration.xml" % Globals.GLUSTER_BASE_DIR)
- return False
- return True
-
-
-def removeVolumeMigrationDetails(sourcePartition, destinationPartition, volumeName):
- migrationDom = XDOM()
- if not os.path.exists(Globals.VOLUME_MIGRATION_LIST_FILE):
- return None
- if not migrationDom.parseFile(Globals.VOLUME_MIGRATION_LIST_FILE):
- log("Failed to load volume-migration.xml file")
- return None
- migrationList = migrationDom.getElementsByTagRoute("volume-migration.migration")
- for tagE in migrationList:
- dom = XDOM()
- dom.setDomObj(tagE)
- if dom.getTextByTagRoute("source-partition") == sourcePartition and \
- dom.getTextByTagRoute("destination-partition") == destinationPartition and \
- dom.getTextByTagRoute("volume-name") == volumeName:
- migrationDom.getElementsByTagRoute("volume-migration")[0].removeChild(tagE)
- if not migrationDom.writexml(Globals.VOLUME_MIGRATION_LIST_FILE):
- log("Unable to write disk migration details into %s/volume-migration.xml" % Globals.GLUSTER_BASE_DIR)
- return False
- return True
-
-
-def addPartitionMigrationDetails(sourcePartition, destinationPartition, volumeList=None):
- migrationDom = XDOM()
- if not os.path.exists(Globals.MIGRATE_PARTITION_LIST_FILE):
- migrationDom.appendTagRoute("partition-migration")
- else:
- if not migrationDom.parseFile(Globals.MIGRATE_PARTITION_LIST_FILE):
- log("Failed to load migration.xml file")
- return None
- migrationList = migrationDom.getElementsByTagRoute("partition-migration.migration")
- for tagE in migrationList:
- dom = XDOM()
- dom.setDomObj(tagE)
- if dom.getTextByTagRoute("source-partition") == sourcePartition:
- return False
- if dom.getTextByTagRoute("destination-partition") == destinationPartition:
- return False
- migrationTag = migrationDom.getElementsByTagRoute("partition-migration")
- if not migrationTag:
- return None
- partitionTag = migrationDom.createTag("migration")
- partitionTag.appendChild(migrationDom.createTag("source-partition", sourcePartition))
- partitionTag.appendChild(migrationDom.createTag("destination-partition", destinationPartition))
- migrationTag[0].appendChild(partitionTag)
- if not migrationDom.writexml(Globals.MIGRATE_PARTITION_LIST_FILE):
- log("Unable to write disk migration details into %s/migration.xml" % Globals.GLUSTER_BASE_DIR)
- return False
- if volumeList:
- for volumeName in volumeList:
- addVolumeMigrationDetails(sourcePartition, destinationPartition, volumeName)
- return True
-
-
-def removePartitionMigrationDetails(sourcePartition, destinationPartition, volumeList=None):
- migrationDom = XDOM()
- if not os.path.exists(Globals.MIGRATE_PARTITION_LIST_FILE):
- return None
- if not migrationDom.parseFile(Globals.MIGRATE_PARTITION_LIST_FILE):
- log("Failed to load migration.xml file")
- return None
- migrationList = migrationDom.getElementsByTagRoute("partition-migration.migration")
- for tagE in migrationList:
- dom = XDOM()
- dom.setDomObj(tagE)
- if dom.getTextByTagRoute("source-partition") == sourcePartition and \
- dom.getTextByTagRoute("destination-partition") == destinationPartition:
- migrationDom.getElementsByTagRoute("partition-migration")[0].removeChild(tagE)
- if not migrationDom.writexml(Globals.MIGRATE_PARTITION_LIST_FILE):
- log("Unable to write disk migration details into %s/migration.xml" % Globals.GLUSTER_BASE_DIR)
- return False
- if volumeList:
- for volumeName in volumeList:
- removeVolumeMigrationDetails(sourcePartition, destinationPartition, volumeName)
- return True
-
-
-def isMigrationInProgress(partition):
- migrationDom = XDOM()
- if not os.path.exists(Globals.MIGRATE_PARTITION_LIST_FILE):
- return None
- if not migrationDom.parseFile(Globals.MIGRATE_PARTITION_LIST_FILE):
- log("Failed to load migration.xml file")
- return None
- migrationList = migrationDom.getElementsByTagRoute("partition-migration.migration")
- for tagE in migrationList:
- dom = XDOM()
- dom.setDomObj(tagE)
- if migrationDom.getTextByTagRoute("source-partition") == partition or \
- migrationDom.getTextByTagRoute("destination-partition") == partition:
- return True
- return False
-
-
-def getServerDiskPartitionUuid(serverName, partition):
- diskConfigDom = XDOM()
- if not diskConfigDom.parseFile("%s/%s/disk.xml" % (Globals.SERVER_CONF_DIR, serverName)):
- return None
- for disk in diskConfigDom.getElementsByTagRoute("disks.disk"):
- diskDom = XDOM()
- diskDom.setDomObj(disk)
- partitionList = diskDom.getElementsByTagRoute("partition")
- for tagE in partitionList:
- partitionDom = XDOM()
- partitionDom.setDomObj(tagE)
- if partitionDom.getTextByTagRoute("device") == partition:
- return partitionDom.getTextByTagRoute("uuid")
-
-
-def getVolumeServerList(requestDom, requestFlag=True):
- if requestFlag:
- serverGroupElementList = requestDom.getElementsByTagRoute("command.volume.topology.group")
- else:
- serverGroupElementList = requestDom.getElementsByTagRoute("volume.topology.group")
- if not serverGroupElementList:
- return None
- serverList = []
- partitionDom = XDOM()
- for group in serverGroupElementList:
- for partition in group.getElementsByTagName("partition"):
- partitionDom.setDomObj(partition)
- partitionName = partitionDom.getTextByTagRoute("name")
- if not partitionName:
- continue
- serverPartition = partitionName.split(":")
- if not(len(serverPartition) > 1 and serverPartition[1]):
- return None
- if serverPartition[0] not in serverList:
- serverList.append(serverPartition[0])
- return serverList
-
-
-def getVolumeServerListByName(volumeName):
- serverList = []
- serverDom = XDOM()
- volumeDom = XDOM()
- if not os.path.exists("%s/%s.xml" % (Globals.VOLUME_CONF_DIR, volumeName)):
- return False
- if not volumeDom.parseFile("%s/%s.xml" % (Globals.VOLUME_CONF_DIR, volumeName)):
- return False
- return getVolumeServerList(volumeDom, False)
-
-
-def getMigrateVolumeServerPartitionInfo(volumeName):
- volumeMigrationDom = XDOM()
- if not volumeMigrationDom.parseFile(Globals.VOLUME_MIGRATION_LIST_FILE):
- Utils.log("Failed to parse file %s" % Globals.VOLUME_MIGRATION_LIST_FILE)
- return None
- volumeInfo = {}
- dom = XDOM()
- for tagE in volumeMigrationDom.getElementsByTagRoute("volume-migration.migration"):
- dom.setDomObj(tagE)
- if dom.getTextByTagRoute("volume-name") == volumeName:
- volumeInfo['Name'] = volumeName
- volumeInfo['SourcePartition'] = dom.getTextByTagRoute("source-partition")
- volumeInfo['DestinationPartition'] = dom.getTextByTagRoute("destination-partition")
- return volumeInfo
- return None
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/XmlHandler.py b/src/com.gluster.storage.management.gateway.scripts/src/XmlHandler.py
deleted file mode 100644
index 72164ffb..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/XmlHandler.py
+++ /dev/null
@@ -1,346 +0,0 @@
-# Copyright (C) 2009 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-# Gluster Storage Platform is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 3 of
-# the License, or (at your option) any later version.
-#
-# Gluster Storage Platform 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 General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/>.
-
-import xml
-import xml.parsers.expat
-import xml.dom.minidom as MDOM
-import os
-import Globals
-import copy
-import Utils
-
-XML_STRING = 0
-XML_FILE = 1
-
-class XDOM:
- _domObj = None
-
- def __init__(self):
- self._domObj = MDOM.Document()
- return
-
- @classmethod
- def getText(self, nodeList):
- rc = ""
- for node in nodeList:
- if node.nodeType == node.TEXT_NODE:
- rc = rc + node.data
- return rc
-
- def parseString(self, requestString):
- try:
- self._domObj = MDOM.parseString(requestString)
- except xml.parsers.expat.ExpatError, e:
- Utils.log("XML string parse error: %s" % str(e))
- return False
- return True
-
- def parseFile(self, fileName):
- try:
- self._domObj = MDOM.parse(fileName)
- except IOError, e:
- Utils.log("error reading file: %s" % str(e))
- return False
- except xml.parsers.expat.ExpatError, e:
- Utils.log("XML file %s parse error: %s" % (fileName, str(e)))
- return False
- return True
-
- def setDomObj(self, dom):
- if dom and type(dom) != type([]):
- self._domObj = dom
- return True
- return False
-
- def createTag(self, tag, text=None):
- if not self._domObj:
- return None
- if tag == None:
- return None
-
- tagE = self._domObj.createElement(str(tag))
- if text:
- tagEText = self._domObj.createTextNode(str(text))
- tagE.appendChild(tagEText)
- return tagE
-
- def addTag(self, tag):
- if not self._domObj:
- return False
- if not tag:
- return False
-
- self._domObj.appendChild(tag)
- return True
-
- def createTagRoute(self, tagRoute, text=None):
- if not tagRoute:
- return False
-
- tagList = tagRoute.split(".")
- tag = None
- previousTag = None
- for tagName in tagList[:-1]:
- newTag = self.createTag(tagName, None)
- if not tag:
- tag = newTag
- previousTag = newTag
- continue
- previousTag.appendChild(newTag)
- previousTag = newTag
-
- if previousTag:
- previousTag.appendChild(self.createTag(tagList[-1], text))
- else:
- tag = self.createTag(tagList[-1], text)
- return tag
-
- def appendTagRoute(self, tagRoute, value=None):
- if not self._domObj:
- return False
- if not tagRoute:
- return False
-
- parentTagE = self._domObj
-
- tagNameList = tagRoute.split(".")
- newTagRoute = tagNameList.pop(-1)
-
- for i in range(len(tagNameList), 0, -1):
- tagE = self.getElementsByTagRoute(".".join(tagNameList[:i]))
- if tagE:
- parentTagE = tagE[0]
- break
- newTagRoute = tagNameList[i-1] + "." + newTagRoute
-
- newTagE = self.createTagRoute(newTagRoute, value)
- if not newTagE:
- return False
- try:
- parentTagE.appendChild(newTagE)
- except xml.dom.HierarchyRequestErr, e:
- Utils.log("error occured. %s" + str(e))
- return False
- return True
-
- def setTextByTagRoute(self, tagRoute, tagValue):
- if not self._domObj:
- return None
-
- if not tagRoute:
- return None
-
- tagE = self.getElementsByTagRoute(tagRoute)
- if not tagE:
- return False
-
- parentTagE = self.getElementsByTagRoute(".".join(tagRoute.split(".")[:-1]))
- if not parentTagE:
- return False
-
- parentTagE[0].childNodes.remove(tagE[0])
- parentTagE[0].appendChild(self.createTag(tagRoute.split(".")[-1], tagValue))
- return True
-
- def getElementsByTagRoute(self, tagRoute):
- if not self._domObj:
- return None
-
- if not tagRoute:
- return None
-
- x = None
- for tag in tagRoute.split("."):
- if x is None:
- x = self._domObj.getElementsByTagName(tag)
- continue
- if x == []:
- break
- x = x[0].getElementsByTagName(tag)
- return x
-
- def getTextByTagRoute(self, tagRoute):
- if not self._domObj:
- return None
-
- x = self.getElementsByTagRoute(tagRoute)
- if x:
- return self.getText(x[0].childNodes)
- return None
-
- def getElementsByTagName(self, name):
- if not self._domObj:
- return None
- return self._domObj.getElementsByTagName(name)
-
- def writexml(self, fileName, indent="", addindent="", newl=""):
- if not self._domObj:
- return None
- try:
- fp = open(fileName, "w")
- self._domObj.writexml(fp, indent, addindent, newl)
- fp.close()
- return True
- except IOError:
- return False
-
- def toString(self, indent=" ", newl="\n", encoding = None):
- if not self._domObj:
- return None
- return self._domObj.toprettyxml(indent, newl, encoding)
-
- def toxml(self, encoding = None):
- if not self._domObj:
- return None
- return self._domObj.toxml(encoding)
-
- def toprettyxml(self, indent=" ", newl="\n", encoding = None):
- return self.toString(indent, newl, encoding)
-
- def createResponseTag(self):
- responseTag = self._domObj.createElement("response")
- return responseTag
-##--end of XDOM
-
-class RequestXml(XDOM):
- def __init__(self, requestString, type=None):
- if None == requestString:
- XDOM.__init__(self)
- return
- try:
- if None == type:
- if os.path.isfile(requestString):
- self._domObj = MDOM.parse(requestString)
- else:
- self._domObj = MDOM.parseString(requestString)
- elif XML_FILE == type:
- self._domObj = MDOM.parse(requestString)
- elif XML_STRING == type:
- self._domObj = MDOM.parseString(requestString)
- except IOError:
- XDOM.__init__(self)
- except xml.parsers.expat.ExpatError:
- XDOM.__init__(self)
-
-##--end of RequestXML
-
-
-class ResponseXml(XDOM):
- _responseTag = None
- def __init__(self):
- XDOM.__init__(self)
- self._responseTag = self.createResponseTag()
- self._domObj.appendChild(self._responseTag)
-
- @classmethod
- def errorResponse(self, message):
- if not self.responseTag:
- return False
- self.appendTagRoute("status.code", "-1");
- self.appendTagRoute("status.message", message)
-
- def append(self, tagName, tagValue=None):
- if not self._responseTag:
- return False
- tag = self.createTag(tagName, tagValue)
- if tag:
- self._responseTag.appendChild(tag)
- return True
- return False
-
- def appendTag(self, tag):
- if not tag:
- return False
- if not self._responseTag:
- return False
- self._responseTag.appendChild(tag)
- return True
-
- def appendTagRoute(self, tagRoute, value=None):
- if not self._responseTag:
- return None
- if not tagRoute:
- return None
-
- parentTagE = self._responseTag
-
- tagNameList = tagRoute.split(".")
- newTagRoute = tagNameList.pop(-1)
-
- for i in range(len(tagNameList), 0, -1):
- tagE = self.getElementsByTagRoute(".".join(["response"] + tagNameList[:i]))
- if tagE:
- parentTagE = tagE[0]
- break
- newTagRoute = tagNameList[i-1] + "." + newTagRoute
-
- newTagE = self.createTagRoute(newTagRoute, value)
- if not newTagE:
- return None
- try:
- parentTagE.appendChild(newTagE)
- except xml.dom.HierarchyRequestErr, e:
- Utils.log("error occured. %s" + str(e))
- return None
- return newTagE
-
- def appendTagRouteOld(self, tagRoute, value=None):
- if not self._responseTag:
- return False
- if not tagRoute:
- return False
-
- parentTagE = self._responseTag
-
- tagNameList = tagRoute.split(".")
- newTagRoute = tagNameList.pop(-1)
-
- for i in range(len(tagNameList), 0, -1):
- tagE = self.getElementsByTagRoute(".".join(["response"] + tagNameList[:i]))
- if tagE:
- parentTagE = tagE[0]
- break
- newTagRoute = tagNameList[i-1] + "." + newTagRoute
-
- newTagE = self.createTagRoute(newTagRoute, value)
- if not newTagE:
- return False
- try:
- parentTagE.appendChild(newTagE)
- except xml.dom.HierarchyRequestErr, e:
- Utils.log("error occured. %s" + str(e))
- return False
- return True
-##--end of ResponseXml
-
-def test():
- rs = ResponseXml()
- rs.appendTagRoute("status.code", "0");
- rs.appendTagRoute("status.message", "SUCCESS")
- serverTag = rs.appendTagRoute("server.name", "Server1")
- networkInterfaces = rs.appendTagRoute("server.networkInterfaces", None)
- networkTag = rs.createTag("networkInterface", None)
- networkTag.appendChild(rs.createTag("name", "interface1"))
- networkTag.appendChild(rs.createTag("ipaddress", "192.168.1.40"))
- networkInterfaces.appendChild(networkTag)
- networkTag = rs.createTag("networkInterface", None)
- networkTag.appendChild(rs.createTag("name", "interface2"))
- networkTag.appendChild(rs.createTag("ipaddress", "192.168.1.41"))
- networkInterfaces.appendChild(networkTag)
- print rs.toprettyxml()
-
-#test()
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/add_user_cifs.py b/src/com.gluster.storage.management.gateway.scripts/src/add_user_cifs.py
deleted file mode 100755
index 7b9650d1..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/add_user_cifs.py
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/usr/bin/python
-# Copyright (C) 2011 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Management Gateway.
-#
-
-import os
-import sys
-import Globals
-import Utils
-
-def main():
- if len(sys.argv) < 4:
- sys.stderr.write("usage: %s UID USERNAME PASSWORD\n" % os.path.basename(sys.argv[0]))
- sys.exit(-1)
-
- uid = sys.argv[1]
- userName = sys.argv[2]
- password = sys.argv[3]
-
- if Utils.runCommand("groupadd -g %s %s" % (uid, userName)) != 0:
- Utils.log("failed to add group gid:%s, name:%s\n" % (uid, userName))
- sys.exit(1)
-
- command = ["useradd", "-c", Globals.VOLUME_USER_DESCRIPTION, "-M", "-d", "/", "-s", "/sbin/nologin", "-u", uid, "-g", uid, userName]
- if Utils.runCommand(command) != 0:
- Utils.log("failed to add user uid:%s, name:%s\n" % (uid, userName))
- sys.exit(2)
-
- if Utils.runCommand("smbpasswd -s -a %s" % userName,
- input="%s\n%s\n" % (password, password)) != 0:
- Utils.log("failed to set smbpassword of user uid:%s, name:%s\n" % (uid, userName))
- sys.exit(3)
- sys.exit(0)
-
-
-if __name__ == "__main__":
- main()
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/clear_volume_directory.py b/src/com.gluster.storage.management.gateway.scripts/src/clear_volume_directory.py
deleted file mode 100755
index 6b6d453e..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/clear_volume_directory.py
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/python
-# Copyright (C) 2011 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Management Gateway.
-#
-
-import os
-import sys
-import syslog
-import time
-from XmlHandler import ResponseXml
-import DiskUtils
-import Utils
-from optparse import OptionParser
-
-def main():
- parser = OptionParser()
- parser.add_option("-d", "--delete", dest="todelete", action="store_true", default=False, help="force delete")
- (options, args) = parser.parse_args()
-
- if len(args) != 1:
- sys.stderr.write("usage: %s VOLUME_PATH [-d/--delete]\n" % os.path.basename(sys.argv[0]))
- sys.exit(-1)
-
- volumeDirectory = args[0]
- if not os.path.exists(volumeDirectory):
- sys.stderr.write("Given volume directory path:%s does not exists" % volumeDirectory)
- sys.exit(1)
-
- newVolumeDirectoryName = "%s_%s" % (volumeDirectory, time.time())
- rv = Utils.runCommand("mv -f %s %s" % (volumeDirectory, newVolumeDirectoryName), output=True, root=True)
- if rv["Stderr"]:
- sys.stderr.write(Utils.stripEmptyLines(rv["Stderr"]))
- sys.exit(2)
-
- if not options.todelete:
- sys.exit(0)
-
- rv = Utils.runCommand("rm -fr %s" % newVolumeDirectoryName, output=True, root=True)
- if rv["Stderr"]:
- sys.stderr.write(Utils.stripEmptyLines(rv["Stderr"]))
- sys.exit(3)
-
- sys.exit(0)
-
-if __name__ == "__main__":
- main()
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/create_volume_cifs.py b/src/com.gluster.storage.management.gateway.scripts/src/create_volume_cifs.py
deleted file mode 100755
index a81b165b..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/create_volume_cifs.py
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/python
-# Copyright (C) 2011 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Management Gateway.
-#
-
-import os
-import sys
-import Globals
-import Utils
-import VolumeUtils
-
-def main():
- if len(sys.argv) < 3:
- sys.stderr.write("usage: %s VOLUME_NAME USER1 USER2 ...\n" % os.path.basename(sys.argv[0]))
- sys.exit(-1)
-
- volumeName = sys.argv[1]
- userList = sys.argv[2:]
-
- volumeMountDirName = "%s/%s" % (Globals.REEXPORT_DIR, volumeName)
- try:
- os.mkdir(volumeMountDirName)
- except OSError, e:
- Utils.log("failed creating %s: %s\n" % (volumeMountDirName, str(e)))
- sys.exit(1)
-
- if VolumeUtils.writeVolumeCifsConfiguration(volumeName, userList):
- sys.exit(0)
- sys.exit(2)
-
-
-if __name__ == "__main__":
- main()
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/create_volume_directory.py b/src/com.gluster.storage.management.gateway.scripts/src/create_volume_directory.py
deleted file mode 100755
index 3e633697..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/create_volume_directory.py
+++ /dev/null
@@ -1,82 +0,0 @@
-#!/usr/bin/python
-# Copyright (C) 2010 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-# Gluster Storage Platform is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 3 of
-# the License, or (at your option) any later version.
-#
-# Gluster Storage Platform 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 General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/>.
-import os
-import sys
-from XmlHandler import ResponseXml
-import DiskUtils
-import Utils
-
-def createDirectory(disk, volumeName):
- # Retrieving disk uuid
- diskUuid = DiskUtils.getUuidByDiskPartition(DiskUtils.getDevice(disk))
-
- rs = ResponseXml()
- if not diskUuid:
- Utils.log("failed to find disk:%s uuid" % disk)
- rs.appendTagRoute("status.code", "-1")
- rs.appendTagRoute("status.message", "Error: Unable to find disk uuid")
- return rs.toprettyxml()
-
- # Retrieving disk mount point using disk uuid
- diskMountPoint = DiskUtils.getMountPointByUuid(diskUuid)
- if not os.path.exists(diskMountPoint):
- Utils.log("failed to retrieve disk:%s mount point" % disk)
- rs.appendTagRoute("status.code", "-1")
- rs.appendTagRoute("status.message", "Error: Failed to retrieve disk details")
- return rs.toprettyxml()
-
- # creating volume directory under disk mount point
- volumeDirectory = "%s/%s" % (diskMountPoint, volumeName)
- if os.path.exists(volumeDirectory):
- Utils.log("Volume directory:%s already exists" % (volumeDirectory))
- rs.appendTagRoute("status.code", "-2")
- rs.appendTagRoute("status.message", "Volume directory already exists!")
- return rs.toprettyxml()
-
- if not os.path.exists(volumeDirectory):
- command = ["sudo", "mkdir", volumeDirectory]
- rv = Utils.runCommandFG(command, stdout=True, root=True)
- message = Utils.stripEmptyLines(rv["Stdout"])
- if rv["Stderr"]:
- error = Utils.stripEmptyLines(rv["Stderr"])
- message += "Error: [%s]" % (error)
- Utils.log("failed to create volume directory %s, %s" % (volumeDirectory, error))
- rs.appendTagRoute("status.code", rv["Status"])
- rs.appendTagRoute("status.message", message)
- return rs.toprettyxml()
-
- if not rv["Status"]:
- rv["Status"] = "0"
- if rv["Status"] == "0":
- message = volumeDirectory
- rs.appendTagRoute("status.code", rv["Status"])
- rs.appendTagRoute("status.message", message)
- return rs.toprettyxml()
-
-def main():
- if len(sys.argv) != 3:
- sys.stderr.write("usage: %s <disk name> <volume name>\n" % os.path.basename(sys.argv[0]))
- sys.exit(-1)
-
- disk = sys.argv[1]
- volumeName = sys.argv[2]
- print createDirectory(disk, volumeName)
- sys.exit(0)
-
-if __name__ == "__main__":
- main()
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/delete_user_cifs.py b/src/com.gluster.storage.management.gateway.scripts/src/delete_user_cifs.py
deleted file mode 100755
index e5cda957..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/delete_user_cifs.py
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/python
-# Copyright (C) 2011 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Management Gateway.
-#
-
-import os
-import sys
-import Utils
-
-def main():
- if len(sys.argv) < 2:
- sys.stderr.write("usage: %s USERNAME\n" % os.path.basename(sys.argv[0]))
- sys.exit(-1)
-
- userName = sys.argv[1]
-
- if Utils.runCommand("userdel %s" % userName) != 0:
- Utils.log("failed to remove user name:%s\n" % userName)
- sys.exit(1)
- sys.exit(0)
-
-
-if __name__ == "__main__":
- main()
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/delete_volume_cifs.py b/src/com.gluster.storage.management.gateway.scripts/src/delete_volume_cifs.py
deleted file mode 100755
index fd1febc9..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/delete_volume_cifs.py
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/python
-# Copyright (C) 2011 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Management Gateway.
-#
-
-import os
-import sys
-import Globals
-import Utils
-import VolumeUtils
-
-def main():
- if len(sys.argv) != 2:
- sys.stderr.write("usage: %s VOLUME_NAME\n" % os.path.basename(sys.argv[0]))
- sys.exit(-1)
-
- volumeName = sys.argv[1]
-
- volumeMountDirName = "%s/%s" % (Globals.REEXPORT_DIR, volumeName)
- try:
- os.rmdir(volumeMountDirName)
- except OSError, e:
- Utils.log("failed deleting %s: %s\n" % (volumeMountDirName, str(e)))
- sys.exit(1)
-
- if VolumeUtils.removeVolumeCifsConfiguration(volumeName):
- sys.exit(0)
- sys.exit(2)
-
-
-if __name__ == "__main__":
- main()
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/disable-ssh-password-auth.sh b/src/com.gluster.storage.management.gateway.scripts/src/disable-ssh-password-auth.sh
deleted file mode 100755
index 07ee1a3a..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/disable-ssh-password-auth.sh
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/bin/bash
-
-#-----------------------------------------------------------------------------
-# disable-ssh-password-auth.sh
-# Script for disabling SSH password authentication. This is used by the
-# management gateway after installing the public key, so that the gluster
-# node can be accessed (using ssh) only from the management gateway.
-#-----------------------------------------------------------------------------
-
-CONFIG_FILE="/etc/ssh/sshd_config"
-TIMESTAMP=`date +%d%m%Y%H%M%S`
-BACKUP_FILE="${CONFIG_FILE}_${TIMESTAMP}"
-TEMP_FILE="/tmp/new_sshd_config_${TIMESTAMP}"
-
-# Modify config file to disable password authentication, redirect to a temp file
-# TODO: disable only if enabled!
-sed "s/^PasswordAuthentication yes$/PasswordAuthentication no/g" ${CONFIG_FILE} > ${TEMP_FILE}
-
-# Secure the file by changing permissions (600)
-chmod 600 ${TEMP_FILE}
-
-# Take backup of config file
-cp ${CONFIG_FILE} ${BACKUP_FILE}
-
-# Overwrite config file with the modified one
-mv ${TEMP_FILE} ${CONFIG_FILE}
-
-# Re-start ssh daemon
-/etc/init.d/sshd restart
-
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/format_device.py b/src/com.gluster.storage.management.gateway.scripts/src/format_device.py
deleted file mode 100755
index 3bc70532..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/format_device.py
+++ /dev/null
@@ -1,87 +0,0 @@
-#!/usr/bin/python
-# Copyright (C) 2010 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-# Gluster Storage Platform is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 3 of
-# the License, or (at your option) any later version.
-#
-# Gluster Storage Platform 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 General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/>.
-
-import os
-import sys
-import Globals
-import Utils
-import DiskUtils
-from optparse import OptionParser
-
-
-def main():
- if Utils.runCommand("wget -q -O /dev/null %s" % Globals.AWS_WEB_SERVICE_URL) == 0:
- sys.stderr.write("format device unsupported")
- sys.exit(1)
-
- parser = OptionParser()
- parser.add_option("-t", "--type", action="store", type="string", dest="fstype")
- (options, args) = parser.parse_args()
-
- if len(args) != 1:
- sys.stderr.write("usage: %s [-t FSTYPE] DEVICE_NAME\n" % os.path.basename(sys.argv[0]))
- sys.exit(-1)
-
- device = DiskUtils.getDevice(args[0])
- deviceFormatLockFile = Utils.getDeviceFormatLockFile(device)
- deviceFormatStatusFile = Utils.getDeviceFormatStatusFile(device)
- deviceFormatOutputFile = Utils.getDeviceFormatOutputFile(device)
-
- if DiskUtils.isDataDiskPartitionFormatted(device):
- sys.stderr.write("Device already formatted\n")
- sys.exit(2)
-
- if os.path.exists(deviceFormatStatusFile):
- Utils.log("format status file %s exists" % deviceFormatStatusFile)
- try:
- fp = open(deviceFormatStatusFile)
- line = fp.read()
- fp.close()
- if line.strip().upper() == "COMPLETED":
- sys.stderr.write("Device already formatted\n")
- sys.exit(3)
- else:
- sys.stderr.write("Device format already running\n")
- sys.exit(4)
- except IOError, e:
- Utils.log("failed to read format status file %s: %s" % (deviceFormatStatusFile, str(e)))
- sys.stderr.write("%s\n" % str(e))
- sys.exit(-2)
-
- if os.path.exists(deviceFormatLockFile):
- Utils.log("lock file %s exists" % deviceFormatLockFile)
- sys.stderr.write("Device format already running\n")
- sys.exit(5)
-
- if options.fstype:
- command = ["gluster_provision_block_wrapper.py", "-t", "%s" % (options.fstype), "%s" % (device)]
- else:
- command = ["gluster_provision_block_wrapper.py", "%s" % (device)]
-
- try:
- pid = os.fork()
- except OSError, e:
- Utils.log("failed to fork a child process: %s" % str(e))
- sys.exit(6)
- if pid == 0:
- os.execv("/usr/sbin/gluster_provision_block_wrapper.py", command)
- sys.exit(0)
-
-
-if __name__ == "__main__":
- main()
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/get_brick_status.py b/src/com.gluster.storage.management.gateway.scripts/src/get_brick_status.py
deleted file mode 100755
index cf84080b..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/get_brick_status.py
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/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
-
-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("/", "-"))
-
- if not os.path.exists(pidFile):
- print "OFFLINE"
- else:
- try:
- fp = open(pidFile)
- pidString = fp.readline()
- fp.close()
- os.getpgid(int(pidString))
- print "ONLINE"
- except IOError, e:
- Utils.log("failed to open file %s: %s" % (pidFile, str(e)))
- print "UNKNOWN"
- except ValueError, e:
- Utils.log("invalid pid %s in file %s: %s" % (pidString, pidFile, str(e)))
- print "UNKNOWN"
- except OSError, e:
- #Utils.log("failed to get process detail of pid %s: %s" % (pidString, str(e)))
- print "OFFLINE"
- sys.exit(0)
-
-if __name__ == "__main__":
- main()
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/get_disk_mount_point.py b/src/com.gluster.storage.management.gateway.scripts/src/get_disk_mount_point.py
deleted file mode 100755
index 2f4a39c3..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/get_disk_mount_point.py
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/usr/bin/python
-# Copyright (C) 2010 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-# Gluster Storage Platform is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 3 of
-# the License, or (at your option) any later version.
-#
-# Gluster Storage Platform 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 General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/>.
-
-import os
-import Utils
-from DiskUtils import *
-from XmlHandler import ResponseXml
-
-
-def getmountpoint(path):
- if not path:
- Utils.log("Not a valid path:%s" % path)
- rs.appendTagRoute("status.code", "-1")
- rs.appendTagRoute("status.message", "Error: given path name is empty")
- return rs.toprettyxml()
-
- rs = ResponseXml()
- mountPoint = None
-
- for line in readFsTab():
- if path.startswith(line['MountPoint']):
- if not mountPoint:
- mountPoint = line['MountPoint']
- if len(line['MountPoint']) > len(mountPoint):
- mountPoint = line['MountPoint']
-
- if "/" == mountPoint or not mountPoint:
- Utils.log("failed to find mount point of the given path:%s" % path)
- rs.appendTagRoute("status.code", "-1")
- rs.appendTagRoute("status.message", "Error: Unable to find disk mount point")
- return rs.toprettyxml()
-
- rs.appendTagRoute("status.code", "0")
- rs.appendTagRoute("status.message", mountPoint)
- return rs.toprettyxml()
-
-def main():
- if len(sys.argv) != 2:
- sys.stderr.write("usage: %s <path>\n" % os.path.basename(sys.argv[0]))
- sys.exit(-1)
-
- path = sys.argv[1]
- print getmountpoint(path)
- sys.exit(0)
-
-if __name__ == "__main__":
- main()
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/get_disk_name_by_path.py b/src/com.gluster.storage.management.gateway.scripts/src/get_disk_name_by_path.py
deleted file mode 100755
index 08e80b7e..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/get_disk_name_by_path.py
+++ /dev/null
@@ -1,68 +0,0 @@
-#!/usr/bin/python
-# Copyright (C) 2010 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-# Gluster Storage Platform is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 3 of
-# the License, or (at your option) any later version.
-#
-# Gluster Storage Platform 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 General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/>.
-
-import os
-import Utils
-from DiskUtils import *
-from XmlHandler import ResponseXml
-
-
-def getmountpoint(path):
- if not path:
- Utils.log("Not a valid path:%s" % path)
- rs.appendTagRoute("status.code", "-1")
- rs.appendTagRoute("status.message", "Error: given path name is empty")
- return rs.toprettyxml()
-
- rs = ResponseXml()
- mountPoint = None
- fsTabEntry = None
- for line in readFsTab():
- if path.startswith(line['MountPoint']):
- if not mountPoint:
- mountPoint = line['MountPoint']
- fsTabEntry = line
- if len(line['MountPoint']) > len(mountPoint):
- mountPoint = line['MountPoint']
- fsTabEntry = line
-
- if "/" == mountPoint or not mountPoint:
- Utils.log("failed to find mount point of the given path:%s" % path)
- rs.appendTagRoute("status.code", "-1")
- rs.appendTagRoute("status.message", "Error: Unable to find disk mount point")
- return rs.toprettyxml()
-
- rs.appendTagRoute("status.code", "0")
- if fsTabEntry["Device"].startswith("UUID="):
- rs.appendTagRoute("status.message", getDiskPartitionByUuid(fsTabEntry["Device"].split("UUID=")[-1]))
- else:
- rs.appendTagRoute("status.message", "Unable to find disk name")
- return rs.toprettyxml()
-
-def main():
- if len(sys.argv) != 2:
- sys.stderr.write("usage: %s <path>\n" % os.path.basename(sys.argv[0]))
- sys.exit(-1)
-
- path = sys.argv[1]
- print getmountpoint(path)
- sys.exit(0)
-
-if __name__ == "__main__":
- main()
-
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/get_file.py b/src/com.gluster.storage.management.gateway.scripts/src/get_file.py
deleted file mode 100755
index 61c33eba..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/get_file.py
+++ /dev/null
@@ -1,130 +0,0 @@
-# Copyright (C) 2009,2010 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-# Gluster Storage Platform is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 3 of
-# the License, or (at your option) any later version.
-#
-# Gluster Storage Platform 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 General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/>.
-
-import Globals
-import Utils
-from VolumeUtils import *
-from XmlHandler import ResponseXml
-
-
-def enumLogType(logCode):
- if "M" == logCode.upper():
- return "EMERGENCY"
- elif "A" == logCode.upper():
- return "ALERT"
- elif "C" == logCode.upper():
- return "CRITICAL"
- elif "E" == logCode.upper():
- return "ERROR"
- elif "W" == logCode.upper():
- return "WARNING"
- elif "N" == logCode.upper():
- return "NOTICE"
- elif "I" == logCode.upper():
- return "INFO"
- elif "D" == logCode.upper():
- return "DEBUG"
- elif "T" == logCode.upper():
- return "TRACE"
- else:
- return "UNKNOWN"
-##--end of enumLogType()
-
-
-def addLog(responseDom, logMessageTag, loginfo):
- logTag = responseDom.createTag("log", None)
- logTag.appendChild(responseDom.createTag("date", loginfo[0]))
- logTag.appendChild(responseDom.createTag("time", loginfo[1]))
- logTag.appendChild(responseDom.createTag("type", enumLogType(loginfo[2])))
- logTag.appendChild(responseDom.createTag("message", loginfo[3]))
- logMessageTag.appendChild(logTag)
- return True
-##--end of addLog()
-
-
-def logSplit(log):
- loginfo = log.strip().split(None, 3)
- loginfo[0] = loginfo[0][1:] #-- Remove '['
- loginfo[1] = loginfo[1][0:-1] #-- Remove ']'
- return loginfo
-##--end of logSplit()
-
-
-def getVolumeLog(volumeName, tailCount):
- rs = ResponseXml()
- if not volumeName:
- rs.appendTagRoute("status.code", "-1")
- rs.appendTagRoute("status.message", "No volume name given")
- return rs.toprettyxml()
-
- if not tailCount:
- rs.appendTagRoute("status.code", "-1")
- rs.appendTagRoute("status.message", "No tail count given")
- return rs.toprettyxml()
-
- thisServerName = getCurrentServerName()
- if not thisServerName:
- rs.appendTagRoute("status.code", "-2")
- rs.appendTagRoute("status.message", "Failed to get current server name")
- return rs.toprettyxml()
-
- volumeDom = XDOM()
- partitionList = getPartitionListByServerName(volumeDom, thisServerName)
- if not partitionList:
- rs.appendTagRoute("status.code", "-3")
- rs.appendTagRoute("status.message", "Failed to get server partition details")
- return rs.toprettyxml()
-
- pattern = '\[\d{4}-\d{2}-\d{2}\s{1}\d{2}:\d{2}:\d{2}.\d+\]\s{1}([MACEWNIDT]){1}\s+'
- logMessagesTag = rs.createTag("response.logMessages")
- for partitionName in partitionList:
- logMessageTag = rs.createTag("logMessage")
- logMessageTag.appendChild("disk", "%s:%s" % (thisServerName, partitionName))
-
- logDirectory = "%s/%s/%s/log" % (Globals.GLUSTER_LUN_DIR, partitionList[partitionName], volumeUuid)
- logFileName = "%s/%s-%s-%s-exports-brick1.log" % (logDirectory,
- Globals.GLUSTER_LUN_DIR[1:],
- partitionList[partitionName],
- volumeUuid)
- if not os.path.exists(logFileName):
- Utils.log("volume log file not found %s" % logFileName)
- continue
- fp = open(logFileName)
- lines = [line for line in fp if re.match(pattern, line)]
- fp.close()
- i = len(lines) - int(tailCount)
- if i < 0:
- i = 0
- for log in lines[i:]:
- loginfo = logSplit(log)
- addLog(rs, logMessageTag, loginfo)
- logMessagesTag.appendChild(logMessageTag)
- return rs.toprettyxml()
-##--end of getVolumeLog()
-
-def main():
- if len(sys.argv) != 3:
- print >> sys.stderr, "usage: %s <disk name> <volume name>" % sys.argv[0]
- sys.exit(-1)
-
- volumeName = sys.argv[1]
- tailCount = sys.argv[2]
- print getVolumeLog(volumeName, tailCount)
- sys.exit(0)
-
-if __name__ == "__main__":
- main()
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/get_rrd_cpu_details.py b/src/com.gluster.storage.management.gateway.scripts/src/get_rrd_cpu_details.py
deleted file mode 100755
index 546aec31..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/get_rrd_cpu_details.py
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/usr/bin/python
-# Copyright (C) 2010 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-# Gluster Storage Platform is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 3 of
-# the License, or (at your option) any later version.
-#
-# Gluster Storage Platform 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 General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/>.
-import os
-import sys
-from XmlHandler import ResponseXml
-import Utils
-
-def getCpuData(period):
- cpuRrdFile = "/var/lib/rrd/cpu.rrd"
- rs = ResponseXml()
- command = "rrdtool xport --start -%s \
- DEF:cpuuser=%s:user:AVERAGE \
- DEF:cpusystem=%s:system:AVERAGE \
- CDEF:total=cpuuser,cpusystem,+ \
- XPORT:cpuuser:user \
- XPORT:cpusystem:system \
- XPORT:total:total" % (period, cpuRrdFile, cpuRrdFile)
-
- rv = Utils.runCommand(command, output=True, root=True)
- message = Utils.stripEmptyLines(rv["Stdout"])
- if rv["Stderr"]:
- error = Utils.stripEmptyLines(rv["Stderr"])
- message += "Error: [%s]" % (error)
- Utils.log("failed to create RRD file for cpu usages %s" % file)
- rs.appendTagRoute("status.code", rv["Status"])
- rs.appendTagRoute("status.message", message)
- return rs.toxml()
- return rv["Stdout"]
-
-def main():
- if len(sys.argv) != 2:
- sys.stderr.write("usage: %s <period>\n" % os.path.basename(sys.argv[0]))
- sys.exit(-1)
-
- period = sys.argv[1]
- print getCpuData(period)
- sys.exit(0)
-
-if __name__ == "__main__":
- main()
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/get_rrd_memory_details.py b/src/com.gluster.storage.management.gateway.scripts/src/get_rrd_memory_details.py
deleted file mode 100755
index f7c3031b..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/get_rrd_memory_details.py
+++ /dev/null
@@ -1,89 +0,0 @@
-#!/usr/bin/python
-# Copyright (C) 2010 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-# Gluster Storage Platform is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 3 of
-# the License, or (at your option) any later version.
-#
-# Gluster Storage Platform 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 General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/>.
-
-# Input command: get_rrd_memory_details.py 1hour
-# OUTPUT as bellow:
-# <?xml version="1.0" encoding="ISO-8859-1"?>
-#
-# <xport>
-# <meta>
-# <start>1310455500</start>
-# <step>300</step>
-# <end>1310459100</end>
-# <rows>13</rows>
-# <columns>5</columns>
-# <legend>
-# <entry>memoryUsed</entry>
-# <entry>memoryFree</entry>
-# <entry>memoryCache</entry>
-# <entry>memoryBuffer</entry>
-# <entry>totalMemory</entry>
-# </legend>
-# </meta>
-# <data>
-# <row><t>1310455500</t><v>1.9181091707e+06</v><v>1.5819754974e+06</v><v>1.2528146351e+06</v><v>1.2528146351e+06</v><v>3.5000846681e+06</v></row>
-# ---
-# ---
-# </data>
-# </xport>
-
-import os
-import sys
-import syslog
-from XmlHandler import ResponseXml
-import Utils
-
-def getMemData(period):
- memRrdFile = "/var/lib/rrd/mem.rrd"
- rs = ResponseXml()
- command = "rrdtool xport --start -%s \
- DEF:free=%s:memfree:AVERAGE \
- DEF:used=%s:memused:AVERAGE \
- DEF:cache=%s:memcache:AVERAGE \
- DEF:buffer=%s:membuffer:AVERAGE \
- CDEF:total1=used,free,+ \
- CDEF:used1=used,buffer,cache,-,- \
- CDEF:total=total1,used1,+ \
- XPORT:used:memoryUsed \
- XPORT:free:memoryFree \
- XPORT:cache:memoryCache \
- XPORT:buffer:memoryBuffer \
- XPORT:total:totalMemory" % (period, memRrdFile, memRrdFile, memRrdFile, memRrdFile)
-
- rv = Utils.runCommand(command, output=True, root=True)
- message = Utils.stripEmptyLines(rv["Stdout"])
- if rv["Stderr"]:
- error = Utils.stripEmptyLines(rv["Stderr"])
- message += "Error: [%s]" % (error)
- Utils.log("failed to create RRD file for memory usages %s" % file)
- rs.appendTagRoute("status.code", rv["Status"])
- rs.appendTagRoute("status.message", message)
- return rs.toxml()
- return rv["Stdout"]
-
-def main():
- if len(sys.argv) != 2:
- sys.stderr.write("usage: %s <period>\n" % os.path.basename(sys.argv[0]))
- sys.exit(-1)
-
- period = sys.argv[1]
- print getMemData(period)
- sys.exit(0)
-
-if __name__ == "__main__":
- main()
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/get_rrd_net_details.py b/src/com.gluster.storage.management.gateway.scripts/src/get_rrd_net_details.py
deleted file mode 100755
index 6a31cde8..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/get_rrd_net_details.py
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/usr/bin/python
-# Copyright (C) 2010 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-# Gluster Storage Platform is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 3 of
-# the License, or (at your option) any later version.
-#
-# Gluster Storage Platform 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 General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/>.
-import os
-import sys
-from XmlHandler import ResponseXml
-import Utils
-
-def main():
- if len(sys.argv) != 3:
- sys.stderr.write("usage: %s <DEVICE> <PERIOD>\n" % os.path.basename(sys.argv[0]))
- sys.exit(-1)
-
- device = sys.argv[1]
- period = sys.argv[2]
-
- rs = ResponseXml()
- command = "rrdtool xport --start -%s \
- DEF:received=/var/lib/rrd/network-%s.rrd:received:AVERAGE \
- DEF:transmitted=/var/lib/rrd/network-%s.rrd:transmitted:AVERAGE \
- CDEF:total=received,transmitted,+ \
- XPORT:received:received \
- XPORT:transmitted:transmitted \
- XPORT:total:total" % (period, device, device)
- rv = Utils.runCommand(command, output=True, root=True)
- message = Utils.stripEmptyLines(rv["Stdout"])
- if rv["Stderr"]:
- error = Utils.stripEmptyLines(rv["Stderr"])
- message += "Error: [%s]" % (error)
- Utils.log("failed to get RRD information of device %s" % file)
- rs.appendTagRoute("status.code", rv["Status"])
- rs.appendTagRoute("status.message", message)
- print rs.toxml()
- print rv["Stdout"]
- sys.exit(0)
-
-if __name__ == "__main__":
- main()
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/get_server_details.py b/src/com.gluster.storage.management.gateway.scripts/src/get_server_details.py
deleted file mode 100755
index ba735892..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/get_server_details.py
+++ /dev/null
@@ -1,118 +0,0 @@
-#!/usr/bin/python
-# Copyright (C) 2009 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-# Gluster Storage Platform is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 3 of
-# the License, or (at your option) any later version.
-#
-# Gluster Storage Platform 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 General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/>.
-
-import sys
-import socket
-import re
-import Utils
-import DiskUtils
-from NetworkUtils import *
-from Disk import *
-from XmlHandler import ResponseXml
-from optparse import OptionParser
-
-
-def getServerDetails(listall):
- serverName = Utils.getServerFqdn()
- meminfo = getMeminfo()
- cpu = getCpuUsageAvg()
- nameServerList, domain, searchDomain = readResolvConfFile()
- if not domain:
- domain = [None]
-
- responseDom = ResponseXml()
- serverTag = responseDom.appendTagRoute("server")
- serverTag.appendChild(responseDom.createTag("name", serverName))
- serverTag.appendChild(responseDom.createTag("domainname", domain[0]))
- if Utils.runCommand("pidof glusterd") == 0:
- serverTag.appendChild(responseDom.createTag("status", "ONLINE"))
- else:
- serverTag.appendChild(responseDom.createTag("status", "OFFLINE"))
- serverTag.appendChild(responseDom.createTag("cpuUsage", str(cpu)))
- serverTag.appendChild(responseDom.createTag("totalMemory", str(convertKbToMb(meminfo['MemTotal']))))
- serverTag.appendChild(responseDom.createTag("memoryInUse", str(convertKbToMb(meminfo['MemUsed']))))
- serverTag.appendChild(responseDom.createTag("uuid", None))
-
- for dns in nameServerList:
- serverTag.appendChild(responseDom.createTag("dns%s" % str(nameServerList.index(dns) +1) , dns))
-
- #TODO: probe and retrieve timezone, ntp-server details and update the tags
-
- deviceList = {}
- interfaces = responseDom.createTag("networkInterfaces", None)
- for device in getNetDeviceList():
- if device["model"] in ['LOCAL', 'IPV6-IN-IPV4']:
- continue
- deviceList[device["device"]] = device
- try:
- macAddress = open("/sys/class/net/%s/address" % device["device"]).read().strip()
- except IOError:
- continue
- interfaceTag = responseDom.createTag("networkInterface", None)
- interfaceTag.appendChild(responseDom.createTag("name", device["device"]))
- interfaceTag.appendChild(responseDom.createTag("hwAddr",macAddress))
- interfaceTag.appendChild(responseDom.createTag("speed", device["speed"]))
- interfaceTag.appendChild(responseDom.createTag("model", device["model"]))
- if deviceList[device["device"]]:
- if deviceList[device["device"]]["onboot"]:
- interfaceTag.appendChild(responseDom.createTag("onboot", "yes"))
- else:
- interfaceTag.appendChild(responseDom.createTag("onBoot", "no"))
- interfaceTag.appendChild(responseDom.createTag("bootProto", deviceList[device["device"]]["bootproto"]))
- interfaceTag.appendChild(responseDom.createTag("ipAddress", deviceList[device["device"]]["ipaddr"]))
- interfaceTag.appendChild(responseDom.createTag("netMask", deviceList[device["device"]]["netmask"]))
- interfaceTag.appendChild(responseDom.createTag("defaultGateway", deviceList[device["device"]]["gateway"]))
- if deviceList[device["device"]]["mode"]:
- interfaceTag.appendChild(responseDom.createTag("mode", deviceList[device["device"]]["mode"]))
- if deviceList[device["device"]]["master"]:
- interfaceTag.appendChild(responseDom.createTag("bonding", "yes"))
- spliter = re.compile(r'[\D]')
- interfaceTag.appendChild(responseDom.createTag("bondid", spliter.split(device["master"])[-1]))
- else:
- interfaceTag.appendChild(responseDom.createTag("onBoot", "no"))
- interfaceTag.appendChild(responseDom.createTag("bootProto", "none"))
- interfaces.appendChild(interfaceTag)
- serverTag.appendChild(interfaces)
-
- responseDom.appendTag(serverTag)
- serverTag.appendChild(responseDom.createTag("numOfCPUs", int(os.sysconf('SC_NPROCESSORS_ONLN'))))
-
- diskDom = DiskUtils.getDiskDom()
- if not diskDom:
- sys.stderr.write("No disk found!")
- Utils.log("Failed to get disk details")
- sys.exit(1)
-
- serverTag.appendChild(diskDom.getElementsByTagRoute("disks")[0])
- return serverTag
-
-def main():
- parser = OptionParser()
- parser.add_option("-N", "--only-data-disks",
- action="store_false", dest="listall", default=True,
- help="List only data disks")
-
- (options, args) = parser.parse_args()
- responseXml = getServerDetails(options.listall)
- if responseXml:
- print responseXml.toxml()
-
- sys.exit(0)
-
-if __name__ == "__main__":
- main()
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/get_server_status.py b/src/com.gluster.storage.management.gateway.scripts/src/get_server_status.py
deleted file mode 100755
index a57428b6..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/get_server_status.py
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/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
-
-def main():
- if len(sys.argv) != 1:
- sys.stderr.write("usage: %s\n" % os.path.basename(sys.argv[0]))
- sys.exit(-1)
-
- if Utils.runCommand("pidof glusterd") == 0:
- print "ONLINE"
- else:
- print "OFFLINE"
- sys.exit(0)
-
-if __name__ == "__main__":
- main()
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/get_volume_log.py b/src/com.gluster.storage.management.gateway.scripts/src/get_volume_log.py
deleted file mode 100755
index b906c002..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/get_volume_log.py
+++ /dev/null
@@ -1,131 +0,0 @@
-# Copyright (C) 2009,2010 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-# Gluster Storage Platform is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 3 of
-# the License, or (at your option) any later version.
-#
-# Gluster Storage Platform 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 General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/>.
-
-import Globals
-import syslog
-import Utils
-from VolumeUtils import *
-from XmlHandler import ResponseXml
-
-
-def enumLogType(logCode):
- if "M" == logCode.upper():
- return "EMERGENCY"
- elif "A" == logCode.upper():
- return "ALERT"
- elif "C" == logCode.upper():
- return "CRITICAL"
- elif "E" == logCode.upper():
- return "ERROR"
- elif "W" == logCode.upper():
- return "WARNING"
- elif "N" == logCode.upper():
- return "NOTICE"
- elif "I" == logCode.upper():
- return "INFO"
- elif "D" == logCode.upper():
- return "DEBUG"
- elif "T" == logCode.upper():
- return "TRACE"
- else:
- return "UNKNOWN"
-##--end of enumLogType()
-
-
-def addLog(responseDom, logMessageTag, loginfo):
- logTag = responseDom.createTag("log", None)
- logTag.appendChild(responseDom.createTag("date", loginfo[0]))
- logTag.appendChild(responseDom.createTag("time", loginfo[1]))
- logTag.appendChild(responseDom.createTag("type", enumLogType(loginfo[2])))
- logTag.appendChild(responseDom.createTag("message", loginfo[3]))
- logMessageTag.appendChild(logTag)
- return True
-##--end of addLog()
-
-
-def logSplit(log):
- loginfo = log.strip().split(None, 3)
- loginfo[0] = loginfo[0][1:] #-- Remove '['
- loginfo[1] = loginfo[1][0:-1] #-- Remove ']'
- return loginfo
-##--end of logSplit()
-
-
-def getVolumeLog(volumeName, tailCount):
- rs = ResponseXml()
- if not volumeName:
- rs.appendTagRoute("status.code", "-1")
- rs.appendTagRoute("status.message", "No volume name given")
- return rs.toprettyxml()
-
- if not tailCount:
- rs.appendTagRoute("status.code", "-1")
- rs.appendTagRoute("status.message", "No tail count given")
- return rs.toprettyxml()
-
- thisServerName = getCurrentServerName()
- if not thisServerName:
- rs.appendTagRoute("status.code", "-2")
- rs.appendTagRoute("status.message", "Failed to get current server name")
- return rs.toprettyxml()
-
- volumeDom = XDOM()
- partitionList = getPartitionListByServerName(volumeDom, thisServerName)
- if not partitionList:
- rs.appendTagRoute("status.code", "-3")
- rs.appendTagRoute("status.message", "Failed to get server partition details")
- return rs.toprettyxml()
-
- pattern = '\[\d{4}-\d{2}-\d{2}\s{1}\d{2}:\d{2}:\d{2}.\d+\]\s{1}([MACEWNIDT]){1}\s+'
- logMessagesTag = rs.createTag("response.logMessages")
- for partitionName in partitionList:
- logMessageTag = rs.createTag("logMessage")
- logMessageTag.appendChild("disk", "%s:%s" % (thisServerName, partitionName))
-
- logDirectory = "%s/%s/%s/log" % (Globals.GLUSTER_LUN_DIR, partitionList[partitionName], volumeUuid)
- logFileName = "%s/%s-%s-%s-exports-brick1.log" % (logDirectory,
- Globals.GLUSTER_LUN_DIR[1:],
- partitionList[partitionName],
- volumeUuid)
- if not os.path.exists(logFileName):
- Utils.log("volume log file not found %s" % logFileName)
- continue
- fp = open(logFileName)
- lines = [line for line in fp if re.match(pattern, line)]
- fp.close()
- i = len(lines) - int(tailCount)
- if i < 0:
- i = 0
- for log in lines[i:]:
- loginfo = logSplit(log)
- addLog(rs, logMessageTag, loginfo)
- logMessagesTag.appendChild(logMessageTag)
- return rs.toprettyxml()
-##--end of getVolumeLog()
-
-def main():
- if len(sys.argv) != 3:
- print >> sys.stderr, "usage: %s <disk name> <volume name>" % sys.argv[0]
- sys.exit(-1)
-
- volumeName = sys.argv[1]
- tailCount = sys.argv[2]
- print getVolumeLog(volumeName, tailCount)
- sys.exit(0)
-
-if __name__ == "__main__":
- main()
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/gluster_provision_block_wrapper.py b/src/com.gluster.storage.management.gateway.scripts/src/gluster_provision_block_wrapper.py
deleted file mode 100755
index a3b2776d..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/gluster_provision_block_wrapper.py
+++ /dev/null
@@ -1,109 +0,0 @@
-#!/usr/bin/python
-# Copyright (C) 2010 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-# Gluster Storage Platform is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 3 of
-# the License, or (at your option) any later version.
-#
-# Gluster Storage Platform 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 General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/>.
-
-import os
-import sys
-import subprocess
-import Utils
-import DiskUtils
-from optparse import OptionParser
-
-def writeStatus(deviceFormatStatusFile, message):
- try:
- fp = open(deviceFormatStatusFile, "w")
- fp.write(message)
- fp.close()
- except IOError, e:
- Utils.log("Failed to update log file %s: %s" % (deviceFormatStatusFile, str(e)))
- return False
- return True
-
-
-def main():
- parser = OptionParser()
- parser.add_option("-t", "--type", action="store", type="string", dest="fstype")
- (options, args) = parser.parse_args()
-
- if len(args) != 1:
- sys.stderr.write("usage: %s [-t FSTYPE] DEVICE" % os.path.basename(sys.argv[0]))
- sys.exit(-1)
-
- device = args[0]
- deviceFormatLockFile = Utils.getDeviceFormatLockFile(device)
- deviceFormatStatusFile = Utils.getDeviceFormatStatusFile(device)
- deviceFormatOutputFile = Utils.getDeviceFormatOutputFile(device)
-
- if os.path.exists(deviceFormatStatusFile):
- Utils.log("device format status file %s exists" % deviceFormatStatusFile)
- sys.exit(1)
-
- if os.path.exists(deviceFormatLockFile):
- Utils.log("device format lock file %s exists" % deviceFormatLockFile)
- sys.exit(2)
-
- try:
- fp = open(deviceFormatLockFile, "w")
- fp.close()
- except OSError, e:
- Utils.log("failed to create lock file %s: %s" % (deviceFormatLockFile, str(e)))
- writeStatus(deviceFormatStatusFile, "Lock file creation failed\n")
- sys.exit(3)
-
- try:
- fptr = open(deviceFormatOutputFile, 'w')
- except IOError, e:
- Utils.log("failed to create output file %s" % deviceFormatOutputFile)
- writeStatus(deviceFormatStatusFile, "Output file creation failed\n")
- Utils.removeFile(deviceFormatLockFile)
- sys.exit(4)
-
- if options.fstype:
- command = "gluster-provision-block -t %s %s" % (options.fstype, device)
- else:
- command = "gluster-provision-block %s" % (device)
-
- process = Utils.runCommandBG(command,
- stdinFileObj=subprocess.PIPE,
- stdoutFileObj=fptr,
- stderrFileObj=subprocess.PIPE)
- if process:
- status = process.wait()
- else:
- Utils.removeFile(deviceFormatOutputFile)
- Utils.removeFile(deviceFormatLockFile)
- writeStatus(deviceFormatStatusFile, "Device format failed\n")
- 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")
- Utils.removeFile(deviceFormatOutputFile)
- Utils.removeFile(deviceFormatLockFile)
- sys.exit(0)
-
-if __name__ == "__main__":
- main()
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/modify_volume_cifs.py b/src/com.gluster.storage.management.gateway.scripts/src/modify_volume_cifs.py
deleted file mode 100755
index f6bacfc4..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/modify_volume_cifs.py
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/usr/bin/python
-# Copyright (C) 2011 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Management Gateway.
-#
-
-import os
-import sys
-import Utils
-import VolumeUtils
-
-def main():
- if len(sys.argv) <= 2:
- sys.stderr.write("usage: %s VOLUME_NAME USER1 USER2 ...\n" % os.path.basename(sys.argv[0]))
- sys.exit(-1)
-
- volumeName = sys.argv[1]
- userList = sys.argv[2:]
-
- if not VolumeUtils.writeVolumeCifsConfiguration(volumeName, userList):
- sys.exit(1)
- if Utils.runCommand("service smb reload") != 0:
- Utils.log("Failed to reload smb service")
- sys.exit(2)
- sys.exit(0)
-
-
-if __name__ == "__main__":
- main()
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/multicast_response.py b/src/com.gluster.storage.management.gateway.scripts/src/multicast_response.py
deleted file mode 100644
index 18cf89ae..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/multicast_response.py
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/usr/bin/python
-# Copyright (C) 2009 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-# Gluster Storage Platform is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 3 of
-# the License, or (at your option) any later version.
-#
-# Gluster Storage Platform 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 General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/>.
-
-import os
-import string
-import time
-import Utils
-import socket
-import struct
-import Globals
-from XmlHandler import *
-
-def isInPeer():
- command = "gluster peer status"
- status = Utils.runCommand(command, output=True, root=True)
- if status["Status"] == 0:
- if status["Stdout"].strip().upper() != "NO PEERS PRESENT":
- return True
- return False
- Utils.log("command [%s] failed with [%d:%s]" % (command, status["Status"], os.strerror(status["Status"])))
- return False
-
-def response(multiCastGroup, port):
- # waiting for the request!
- socketRequest = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
- socketRequest.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
- socketRequest.bind(('', port))
- mreq = struct.pack("4sl", socket.inet_aton(multiCastGroup), socket.INADDR_ANY)
- socketRequest.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
-
- socketSend = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
- socketSend.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2)
-
- #TODO: Remove infinite loop and make this as a deamon (service)
- while True:
- request = socketRequest.recvfrom(1024)
- if not request:
- continue
- dom = XDOM()
- dom.parseString(request[0])
- if not dom:
- continue
- if not dom.getTextByTagRoute("request.name"):
- continue
- requesttime = dom.getTextByTagRoute("request.time")
- if not requesttime:
- continue
- if isInPeer():
- time.sleep(5)
- continue
- socketSend.sendto("<response><servername>%s</servername><time>%s</time></response>" % (socket.gethostname(), requesttime),
- (multiCastGroup, port))
- request = None
-
-def main():
- response(Globals.MULTICAST_GROUP, Globals.MULTICAST_PORT)
-
-if __name__ == "__main__":
- main()
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/rrd_update_cpu_details.py b/src/com.gluster.storage.management.gateway.scripts/src/rrd_update_cpu_details.py
deleted file mode 100755
index 73982971..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/rrd_update_cpu_details.py
+++ /dev/null
@@ -1,90 +0,0 @@
-#!/usr/bin/python
-# Copyright (C) 2010 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-# Gluster Storage Platform is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 3 of
-# the License, or (at your option) any later version.
-#
-# Gluster Storage Platform 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 General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/>.
-import os
-import sys
-from XmlHandler import ResponseXml
-import Utils
-
-def createMemData(file, step):
- rs = ResponseXml()
- command = ["rrdtool", "create", file, "--step=%s" % step,
- "DS:user:COUNTER:600:0:U",
- "DS:system:COUNTER:600:0:U",
- "DS:idle:COUNTER:600:0:U",
- "RRA:AVERAGE:0.5:1:576",
- "RRA:AVERAGE:0.5:6:672",
- "RRA:AVERAGE:0.5:24:732",
- "RRA:AVERAGE:0.5:144:1460"]
-
- rv = Utils.runCommand(command, output=True, root=True)
- message = Utils.stripEmptyLines(rv["Stdout"])
- if rv["Stderr"]:
- error = Utils.stripEmptyLines(rv["Stderr"])
- message += "Error: [%s]" % (error)
- Utils.log("failed to create RRD file for cpu usages %s" % file)
- rs.appendTagRoute("status.code", rv["Status"])
- rs.appendTagRoute("status.message", message)
- return rs.toxml()
- return None
-
-def updateMemData(file):
- rs = ResponseXml()
- user = None
- system = None
- idle = None
- for line in open("/proc/stat").readlines():
- if line.startswith("cpu"):
- cpudetails = line.split()
- if "cpu" == cpudetails[0]:
- user = cpudetails[1]
- system = cpudetails[3]
- idle = cpudetails[4]
- break
-
- if None == user:
- Utils.log("failed to fetch cpu details from /proc/stat")
- rs.appendTagRoute("status.code", "-1")
- rs.appendTagRoute("status.message", "failed to fetch cpu details")
- return rs.toxml()
-
- command = ["rrdtool", "update", file, "-t", "user:system:idle",
- "N:%s:%s:%s" % (user, system, idle)]
- rv = Utils.runCommand(command, output=True, root=True)
- if rv["Stderr"]:
- error = Utils.stripEmptyLines(rv["Stderr"])
- message = "Error: [%s]" % (error)
- Utils.log("failed to update cpu usage into rrd file %s" % file)
- rs.appendTagRoute("status.code", rv["Status"])
- rs.appendTagRoute("status.message", message)
- return rs.toxml()
- return None
-
-
-def main():
- cpuRrdFile = "/var/lib/rrd/cpu.rrd"
- if not os.path.exists(cpuRrdFile):
- status = createMemData(cpuRrdFile, 100)
- if status:
- print status
- status = updateMemData(cpuRrdFile)
- if status:
- print status
- sys.exit(0)
-
-if __name__ == "__main__":
- main()
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/rrd_update_memory_details.py b/src/com.gluster.storage.management.gateway.scripts/src/rrd_update_memory_details.py
deleted file mode 100755
index fe4fcce6..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/rrd_update_memory_details.py
+++ /dev/null
@@ -1,90 +0,0 @@
-#!/usr/bin/python
-# Copyright (C) 2010 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-# Gluster Storage Platform is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 3 of
-# the License, or (at your option) any later version.
-#
-# Gluster Storage Platform 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 General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/>.
-import os
-import sys
-from XmlHandler import ResponseXml
-import Utils
-
-def createMemData(file, step):
- rs = ResponseXml()
- command = ["rrdtool", "create", file, "--step=%s" % step,
- "DS:memused:ABSOLUTE:600:0:U",
- "DS:memfree:ABSOLUTE:600:0:U",
- "DS:memcache:ABSOLUTE:600:0:U",
- "DS:swapused:ABSOLUTE:600:0:U",
- "DS:swapfree:ABSOLUTE:600:0:U",
- "RRA:AVERAGE:0.5:1:576",
- "RRA:AVERAGE:0.5:6:672",
- "RRA:AVERAGE:0.5:24:732",
- "RRA:AVERAGE:0.5:144:1460"]
-
- rv = Utils.runCommand(command, output=True, root=True)
- message = Utils.stripEmptyLines(rv["Stdout"])
- if rv["Stderr"]:
- error = Utils.stripEmptyLines(rv["Stderr"])
- message += "Error: [%s]" % (error)
- Utils.log("failed to create RRD file for memory usages %s" % file)
- rs.appendTagRoute("status.code", rv["Status"])
- rs.appendTagRoute("status.message", message)
- return rs.toxml()
- return None
-
-def updateMemData(file):
- rs = ResponseXml()
- command = ["free", "-b", "-o"]
- rv = Utils.runCommand(command, output=True, root=True)
- if rv["Stderr"]:
- error = Utils.stripEmptyLines(rv["Stderr"])
- message += "Error: [%s]" % (error)
- Utils.log("failed to retrieve memory details")
- rs.appendTagRoute("status.code", rv["Status"])
- rs.appendTagRoute("status.message", message)
- return rs.toxml()
-
- message = rv["Stdout"].split()
- command = ["rrdtool", "update", file, "-t", "memused:memfree:memcache:swapused:swapfree",
- "N:%s:%s:%s:%s:%s" % (message[8], message[9], message[12], message[14], message[15])]
- rv = Utils.runCommand(command, output=True, root=True)
- if rv["Stderr"]:
- error = Utils.stripEmptyLines(rv["Stderr"])
- message += "Error: [%s]" % (error)
- Utils.log(syslog.LOG_ERR, "failed to update memory usage into rrd file %s" % file)
- rs.appendTagRoute("status.code", rv["Status"])
- rs.appendTagRoute("status.message", message)
- return rs.toxml()
- return None
-
-
-def main():
- #if len(sys.argv) != 2:
- # print >> sys.stderr, "usage: %s <step>" % sys.argv[0]
- # sys.exit(-1)
- #step = sys.argv[1]
-
- memRrdFile = "mem.rrd"
- if not os.path.exists(memRrdFile):
- status = createMemData(memRrdFile, 100)
- if status:
- print status
- status = updateMemData(memRrdFile)
- if status:
- print status
- sys.exit(0)
-
-if __name__ == "__main__":
- main()
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/setup_cifs_config.py b/src/com.gluster.storage.management.gateway.scripts/src/setup_cifs_config.py
deleted file mode 100755
index 2cc35acc..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/setup_cifs_config.py
+++ /dev/null
@@ -1,81 +0,0 @@
-#!/usr/bin/python
-# Copyright (C) 2011 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Management Gateway.
-#
-
-import os
-import sys
-import Globals
-import Utils
-
-def main():
- try:
- os.mkdir(Globals.GLUSTER_BASE_DIR)
- os.mkdir(Globals.VOLUME_CONF_DIR)
- os.mkdir(Globals.CIFS_EXPORT_DIR)
- os.mkdir(Globals.REEXPORT_DIR)
- except OSError, e:
- Utils.log("failed to create directory: %s" % str(e))
- sys.exit(1)
- try:
- fp = open(Globals.VOLUME_SMBCONF_FILE, "w")
- fp.close()
- except IOError, e:
- Utils.log("Failed to create file %s: %s" % (Globals.VOLUME_SMBCONF_FILE, str(e)))
- sys.exit(2)
- try:
- os.rename(Globals.SAMBA_CONF_FILE, "%s.orig" % Globals.SAMBA_CONF_FILE)
- except IOError, e:
- Utils.log("Ignoring rename %s to %s: %s" % (Globals.SAMBA_CONF_FILE, "%s.orig" % Globals.SAMBA_CONF_FILE, str(e)))
- try:
- fp = open(Globals.SAMBA_CONF_FILE, "w")
- fp.write("##\n")
- fp.write("## THIS FILE SHOULD NOT BE MODIFIED. IF YOU WANT TO MODIFY SAMBA\n")
- fp.write("## CONFIGURATIONS, USE /etc/samba/real.smb.conf FILE\n")
- fp.write("##\n")
- fp.write("include = %s\n\n" % Globals.REAL_SAMBA_CONF_FILE)
- fp.write("## CAUTION: DO NOT REMOVE BELOW LINE. REMOVAL OF THE LINE DISABLES\n")
- fp.write("## CIFS REEXPORT OF GLUSTER VOLUMES\n")
- fp.write("include = %s\n" % Globals.VOLUME_SMBCONF_FILE)
- fp.close()
- except IOError, e:
- Utils.log("Failed to create samba configuration file %s: %s" % (Globals.SAMBA_CONF_FILE, str(e)))
- sys.exit(3)
- try:
- fp = open(Globals.REAL_SAMBA_CONF_FILE, "w")
- fp.write("[global]\n")
- fp.write("## CAUTION: DO NOT REMOVE BELOW INCLUDE LINE. REMOVAL OF THE LINE\n")
- fp.write("## DISABLES SERVER/CIFS HIGH AVAILABILITY\n")
- #fp.write("include = %s\n" % Globals.CTDB_SAMBA_CONF_FILE)
- fp.write("##\n")
- fp.write("socket options = TCP_NODELAY IPTOS_LOWDELAY SO_SNDBUF=131072 SO_RCVBUF=131072\n")
- fp.write("read raw = yes\n")
- fp.write("server string = %h\n")
- fp.write("write raw = yes\n")
- fp.write("oplocks = yes\n")
- fp.write("max xmit = 131072\n")
- fp.write("dead time = 15\n")
- fp.write("getwd cache = yes\n")
- fp.write("#read size = 131072\n")
- fp.write("use sendfile=yes\n")
- fp.write("block size = 131072\n")
- fp.write("printcap name = /etc/printcap\n")
- fp.write("load printers = no\n")
- fp.close()
- except IOError, e:
- Utils.log("Failed to create samba configuration file %s: %s" % (Globals.REAL_SAMBA_CONF_FILE, str(e)))
- sys.exit(4)
-
-
- if Utils.runCommand("setsebool -P samba_share_fusefs on") != 0:
- Utils.log("failed to set SELinux samba_share_fusefs")
- sys.exit(5)
-
- if Utils.runCommand("service smb restart") != 0:
- Utils.log("failed to restart smb service")
- sys.exit(6)
- sys.exit(0)
-
-
-if __name__ == "__main__":
- main()
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/start_volume_cifs.py b/src/com.gluster.storage.management.gateway.scripts/src/start_volume_cifs.py
deleted file mode 100755
index 239216c3..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/start_volume_cifs.py
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/usr/bin/python
-# Copyright (C) 2011 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Management Gateway.
-#
-
-import os
-import sys
-import Globals
-import Utils
-import VolumeUtils
-
-def main():
- if len(sys.argv) != 2:
- sys.stderr.write("usage: %s VOLUME_NAME\n" % os.path.basename(sys.argv[0]))
- sys.exit(-1)
-
- volumeName = sys.argv[1]
-
- volumeMountDirName = "%s/%s" % (Globals.REEXPORT_DIR, volumeName)
- cifsDirName = "%s/%s" % (Globals.CIFS_EXPORT_DIR, volumeName)
-
- if Utils.runCommand("mount -t glusterfs 127.0.0.1:%s %s" % (volumeName, volumeMountDirName)) != 0:
- Utils.log("Failed to mount volume %s" % (volumeName))
- sys.exit(1)
- if Utils.runCommand("ln -fTs %s %s" % (volumeMountDirName, cifsDirName)) != 0:
- Utils.log("Failed to create reexport link %s" % cifsDirName)
- sys.exit(2)
- if Utils.runCommand("chcon -t samba_share_t %s -h" % cifsDirName) != 0:
- Utils.log("Failed to change security context for the link %s" % cifsDirName)
- sys.exit(2)
- if not VolumeUtils.includeVolume(volumeName):
- Utils.log("Failed to include volume for CIFS reexport")
- sys.exit(3)
- if Utils.runCommand("service smb reload") != 0:
- Utils.log("Failed to reload smb service")
- sys.exit(4)
- sys.exit(0)
-
-
-if __name__ == "__main__":
- main()
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/stop_volume_cifs.py b/src/com.gluster.storage.management.gateway.scripts/src/stop_volume_cifs.py
deleted file mode 100755
index 99ac4750..00000000
--- a/src/com.gluster.storage.management.gateway.scripts/src/stop_volume_cifs.py
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/usr/bin/python
-# Copyright (C) 2011 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Management Gateway.
-#
-
-import os
-import sys
-import Globals
-import Utils
-import VolumeUtils
-
-def main():
- if len(sys.argv) != 2:
- sys.stderr.write("usage: %s VOLUME_NAME\n" % os.path.basename(sys.argv[0]))
- sys.exit(-1)
-
- volumeName = sys.argv[1]
-
- volumeMountDirName = "%s/%s" % (Globals.REEXPORT_DIR, volumeName)
- cifsDirName = "%s/%s" % (Globals.CIFS_EXPORT_DIR, volumeName)
-
- if not Utils.removeFile(cifsDirName):
- Utils.log("Failed to remove reexport link %s" % cifsDirName)
- sys.exit(1)
- if not VolumeUtils.excludeVolume(volumeName):
- Utils.log("Failed to exclude volume for CIFS reexport")
- sys.exit(2)
- if Utils.runCommand("service smb reload") != 0:
- Utils.log("Failed to reload smb service")
- sys.exit(3)
- if Utils.runCommand("umount %s" % (volumeMountDirName)) != 0:
- Utils.log("Failed to unmount volume %s" % (volumeName))
- sys.exit(4)
- sys.exit(0)
-
-
-if __name__ == "__main__":
- main()
diff --git a/src/com.gluster.storage.management.gateway/.settings/org.eclipse.wst.common.component b/src/com.gluster.storage.management.gateway/.settings/org.eclipse.wst.common.component
deleted file mode 100644
index 3d5a50bf..00000000
--- a/src/com.gluster.storage.management.gateway/.settings/org.eclipse.wst.common.component
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project-modules id="moduleCoreId" project-version="1.5.0">
- <wb-module deploy-name="com.gluster.storage.management.gateway">
- <wb-resource deploy-path="/" source-path="/WebContent"/>
- <wb-resource deploy-path="/WEB-INF/classes" source-path="/src"/>
- <wb-resource deploy-path="/WEB-INF/classes" source-path="/junit"/>
- <property name="java-output-path" value="/com.gluster.storage.management.gateway/build/classes"/>
- <property name="context-root" value="glustermg"/>
- </wb-module>
-</project-modules>
diff --git a/src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/plugins/com.gluster.storage.management.client_1.0.0.jar b/src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/plugins/com.gluster.storage.management.client_1.0.0.jar
deleted file mode 100644
index 56222cbf..00000000
--- a/src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/plugins/com.gluster.storage.management.client_1.0.0.jar
+++ /dev/null
Binary files differ
diff --git a/src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/plugins/com.gluster.storage.management.core_1.0.0.jar b/src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/plugins/com.gluster.storage.management.core_1.0.0.jar
deleted file mode 100644
index d321e76c..00000000
--- a/src/com.gluster.storage.management.gateway/WebContent/WEB-INF/lib/plugins/com.gluster.storage.management.core_1.0.0.jar
+++ /dev/null
Binary files differ
diff --git a/src/com.gluster.storage.management.gateway/WebContent/index.html b/src/com.gluster.storage.management.gateway/WebContent/index.html
deleted file mode 100644
index 4c90162a..00000000
--- a/src/com.gluster.storage.management.gateway/WebContent/index.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<html>
-<head>
-<title>Gluster Management Console</title>
-</head>
-<body>
-TODO: Identify the client's platform-browser and invoke appropriate JNLP URL.
-</body>
-</html>
diff --git a/src/com.gluster.storage.management.gateway/WebContent/scripts/Globals.py b/src/com.gluster.storage.management.gateway/WebContent/scripts/Globals.py
deleted file mode 100644
index f8a07c25..00000000
--- a/src/com.gluster.storage.management.gateway/WebContent/scripts/Globals.py
+++ /dev/null
@@ -1,123 +0,0 @@
-# Copyright (C) 2010 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-# Gluster Storage Platform is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 3 of
-# the License, or (at your option) any later version.
-#
-# Gluster Storage Platform 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 General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/>.
-
-MULTICAST_GROUP = '224.224.1.1'
-MULTICAST_PORT = 5353
-GLUSTER_PLATFORM_VERSION = "3.2"
-
-## System configuration constants
-SYSCONFIG_NETWORK_DIR = "/etc/sysconfig/network-scripts"
-DNSMASQ_CONF_DIR = "/etc/dnsmasq.d"
-
-FSTAB_FILE = "/etc/fstab"
-NFS_EXPORTS_FILE = "/etc/exports"
-SAMBA_CONF_FILE = "/etc/samba/smb.conf"
-TIMEZONE_FILE = "/etc/timezone"
-ZONEINFO_DIR = "/usr/share/zoneinfo"
-LOCALTIME_FILE = "/etc/localtime"
-KERBEROS_CONF_FILE = "/etc/krb5.conf"
-NSSWITCH_CONF_FILE = "/etc/nsswitch.conf"
-NTP_CONF_FILE = "/etc/ntp.conf"
-MODPROBE_CONF_FILE = "/etc/modprobe.d/bonding.conf"
-SYSCONFIG_NETWORK_FILE = "/etc/sysconfig/network"
-RESOLV_CONF_FILE = "/etc/resolv.conf"
-DNSMASQ_LEASE_FILE = "/var/tmp/dnsmasq.leases"
-LIVE_MODE_FILE = "/etc/live"
-ADD_SERVER_COMPLETED_FILE = "/var/tmp/installation-completed"
-
-DNSMASQ_DNS_CONF_FILE = DNSMASQ_CONF_DIR + "/dns.conf"
-DNSMASQ_DHCP_CONF_FILE = DNSMASQ_CONF_DIR + "/dhcp.conf"
-##
-
-## Base constants
-MAX_PARTITION_SIZE = 16777216 # 16 TB
-OS_PARTITION_SIZE = 4000 # 4 GB
-SESSION_TIMEOUT = 1800 # 30 minutes
-SERVER_AGENT_PORT = 50000
-
-BOOT_PARTITION_LABEL = "GLUSTEROS"
-DATA_PARTITION_LABEL = "GLUSTERDATA"
-VOLUME_USER_DESCRIPTION = "Gluster Volume User"
-SERVER_AGENT_RUN_USERNAME = "gluster"
-INSTALLER_SERVER_NAME = "$installer$"
-
-GLUSTER_BASE_DIR = "/etc/glustermg"
-GLUSTER_LUN_DIR = "/data"
-REEXPORT_DIR = "/reexport"
-NFS_EXPORT_DIR = "/nfs"
-CIFS_EXPORT_DIR = "/cifs"
-WEBDAV_DOCUMENT_ROOT_DIR = "/var/www/html"
-UPDATES_DIR = "/UPDATES"
-TRANSPORT_HOME_DIR = "/transport"
-GLUSTERFS_LOG_DIR = "/var/log/glusterfs"
-LOG_DIR = "/var/log/glustermg"
-
-GLUSTER_UPDATES_FILE = "updates.xml"
-INSTALLER_STATUS_FILE = "/var/log/install-server-status.log"
-INSTALL_PLATFORM_LOCK_FILE = "/var/lock/install-gluster-platform.lock"
-LAST_ACCESSED_NETWORK_FILE = "last-accessed-network"
-PREPARE_DATA_DISK_LOCK_FILE = "/var/tmp/prepare-data-disk.lock"
-##
-
-## Derived constants
-GLUSTER_CONF_DIR = GLUSTER_BASE_DIR + "/conf"
-GLUSTER_TMP_DIR = GLUSTER_BASE_DIR + "/tmp"
-VOLUME_CONF_DIR = GLUSTER_BASE_DIR + "/volumes"
-SERVER_CONF_DIR = GLUSTER_BASE_DIR + "/servers"
-DNS_RECORDS_DIR = GLUSTER_BASE_DIR + "/dns-records"
-INSTALLER_CONF_DIR = SERVER_CONF_DIR + "/" + INSTALLER_SERVER_NAME
-
-GSN_USER_INFO_FILE = GLUSTER_BASE_DIR + "/gsn-user.info"
-GLUSTER_VERSION_FILE = GLUSTER_BASE_DIR + "/version"
-GLUSTER_UPDATE_SITE_FILE = GLUSTER_BASE_DIR + "/update-site"
-GLUSTER_DIRECTORY_SERVICE_CONF_FILE = GLUSTER_BASE_DIR + "/directory.xml"
-GLUSTER_TIME_CONF_FILE = GLUSTER_BASE_DIR + "/timeconfig.xml"
-TRANSACTION_KEY_FILE = GLUSTER_BASE_DIR + "/transaction.key"
-SERVER_COUNT_FILE = GLUSTER_BASE_DIR + "/server-count"
-SIGNATURE_FILE = GLUSTER_BASE_DIR + "/.signature"
-GLUSTER_SERVER_POOL_FILE = GLUSTER_BASE_DIR + "/pool"
-GLUSTER_ADMIN_FILE = GLUSTER_BASE_DIR + "/.password"
-
-VOLUME_SMBCONF_FILE = VOLUME_CONF_DIR + "/volumes.smbconf.list"
-
-GLOBAL_NETWORK_FILE = INSTALLER_CONF_DIR + "/network.xml"
-INSTALL_SERVER_CONF_FILE = INSTALLER_CONF_DIR + "/installer.xml"
-INSTALLER_INFO_FILE = INSTALLER_CONF_DIR + "/installer.info"
-INSTALLED_SERVER_COUNT_FILE = INSTALLER_CONF_DIR + "/installed-server-count"
-
-SESSION_FILE = GLUSTER_TMP_DIR + "/login.sessions"
-
-GENERAL_LOG_FILE = LOG_DIR + "/general.log"
-INSTALLER_LOG_FILE = LOG_DIR + "/installer.log"
-PEER_AGENT_LOG_FILE = LOG_DIR + "/peeragent.log"
-SERVER_AGENT_LOG_FILE = LOG_DIR + "/serveragent.log"
-TRANSPORT_AGENT_LOG_FILE = LOG_DIR + "/transport.log"
-##
-
-
-## Global variables
-## TODO: These should be removed
-DOWNLOAD_GLUSTER_UPDATE_PROCESS = None
-DOWNLOAD_GLUSTER_UPDATE_LEVEL = None
-DOWNLOAD_GLUSTER_CURRENT_UPDATE_LEVEL = None
-DOWNLOAD_GLUSTER_UPDATE_MD5SUM = None
-REQUEST_MAP = {}
-VERSION_DICTONARY = {}
-##
-
-AWS_WEB_SERVICE_URL = "http://169.254.169.254/latest"
-REAL_SAMBA_CONF_FILE = "/etc/samba/real.smb.conf"
diff --git a/src/com.gluster.storage.management.gateway/WebContent/scripts/Protocol.py b/src/com.gluster.storage.management.gateway/WebContent/scripts/Protocol.py
deleted file mode 100644
index ff073593..00000000
--- a/src/com.gluster.storage.management.gateway/WebContent/scripts/Protocol.py
+++ /dev/null
@@ -1,438 +0,0 @@
-# Copyright (C) 2009 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-# Gluster Storage Platform is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 3 of
-# the License, or (at your option) any later version.
-#
-# Gluster Storage Platform 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 General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/>.
-
-import xml
-import xml.parsers.expat
-import xml.dom.minidom as MDOM
-import os
-import Globals
-import copy
-import Utils
-
-XML_STRING = 0
-XML_FILE = 1
-
-class XDOM:
- _domObj = None
-
- def __init__(self):
- self._domObj = MDOM.Document()
- return
-
- @classmethod
- def getText(self, nodeList):
- rc = ""
- for node in nodeList:
- if node.nodeType == node.TEXT_NODE:
- rc = rc + node.data
- return rc.strip()
-
- def parseString(self, requestString):
- try:
- self._domObj = MDOM.parseString(requestString)
- except xml.parsers.expat.ExpatError, e:
- Utils.log("XML string parse error: %s" % str(e))
- return False
- return True
-
- def parseFile(self, fileName):
- try:
- self._domObj = MDOM.parse(fileName)
- except IOError, e:
- Utils.log("error reading file: %s" % str(e))
- return False
- except xml.parsers.expat.ExpatError, e:
- Utils.log("XML file %s parse error: %s" % (fileName, str(e)))
- return False
- return True
-
- def setDomObj(self, dom):
- if dom and type(dom) != type([]):
- self._domObj = dom
- return True
- return False
-
- def createTextNode(self, text):
- if not self._domObj:
- return False
- if not text:
- return False
- return self._domObj.createTextNode(str(text))
-
- def createTag(self, tag, text=None):
- if not self._domObj:
- return None
- if tag == None:
- return None
-
- tagE = self._domObj.createElement(str(tag))
- if text:
- tagEText = self._domObj.createTextNode(str(text))
- tagE.appendChild(tagEText)
- return tagE
-
- def addTag(self, tag):
- if not self._domObj:
- return False
- if not tag:
- return False
-
- self._domObj.appendChild(tag)
- return True
-
- def createTagRoute(self, tagRoute, text=None):
- if not tagRoute:
- return False
-
- tagList = tagRoute.split(".")
- tag = None
- previousTag = None
- for tagName in tagList[:-1]:
- newTag = self.createTag(tagName, None)
- if not tag:
- tag = newTag
- previousTag = newTag
- continue
- previousTag.appendChild(newTag)
- previousTag = newTag
-
- if previousTag:
- previousTag.appendChild(self.createTag(tagList[-1], text))
- else:
- tag = self.createTag(tagList[-1], text)
- return tag
-
- def appendTagRoute(self, tagRoute, value=None):
- if not self._domObj:
- return False
- if not tagRoute:
- return False
-
- parentTagE = self._domObj
-
- tagNameList = tagRoute.split(".")
- newTagRoute = tagNameList.pop(-1)
-
- for i in range(len(tagNameList), 0, -1):
- tagE = self.getElementsByTagRoute(".".join(tagNameList[:i]))
- if tagE:
- parentTagE = tagE[0]
- break
- newTagRoute = tagNameList[i-1] + "." + newTagRoute
-
- newTagE = self.createTagRoute(newTagRoute, value)
- if not newTagE:
- return False
- try:
- parentTagE.appendChild(newTagE)
- except xml.dom.HierarchyRequestErr, e:
- Utils.log("error occured. %s" + str(e))
- return False
- return True
-
- def setTextByTagRoute(self, tagRoute, tagValue):
- if not self._domObj:
- return None
-
- if not tagRoute:
- return None
-
- tagE = self.getElementsByTagRoute(tagRoute)
- if not tagE:
- return False
-
- parentTagE = self.getElementsByTagRoute(".".join(tagRoute.split(".")[:-1]))
- if not parentTagE:
- return False
-
- parentTagE[0].childNodes.remove(tagE[0])
- parentTagE[0].appendChild(self.createTag(tagRoute.split(".")[-1], tagValue))
- return True
-
- def getElementsByTagRoute(self, tagRoute):
- if not self._domObj:
- return None
-
- if not tagRoute:
- return None
-
- x = None
- for tag in tagRoute.split("."):
- if x is None:
- x = self._domObj.getElementsByTagName(tag)
- continue
- if x == []:
- break
- x = x[0].getElementsByTagName(tag)
- return x
-
- def getTextByTagRoute(self, tagRoute):
- if not self._domObj:
- return None
-
- x = self.getElementsByTagRoute(tagRoute)
- if x:
- return self.getText(x[0].childNodes)
- return None
-
- def getElementsByTagName(self, name):
- if not self._domObj:
- return None
- return self._domObj.getElementsByTagName(name)
-
- def writexml(self, fileName, indent="", addindent="", newl=""):
- if not self._domObj:
- return None
- try:
- fp = open(fileName, "w")
- self._domObj.writexml(fp, indent, addindent, newl)
- fp.close()
- return True
- except IOError:
- return False
-
- def toString(self, indent=" ", newl="\n", encoding = None):
- if not self._domObj:
- return None
- return self._domObj.toprettyxml(indent, newl, encoding)
-
- def toxml(self, encoding = None):
- if not self._domObj:
- return None
- return self._domObj.toxml(encoding)
-
- def toprettyxml(self, indent=" ", newl="\n", encoding = None):
- return self.toString(indent, newl, encoding)
-
- def getAttribute(self, attributeName):
- if not attributeName:
- return None
- try:
- return self.getElementsByTagName("command")[0].getAttribute(attributeName)
- except IndexError:
- return False
-
- def setAttribute(self, attributeName, attributeValue):
- if not (attributeName and attributeValue):
- return None
- try:
- return self.getElementsByTagName("command")[0].setAttribute(attributeName, attributeValue)
- except IndexError:
- return False
-
- def getRequestCommand(self):
- return self.getAttribute("request")
-
- def getResponseCommand(self):
- return self.getAttribute("response")
-
- def getResponseCode(self):
- return self.getAttribute("response-code")
-
- def getMessageId(self):
- return self.getAttribute("id")
-
- def getVersion(self):
- return self.getAttribute("version")
-
- def getRequestAction(self):
- return self.getAttribute("action")
-
- def setVersion(self, value):
- return self.setAttribute("version", value)
-
- def setRequestAction(self, value):
- return self.setAttribute("action", value)
-
- def createCommandTag(self, command, responseCode, id, version=Globals.GLUSTER_PLATFORM_VERSION):
- commandTag = self._domObj.createElement("command")
- commandTag.setAttribute("response", command)
- commandTag.setAttribute("response-code", responseCode)
- commandTag.setAttribute("id", id)
- commandTag.setAttribute("version", version)
- return commandTag
-##--end of XDOM
-
-class RequestXml(XDOM):
- def __init__(self, requestString, type=None):
- if None == requestString:
- XDOM.__init__(self)
- return
- try:
- if None == type:
- if os.path.isfile(requestString):
- self._domObj = MDOM.parse(requestString)
- else:
- self._domObj = MDOM.parseString(requestString)
- elif XML_FILE == type:
- self._domObj = MDOM.parse(requestString)
- elif XML_STRING == type:
- self._domObj = MDOM.parseString(requestString)
- except IOError:
- XDOM.__init__(self)
- except xml.parsers.expat.ExpatError:
- XDOM.__init__(self)
-
-##--end of RequestXML
-
-class ResponseXml(XDOM):
- _commandTag = None
- def __init__(self, command, responseCode, id, version=Globals.GLUSTER_PLATFORM_VERSION):
- XDOM.__init__(self)
- if command and responseCode and id:
- self._commandTag = self.createCommandTag(command, responseCode, id, version)
- self._domObj.appendChild(self._commandTag)
-
- def appendCommand(self, command, responseCode, id, version=Globals.GLUSTER_PLATFORM_VERSION):
- if command and responseCode and id:
- self._commandTag = self.createCommandTag(command, responseCode, id, version)
- self._domObj.appendChild(self._commandTag)
- return True
- return False
-
- def append(self, tagName, tagValue=None):
- if not self._commandTag:
- return False
- tag = self.createTag(tagName, tagValue)
- if tag:
- self._commandTag.appendChild(tag)
- return True
- return False
-
- def appendTag(self, tag):
- if not tag:
- return False
- if not self._commandTag:
- return False
- self._commandTag.appendChild(tag)
- return True
-
- def appendTagRoute(self, tagRoute, value=None):
- if not self._commandTag:
- return False
- if not tagRoute:
- return False
-
- parentTagE = self._commandTag
-
- tagNameList = tagRoute.split(".")
- newTagRoute = tagNameList.pop(-1)
-
- for i in range(len(tagNameList), 0, -1):
- tagE = self.getElementsByTagRoute(".".join(["command"] + tagNameList[:i]))
- if tagE:
- parentTagE = tagE[0]
- break
- newTagRoute = tagNameList[i-1] + "." + newTagRoute
-
- newTagE = self.createTagRoute(newTagRoute, value)
- if not newTagE:
- return False
- try:
- parentTagE.appendChild(newTagE)
- except xml.dom.HierarchyRequestErr, e:
- Utils.log("error occured. %s" + str(e))
- return False
- return True
-
- def appendTagRouteOld(self, tagRoute, value=None):
- if not tagRoute:
- return False
- if not self._commandTag:
- return False
-
- tmpTagRoute = ""
- previousTagE = self._commandTag
- tagE = None
- for tagName in tagRoute.split("."):
- if not tmpTagRoute:
- tagE = self.getElementsByTagRoute("command." + tagName)
- else:
- tagE = self.getElementsByTagRoute("command." + tmpTagRoute + "." + tagName)
- if not tagE:
- break
- if len(tagE) != 1:
- return False
- previousTagE = tagE[0]
- if not tmpTagRoute:
- tmpTagRoute = tagName
- else:
- tmpTagRoute = tmpTagRoute + "." + tagName
-
- if tmpTagRoute == tagRoute:
- return False
- newTagRoute = tagRoute[len(tmpTagRoute):]
- if newTagRoute[0] == '.':
- newTagRoute = newTagRoute[1:]
-
- if previousTagE.childNodes and previousTagE.childNodes[0].nodeType == previousTagE.TEXT_NODE:
- return False
- previousTagE.appendChild(self.createTagRoute(newTagRoute, value))
- return True
-##--end of ResponseXml
-
-def test():
- #volumes = RequestXml(VolumeFile, XML_FILE).getElementsByTagRoute("volume-list.volume")
- requestStr = '''<command request="create-volume" id="123" version="3.1">
-<volume>
-<name>movies1</name>
-<type>cluster mirror</type>
-<start>512000</start>
-<server>zresearch</server>
-<vacl>192.168.20.*</vacl>
-<vacl>192.168.30.*</vacl>
-<nfs>
-<export>no</export>
-</nfs>
-<cifs>
-<export>no</export>
-</cifs>
-<webdav>
-<export>no</export>
-</webdav>
-</volume>
-</command>'''
-
- requestXml = RequestXml(requestStr)
- print requestXml.getAttribute("")
-
-def test1():
- rs = ResponseXml("create-volume", "OK", "xyz")
- rs.appendTagRoute("volume.detail.name", "music")
- print rs.toprettyxml()
- rs.append("volume", "data")
- print rs.toprettyxml()
- rs.appendTagRoute("volume.detail.ipaddr", "192.168.10.1")
- print rs.toprettyxml()
- print rs.appendTagRoute("volume.detail.ipaddr.v6", "ff:ff::ff::")
- print rs.toprettyxml()
-
- print rs.getTextByTagRoute("command.volume.detail")
-
-def test2():
- rs = ResponseXml("download-volume-logs", "OK", "xyz")
- te = rs.createTag("interface", None)
- te.appendChild(rs.createTag("device", "DEVICE1"))
- te.appendChild(rs.createTag("description", "my device one"))
- rs.appendTag(te)
-
- te = rs.createTag("interface", None)
- te.appendChild(rs.createTag("device", "DEVICE2"))
- te.appendChild(rs.createTag("description", "my device two"))
- rs.appendTag(te)
- print rs.toprettyxml()
-
diff --git a/src/com.gluster.storage.management.gateway/WebContent/scripts/Utils.py b/src/com.gluster.storage.management.gateway/WebContent/scripts/Utils.py
deleted file mode 100644
index 3408c14a..00000000
--- a/src/com.gluster.storage.management.gateway/WebContent/scripts/Utils.py
+++ /dev/null
@@ -1,1059 +0,0 @@
-# Copyright (c) 2010 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-# Gluster Storage Platform is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 3 of
-# the License, or (at your option) any later version.
-#
-# Gluster Storage Platform 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 General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/>.
-
-import sys
-import os
-import re
-import socket
-import struct
-import syslog
-import subprocess
-#import spwd
-import time
-#import uuid
-import tempfile
-import grp
-import pwd
-import inspect
-from datetime import datetime
-import urllib
-
-import Globals
-import Protocol
-
-RUN_COMMAND_ERROR = -1024
-LOG_SYSLOG = 1
-SYSLOG_REQUIRED = False
-LOG_FILE_NAME = None
-LOG_FILE_OBJ = None
-
-
-def _getLogCode(priority):
- if syslog.LOG_EMERG == priority:
- return "M"
- elif syslog.LOG_ALERT == priority:
- return "A"
- elif syslog.LOG_CRIT == priority:
- return "C"
- elif syslog.LOG_ERR == priority:
- return "E"
- elif syslog.LOG_WARNING == priority:
- return "W"
- elif syslog.LOG_NOTICE == priority:
- return "N"
- elif syslog.LOG_INFO == priority:
- return "I"
- elif syslog.LOG_DEBUG == priority:
- return "D"
- else: # UNKNOWN
- return "X"
-
-
-def setLogFile(fileName):
- global LOG_FILE_NAME
-
- if fileName:
- LOG_FILE_NAME = fileName
- return True
- return False
-
-
-def closeLog():
- global LOG_FILE_OBJ
- global SYSLOG_REQUIRED
-
- if SYSLOG_REQUIRED:
- syslog.closelog()
- SYSLOG_REQUIRED = False
- return True
-
- if LOG_FILE_OBJ:
- try:
- LOG_FILE_OBJ.close()
- LOG_FILE_OBJ = None
- except IOError, e:
- sys.stderr.write("Failed to close file: %s\n" % e)
- return False
- return True
-
-
-def openLog(fileName=None):
- global LOG_FILE_NAME
- global LOG_FILE_OBJ
- global SYSLOG_REQUIRED
-
- if fileName == LOG_SYSLOG:
- syslog.openlog(os.path.basename(sys.argv[0]))
- SYSLOG_REQUIRED = True
- return True
-
- if fileName:
- LOG_FILE_NAME = fileName
-
- if not LOG_FILE_NAME:
- return False
-
- closeLog()
-
- try:
- LOG_FILE_OBJ = open(LOG_FILE_NAME, "a")
- except IOError, e:
- sys.stderr.write("Failed to open file %s: %s\n" % (LOG_FILE_NAME, e))
- return False
- return True
-
-def record(priority, message=None):
- global LOG_FILE_OBJ
- global SYSLOG_REQUIRED
-
- stack = inspect.stack()[1]
- if stack[3] == "<module>":
- prefix = "%s:%s:%s" % (stack[1], stack[2], stack[3])
- else:
- prefix = "%s:%s:%s()" % (stack[1], stack[2], stack[3])
-
- if type(priority) == type("") or type(priority) == type(u""):
- logPriority = syslog.LOG_INFO
- logMessage = priority
- else:
- logPriority = priority
- logMessage = message
-
- if SYSLOG_REQUIRED:
- syslog.syslog(logPriority, "[%s]: %s" % (prefix, logMessage))
- return
-
- fp = sys.stderr
- if LOG_FILE_OBJ:
- fp = LOG_FILE_OBJ
-
- fp.write("[%s] %s [%s]: %s" % (str(datetime.now()), _getLogCode(logPriority), prefix, logMessage))
- if logMessage[-1] != '\n':
- fp.write("\n")
- fp.flush()
- return
-
-
-def trace(message):
- if message:
- log(syslog.LOG_DEBUG, message)
-
-
-def isString(value):
- return (type(value) == type("") or type(value) == type(u""))
-
-
-def getTempFileName():
- filedesc, filename = tempfile.mkstemp(prefix="GSP_")
- os.close(filedesc)
- return filename
-
-
-def runCommandBG(command, stdinFileObj=None, stdoutFileObj=None, stderrFileObj=None,
- shell=False, root=None):
- log("runCommandBG(): Trying to execute command [%s]" % command)
-
- if shell:
- if not isString(command):
- return None
- else:
- if isString(command):
- command = command.split()
-
- if root == True:
- if shell:
- command = "sudo " + command
- else:
- command = ['sudo'] + command
- elif isString(root):
- if shell:
- command = "sudo -u " + root + " " + command
- else:
- command = ['sudo', '-u', root] + command
-
- if not stdinFileObj:
- stdinFileObj=subprocess.PIPE
- if not stdoutFileObj:
- stdoutFileObj=subprocess.PIPE
- if not stderrFileObj:
- stderrFileObj=subprocess.PIPE
-
- try:
- process = subprocess.Popen(command,
- bufsize=-1,
- stdin=stdinFileObj,
- stdout=stdoutFileObj,
- stderr=stderrFileObj,
- shell=shell)
- return process
- except OSError, e:
- log("runCommandBG(): Failed to run command [%s]: %s" % (command, e))
- return None
-
-
-def runCommand(command,
- input='', output=False,
- shell=False, root=None):
- rv = {}
- rv["Status"] = RUN_COMMAND_ERROR
- rv["Stdout"] = None
- rv["Stderr"] = None
-
- try:
- stdinFileName = getTempFileName()
- stdinFileObj = open(stdinFileName, "w")
- stdinFileObj.write(input)
- stdinFileObj.close()
- stdinFileObj = open(stdinFileName, "r")
-
- stdoutFileName = getTempFileName()
- stdoutFileObj = open(stdoutFileName, "w")
-
- stderrFileName = getTempFileName()
- stderrFileObj = open(stderrFileName, "w")
- except IOError, e:
- log("Failed to create temporary file for executing command [%s]: %s" % (command, e))
- if output:
- return rv
- return rv["Status"]
-
- stdoutContent = None
- stderrContent = None
-
- process = runCommandBG(command,
- stdinFileObj=stdinFileObj,
- stdoutFileObj=stdoutFileObj,
- stderrFileObj=stderrFileObj,
- shell=shell, root=root)
- if process:
- rv['Status'] = process.wait()
- rv['Stdout'] = open(stdoutFileName).read()
- rv['Stderr'] = open(stderrFileName).read()
-
- os.remove(stdinFileName)
- os.remove(stdoutFileName)
- os.remove(stderrFileName)
-
- log("runCommand(): execution status of command [%s] = [%s]" % (command, rv))
-
- if output:
- return rv
- return rv["Status"]
-
-
-def runCommandFG(command, stdout=False, stderr=False,
- shell=False, root=None):
- if stdout or stderr:
- output = True
- else:
- output = False
- return runCommand(command, output=output, shell=shell, root=root)
-
-
-def IP2Number(ipString):
- try:
- return socket.htonl(struct.unpack("I", socket.inet_aton(ipString))[0])
- except socket.error:
- return None
- except TypeError:
- return None
- except struct.error:
- return None
-
-
-def Number2IP(number):
- try:
- return socket.inet_ntoa(struct.pack("I", socket.ntohl(number)))
- except socket.error:
- return None
- except AttributeError:
- return None
- except ValueError:
- return None
-
-
-def computeHostName(hostName):
- if not hostName:
- return False
-
- hostPrefix = ""
- for i in range(len(hostName), 0, -1):
- pos = i - 1
- if hostName[pos].isdigit():
- continue
- break
- hostPrefix = hostName[:pos+1]
- try:
- hostIndex = int(hostName[pos+1:])
- except ValueError:
- hostIndex = 0
- # TODO: Check the availablity of the (server) name
- return "%s%s" % (hostPrefix, hostIndex + 1)
-
-
-def daemonize():
- try:
- pid = os.fork()
- if pid > 0:
- # exit first parent
- sys.exit(0)
- except OSError, e:
- #sys.stderr.write("fork #1 failed: %d (%s)\n" % (e.errno, e.strerror))
- return False
-
- # decouple from parent environment
- os.chdir("/")
- os.setsid()
- os.umask(0)
-
- # do second fork
- try:
- pid = os.fork()
- if pid > 0:
- # exit from second parent
- sys.exit(0)
- except OSError, e:
- #sys.stderr.write("fork #2 failed: %d (%s)\n" % (e.errno, e.strerror))
- return False
-
- # redirect standard file descriptors
- sys.stdout.flush()
- sys.stderr.flush()
- si = file("/dev/null", 'r')
- so = file("/dev/null", 'a+')
- se = file("/dev/null", 'a+', 0)
- os.dup2(si.fileno(), sys.stdin.fileno())
- os.dup2(so.fileno(), sys.stdout.fileno())
- os.dup2(se.fileno(), sys.stderr.fileno())
- return True
-
-
-def getDownloadStatus(fileName):
- try:
- lines = [line for line in open(fileName)
- if "saved" in line or "%" in line]
- except IOError:
- return 0
- if not lines:
- return 0
- if "saved" in lines[-1]:
- return 100
- return lines[-1].split("%")[0].split()[-1]
-
-
-def getMeminfo():
- """-> dict of data from meminfo (str:int).
- Values are in kilobytes.
- """
- import re
- re_parser = re.compile(r'^(?P<key>\S*):\s*(?P<value>\d*)\s*kB' )
- result = {}
- for line in open('/proc/meminfo'):
- match = re_parser.match(line)
- if not match:
- continue # skip lines that don't parse
- key, value = match.groups(['key', 'value'])
- result[key] = int(value)
- result['MemUsed'] = (result['MemTotal'] - result['MemFree'])
- return result
-
-
-def getCpuUsage():
- """-> dict of cpuid : (usertime, nicetime, systemtime, idletime)
- cpuid "cpu" means the total for all CPUs.
- cpuid "cpuN" means the value for CPU N.
- """
- wanted_records = [line for line in open('/proc/stat') if
- line.startswith('cpu')]
- result = {}
- for cpuline in wanted_records:
- fields = cpuline.split()[:5]
- data = map(int, fields[1:])
- result[fields[0]] = tuple(data)
- return result
-
-def _getCpuStatList():
- try:
- fp = open("/proc/stat")
- cpuStatList = map(float, fp.readline().split()[1:])
- fp.close()
- return cpuStatList
- except IOError, e:
- Utils.log("Failed to open /proc/stat: %s" % str(e))
- return None
-
-def getCpuUsageAvg():
- st1 = _getCpuStatList()
- time.sleep(2)
- st2 = _getCpuStatList()
- if not (st1 and st2):
- return None
- delta = [st2[i] - st1[i] for i in range(len(st1))]
- cpuPercent = sum(delta[:3]) / delta[3] * 100.0
- return str('%.4f' % cpuPercent)
-
-def getLoadavg():
- try:
- loadavgstr = open('/proc/loadavg', 'r').readline().strip()
- except IOError:
- syslog.syslog(syslog.LOG_ERR, "failed to find cpu load")
- return None
-
- data = map(float, loadavgstr.split()[1:])
- # returns 1 minute load average
- return data[0]
-
-
-def getInfinibandPortStatus():
-
- """ Check for availability of infiniband port
- and return which port is active in a key pair value
- """
-
- # Check for existence of infiniband ports
- value = os.popen ("ls /sys/class/infiniband").readline().strip()
-
- if not value:
- return None
-
- portlist = os.popen ("echo /sys/class/infiniband/*/ports/*").readline().split()
-
- portkeys = {}
-
- for port in portlist:
- value = os.popen ("cat %s/state" %
- port.strip()).readline().split(':')[1].strip()
- portkeys[port.strip()] = value
-
- return portkeys
-
-
-def getServerCount():
- try:
- return int(open(Globals.SERVER_COUNT_FILE).read().strip())
- except IOError:
- log("failed to read file %s" % Globals.SERVER_COUNT_FILE)
- return 1
- except ValueError:
- log("invalid number format in file %s" % Globals.SERVER_COUNT_FILE)
- return 1
-
-
-def setServerCount(count):
- try:
- open(Globals.SERVER_COUNT_FILE, "w").write("%s\n" % count)
- return True
- except IOError:
- log("failed to write file %s" % Globals.SERVER_COUNT_FILE)
- return False
-
-
-def getInstalledServerCount():
- try:
- return int(open(Globals.INSTALLED_SERVER_COUNT_FILE).read().strip())
- except IOError:
- log("failed to read file %s" % Globals.INSTALLED_SERVER_COUNT_FILE)
- return 1
- except ValueError:
- log("invalid number format in file %s" % Globals.INSTALLED_SERVER_COUNT_FILE)
- return 1
-
-
-def setInstalledServerCount(count):
- try:
- open(Globals.INSTALLED_SERVER_COUNT_FILE, "w").write("%s\n" % count)
- return True
- except IOError:
- log("failed to write file %s" % Globals.INSTALLED_SERVER_COUNT_FILE)
- return False
-
-
-def getLastInstalledServerIpList():
- ipList = {}
- networkDom = Protocol.XDOM()
- if not networkDom.parseFile(Globals.GLOBAL_NETWORK_FILE):
- log("failed to parse file %s" % Globals.GLOBAL_NETWORK_FILE)
- for tagE in networkDom.getElementsByTagRoute("server.interface"):
- interfaceDom = Protocol.XDOM()
- interfaceDom.setDomObj(tagE)
- ipAddress = interfaceDom.getTextByTagRoute("ipaddr")
- if ipAddress:
- ipList[interfaceDom.getTextByTagRoute("device")] = ipAddress
- return ipList
-
-
-def getFreeIpAddress(device=None):
- serverCount = getServerCount()
- installedServerCount = getInstalledServerCount()
- if serverCount == installedServerCount:
- return None
-
- availableServerCount = serverCount - installedServerCount
- ipList = getLastInstalledServerIpList()
-
- if not ipList:
- return None
-
- if device:
- if device not in ipList.keys():
- return None
- deviceIpAddress = ipList[device]
- else:
- deviceIpAddress = ipList.values()[0]
- ipNumber = IP2Number(deviceIpAddress)
-
- for i in range((ipNumber + availableServerCount), ipNumber, -1):
- ipAddress = Number2IP(i)
- if runCommandFG(["ping", "-qnc", "1", ipAddress]) != 0:
- return ipAddress
- return None
-
-
-def getPasswordHash(userName):
- try:
- #return spwd.getspnam(userName).sp_pwd
- return "Not implimented"
- except KeyError:
- return None
-
-
-def getTransactionKey():
- try:
- tokens = open(Globals.TRANSACTION_KEY_FILE).read().split(',')
- except IOError:
- return None, None
- return tokens
-
-
-def generateSignature():
- #return str(uuid.uuid4()) + ('--%f' % time.time())
- return ('--%f' % time.time())
-
-
-def getSignature():
- try:
- return open(Globals.SIGNATURE_FILE).read().strip()
- except IOError:
- log(syslog.LOG_ERR, "unable to read signaure from %s file" % Globals.SIGNATURE_FILE)
- return False
-
-
-def storeSignature(signature, fileName=Globals.SIGNATURE_FILE):
- try:
- open(fileName, "w").write(signature + "\n")
- except IOError:
- log(syslog.LOG_ERR, "unable to write signature %s to %s file" % (signature, fileName))
- return False
- return True
-
-
-def isUserExist(userName):
- try:
- grp.getgrnam(userName).gr_gid
- return True
- except KeyError:
- pass
- try:
- pwd.getpwnam(userName).pw_uid
- return True
- except KeyError:
- pass
- return False
-
-
-def getGsnUserInfo(fileName=Globals.GSN_USER_INFO_FILE):
- userInfo = {}
- userInfo["UserId"] = None
- userInfo["Password"] = None
- try:
- for line in open(fileName):
- line = line.strip()
- k = line[:line.index("=")]
- v = line[line.index("=") + 1:]
- if v[0] == "'" or v[0] == '"':
- v = v[1:]
- if v[-1] == "'" or v[-1] == '"':
- v = v[:-1]
- if k.upper() == "GSN_ID":
- userInfo["UserId"] = v
- if k.upper() == "GSN_PASSWORD":
- userInfo["Password"] = v
- except IOError, e:
- log("Failed to read file %s: %s" % (fileName, e))
- return userInfo
-
-
-def setGsnUserInfo(userInfo, fileName=Globals.GSN_USER_INFO_FILE):
- try:
- fp = open(fileName, "w")
- fp.write("GSN_ID=%s\n" % userInfo["UserId"])
- fp.write("GSN_PASSWORD=%s\n" % userInfo["Password"])
- fp.close()
- return True
- except IOError, e:
- log("Failed to write file %s: %s" % (fileName, e))
- return False
-
-
-def getPlatformVersion(fileName=Globals.GLUSTER_VERSION_FILE):
- versionInfo = {}
- versionInfo["Version"] = None
- versionInfo["Update"] = None
- try:
- lines = open(Globals.GLUSTER_VERSION_FILE).readlines()
- for line in open(fileName):
- line = line.strip()
- k = line[:line.index("=")]
- v = line[line.index("=") + 1:]
- if v[0] == "'" or v[0] == '"':
- v = v[1:]
- if v[-1] == "'" or v[-1] == '"':
- v = v[:-1]
- if k.upper() == "VERSION":
- versionInfo["Version"] = v
- if k.upper() == "UPDATE":
- versionInfo["Update"] = v
- except IOError, e:
- log("Failed to read file %s: %s" % (fileName, e))
- return versionInfo
-
-
-def setPlatformVersion(versionInfo, fileName=Globals.GLUSTER_VERSION_FILE):
- if isString(versionInfo):
- tokens = versionInfo.strip().split(".")
- if len(tokens) < 2:
- log("Invalid version format %s. Expecting <MAJOR>.<MINOR>.<PATCHLEVEL>" % versionInfo)
- return False
- version = ".".join(tokens[:2])
- update = ".".join(tokens[2:])
- if not update:
- update = "0"
- else:
- version = versionInfo["Version"]
- update = versionInfo["Update"]
- try:
- fp = open(fileName, "w")
- fp.write("VERSION=%s\n" % version)
- fp.write("UPDATE=%s\n" % update)
- fp.close()
- return True
- except IOError, e:
- log("Failed to write file %s: %s" % (fileName, e))
- return False
-
-
-def getGlusterUpdateDom(serverVersion):
- errorMessage = ""
- updateInfoDom = None
- try:
- baseUrl = open(Globals.GLUSTER_UPDATE_SITE_FILE).read().strip()
- except IOError, e:
- log("Failed to read file %s: %s" % (Globals.GLUSTER_UPDATE_SITE_FILE, e))
- errorMessage = "Failed to read update site file"
- return updateInfoDom, errorMessage
-
- try:
- url = "%s/%s/%s" % (baseUrl, serverVersion, Globals.GLUSTER_UPDATES_FILE)
- connection = urllib.urlopen(url)
- if connection.getcode() != 200:
- connection.close()
- errorMessage = "Error received from server to open URL %s" % url
- return updateInfoDom, errorMessage
- updateInfoString = connection.read()
- connection.close()
- except IOError, e:
- log("Failed to get update information from URL %s: %s" % (url, e))
- errorMessage = "Error getting update information"
- return updateInfoDom, errorMessage
-
- updateInfoDom = Protocol.XDOM()
- if not updateInfoDom.parseString(updateInfoString):
- log("XML parse error on update information content [%s]" % updateInfoString)
- errorMessage = "Parse error on update information"
- updateInfoDom = None
- return updateInfoDom, errorMessage
-
-
-def removeFile(fileName, root=False):
- if root:
- if runCommand("rm %s" % fileName, root=True) == 0:
- return True
- return False
- try:
- os.remove(fileName)
- return True
- except OSError, e:
- log("Failed to remove file %s: %s" % (fileName, e))
- return False
-
-
-def isLiveMode():
- return os.path.exists(Globals.LIVE_MODE_FILE)
-
-def convertKbToMb(kb):
- return kb / 1024.0
-
-
-def getIPIndex(indexFile):
- try:
- fp = open(indexFile)
- line = fp.readline()
- fp.close()
- index = int(line)
- except IOError:
- index = 0
- except ValueError:
- index = False
- return index
-
-def setIPIndex(index, indexFile):
- try:
- fp = open(indexFile, "w")
- fp.write(str(index))
- fp.close()
- except IOError:
- return False
- return True
-
-def IP2Number(ipString):
- try:
- return socket.htonl(struct.unpack("I", socket.inet_aton(ipString))[0])
- except socket.error:
- return None
- except TypeError:
- return None
- except struct.error:
- return None
-
-def Number2IP(number):
- try:
- return socket.inet_ntoa(struct.pack("I", socket.ntohl(number)))
- except socket.error:
- return None
- except AttributeError:
- return None
- except ValueError:
- return None
-
-def hasEntryFoundInFile(searchString, dnsEntryFileName):
- try:
- addServerEntryList = open(dnsEntryFileName).read().split()
- except IOError:
- return None
- if searchString in addServerEntryList:
- return True
- return False
-
-
-def computeIpAddress(ipAddress, startIp, endIp):
- startIpNumber = IP2Number(startIp)
- endIpNumber = IP2Number(endIp)
- if not ipAddress:
- return startIp
- nextIpNumber = IP2Number(ipAddress)
- while True:
- nextIpNumber = nextIpNumber + 1
- ipAddress = Number2IP(nextIpNumber)
- rv = runCommandFG(["ping", "-qnc", "1", ipAddress])
- if type(rv) == type(True):
- return False
- if rv != 0:
- break
-
- if nextIpNumber >= startIpNumber and nextIpNumber <= endIpNumber:
- return ipAddress
-
- nextIpNumber = IP2Number(startIp)
- while True:
- ipAddress = Number2IP(nextIpNumber)
- nextIpNumber = nextIpNumber + 1
- rv = runCommandFG(["ping", "-qnc", "1", ipAddress])
- if type(rv) == type(True):
- return False
- if rv != 0:
- break
-
- if IP2Number(ipAddress) >= startIpNumber and IP2Number(ipAddress) <= endIpNumber:
- return ipAddress
- return False
-
-
-def setHostNameAndIp(hostName, ipAddress, lastAddServerDetailFile):
- try:
- fp = open(lastAddServerDetailFile, "w")
- fp.write("HOSTNAME=" + hostName + "\n")
- fp.write("IPADDRESS=" + ipAddress);
- fp.close()
- except IOError:
- return False
- return True
-
-def getPort():
- try:
- fd = open(Globals.PORT_FILE, "r")
- portString = fd.readline()
- fd.close()
- port = int(portString)
- except IOError:
- port = Globals.DEFAULT_PORT - 2
- except ValueError:
- port = Globals.DEFAULT_PORT - 2
- return port
-
-def setPort(port):
- try:
- fd = open(Globals.PORT_FILE, "w")
- fd.write(str(port))
- fd.close()
- except IOError:
- return False
- return True
-
-def getServerAgentCredentials():
- try:
- lines = open(Globals.SERVERAGENT_AUTH_FILE).readlines()
- except IOError:
- return None,None
-
- userName = None
- password = None
-
- for l in lines:
- if l[-1] == '\n':
- l = l[:-1]
- k = l[:l.index('=')]
- v = l[l.index('=') + 1:]
- if v[0] == "'" or v[0] == '"':
- v = v[1:]
- if v[-1] == "'" or v[-1] == '"':
- v = v[:-1]
- if k.upper() == "AGENT_ID":
- userName = v
- if k.upper() == "AGENT_PASSWORD":
- password = v
-
- return userName, password
-
-def getGatewayAgentCredentials():
- try:
- lines = open(Globals.GATEWAYAGENT_AUTH_FILE).readlines()
- except IOError:
- return None
-
- #userName = None
- password = None
-
- for l in lines:
- if l[-1] == '\n':
- l = l[:-1]
- k = l[:l.index('=')]
- v = l[l.index('=') + 1:]
- if v[0] == "'" or v[0] == '"':
- v = v[1:]
- if v[-1] == "'" or v[-1] == '"':
- v = v[:-1]
- #if k.upper() == "AGENT_ID":
- # userName = v
- if k.upper() == "AGENT_PASSWORD":
- password = v
-
- return password
-
-def getWebAgentCredentials():
- try:
- lines = open(Globals.WEBAGENT_AUTH_FILE).readlines()
- except IOError:
- return None,None
-
- userName = None
- password = None
-
- for l in lines:
- if l[-1] == '\n':
- l = l[:-1]
- k = l[:l.index('=')]
- v = l[l.index('=') + 1:]
- if v[0] == "'" or v[0] == '"':
- v = v[1:]
- if v[-1] == "'" or v[-1] == '"':
- v = v[:-1]
- if k.upper() == "AGENT_ID":
- userName = v
- if k.upper() == "AGENT_PASSWORD":
- password = v
-
- return userName, password
-
-def daemonize():
- try:
- pid = os.fork()
- if pid > 0:
- # exit first parent
- sys.exit(0)
- except OSError, e:
- #sys.stderr.write("fork #1 failed: %d (%s)\n" % (e.errno, e.strerror))
- return False
-
- # decouple from parent environment
- os.chdir("/")
- os.setsid()
- os.umask(0)
-
- # do second fork
- try:
- pid = os.fork()
- if pid > 0:
- # exit from second parent
- sys.exit(0)
- except OSError, e:
- #sys.stderr.write("fork #2 failed: %d (%s)\n" % (e.errno, e.strerror))
- return False
-
- # redirect standard file descriptors
- sys.stdout.flush()
- sys.stderr.flush()
- si = file("/dev/null", 'r')
- so = file("/dev/null", 'a+')
- se = file("/dev/null", 'a+', 0)
- os.dup2(si.fileno(), sys.stdin.fileno())
- os.dup2(so.fileno(), sys.stdout.fileno())
- os.dup2(se.fileno(), sys.stderr.fileno())
- return True
-
-def getFreeIpAddress():
- startRange, endRange = getStoragePoolInfo()
- if not (startRange and endRange):
- return None
-
- startIpNumber = IP2Number(startRange)
- endIpNumber = IP2Number(endRange)
-
- for ipNumber in range(endIpNumber, startIpNumber, -1):
- rv = runCommandFG(["ping", "-qnc", "1", Number2IP(ipNumber)])
- if type(rv) == type(True):
- return None
- if rv != 0:
- return Number2IP(ipNumber)
- return None
-
-def getDhcpServerStatus():
- status = runCommandFG(["sudo", "service", "dnsmasq", " status"])
- if type(status) == type(True) or 0 != status:
- return False
- return True
-
-def startDhcpServer():
- status = runCommandFG(["sudo", "service", "dnsmasq", " start"])
- if type(status) == type(True) or 0 != status:
- return False
- return True
-
-def stopDhcpServer():
- status = runCommandFG(["sudo", "service", "dnsmasq", " stop"])
- if type(status) == type(True) or 0 != status:
- return False
- return True
-
-def getStoragePoolInfo():
- startRange = None
- endRange = None
- try:
- for line in open(Globals.GLUSTER_SERVER_POOL_FILE):
- tokens = line.split("=")
- if tokens[0] == "STARTRANGE":
- startRange = tokens[1].strip()
- if tokens[0] == "ENDRANGE":
- endRange = tokens[1].strip()
- except IOError:
- log(syslog.LOG_ERR, "unable to read %s file" % Globals.GLUSTER_SERVER_POOL_FILE)
- return startRange, endRange
-
-def configureDnsmasq(serverIpAddress, dhcpIpAddress):
- dnsmasqConfFile = Globals.GLUSTER_CONF_CONF_DIR + "/dnsmasq.conf"
- serverPortString = "68"
- try:
- for arg in open("/proc/cmdline").read().strip().split():
- token = arg.split("=")
- if token[0] == "dhcp":
- serverPortString = token[1]
- break
- except IOError:
- log(syslog.LOG_ERR, "Failed to read /proc/cmdline. Continuing with default port 68")
- try:
- serverPort = int(serverPortString)
- except ValueError:
- log(syslog.LOG_ERR, "Invalid dhcp port '%s' in /proc/cmdline. Continuing with default port 68" % serverPortString)
- serverPort = 68
-
- try:
- fp = open(dnsmasqConfFile, "w")
- fp.write("no-hosts\n")
- #fp.write("addn-hosts=%s\n" % Globals.GLUSTER_DNS_ENTRIES)
- fp.write("bind-interfaces\n")
- fp.write("except-interface=lo\n")
- fp.write("dhcp-range=%s,%s\n" % (dhcpIpAddress, dhcpIpAddress))
- fp.write("dhcp-lease-max=1\n")
- #fp.write("dhcp-option=option:router,%s\n" % serverIp)
- #fp.write("dhcp-option=option:ntp-server,%s\n" % serverIp)
- fp.write("dhcp-alternate-port=%s\n" % serverPort)
- fp.write("server=%s\n" % serverIpAddress)
- fp.write("dhcp-script=/usr/sbin/server-info\n")
- fp.close()
- except IOError:
- log(syslog.LOG_ERR, "unable to write dnsmasq configuration %s" % dnsmasqConfFile)
- return False
- status = runCommandFG(["sudo", "cp", "-f", Globals.GLUSTER_CONF_CONF_DIR + "/dnsmasq.conf", Globals.DNSMASQ_CONF_FILE])
- if type(status) == type(True) or 0 != status:
- log(syslog.LOG_ERR, "unable to copy dnsmasq configuration to " + Globals.DNSMASQ_CONF_FILE)
- return False
- return True
-
-def configureDhcpServer(serverIpAddress, dhcpIpAddress):
- return configureDnsmasq(serverIpAddress, dhcpIpAddress)
-
-def log(priority, message=None):
- if type(priority) == type(""):
- logPriority = syslog.LOG_INFO
- logMessage = priority
- else:
- logPriority = priority
- logMessage = message
- if not logMessage:
- return
- #if Globals.DEBUG:
- # sys.stderr.write(logMessage)
- else:
- syslog.syslog(logPriority, logMessage)
- return
-
-
-def stripEmptyLines(content):
- ret = ""
- for line in content.split("\n"):
- if line.strip() != "":
- ret += line
- return ret
-
-
-def getDeviceFormatStatusFile(device):
- return "/var/tmp/format_%s.status" % device.replace('/', '_')
-
-def getDeviceFormatLockFile(device):
- return "/var/lock/format_%s.lock" % device.replace('/', '_')
-
-def getDeviceFormatOutputFile(device):
- return "/var/tmp/format_%s.out" % device.replace('/', '_')
diff --git a/src/com.gluster.storage.management.gateway/WebContent/scripts/add_user_cifs_all.py b/src/com.gluster.storage.management.gateway/WebContent/scripts/add_user_cifs_all.py
deleted file mode 100755
index e4b48658..00000000
--- a/src/com.gluster.storage.management.gateway/WebContent/scripts/add_user_cifs_all.py
+++ /dev/null
@@ -1,66 +0,0 @@
-#!/usr/bin/python
-# Copyright (C) 2011 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Management Gateway.
-#
-
-import os
-import sys
-import Utils
-
-
-defaultUid = 1024000
-cifsUserFile = "/etc/glustermg/.users.cifs"
-
-
-def getLastUid():
- if not os.path.exists(cifsUserFile):
- return defaultUid
- try:
- fp = open(cifsUserFile)
- content = fp.read()
- fp.close()
- except IOError, e:
- Utils.log("failed to read file %s: %s" % (cifsUserFile, str(e)))
- return False
-
- lines = content.strip().split()
- if not lines:
- return defaultUid
- return int(lines[-1].split(":")[0])
-
-
-def setUid(uid, userName):
- try:
- fp = open(cifsUserFile, "a")
- fp.write("%s:%s\n" % (uid, userName))
- fp.close()
- return True
- except IOError, e:
- Utils.log("failed to write file %s: %s" % (cifsUserFile, str(e)))
- return False
-
-
-def main():
- if len(sys.argv) < 4:
- sys.stderr.write("usage: %s SERVER_FILE USERNAME PASSWORD\n" % os.path.basename(sys.argv[0]))
- sys.exit(-1)
-
- serverFile = sys.argv[1]
- userName = sys.argv[2]
- password = sys.argv[3]
-
- uid = getLastUid()
- if not uid:
- sys.exit(10)
-
- uid += 1
-
- rv = Utils.runCommand("grun.py %s add_user_cifs.py %s %s %s" % (serverFile, uid, userName, password))
- if rv == 0:
- if not setUid(uid, userName):
- sys.exit(11)
- sys.exit(rv)
-
-
-if __name__ == "__main__":
- main()
diff --git a/src/com.gluster.storage.management.gateway/WebContent/scripts/delete_user_cifs_all.py b/src/com.gluster.storage.management.gateway/WebContent/scripts/delete_user_cifs_all.py
deleted file mode 100755
index 38dd8109..00000000
--- a/src/com.gluster.storage.management.gateway/WebContent/scripts/delete_user_cifs_all.py
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/usr/bin/python
-# Copyright (C) 2011 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Management Gateway.
-#
-
-import os
-import sys
-import Utils
-
-
-cifsUserFile = "/etc/glustermg/.users.cifs"
-
-
-def removeUser(userName):
- try:
- fp = open(cifsUserFile)
- content = fp.read()
- fp.close()
- except IOError, e:
- Utils.log("failed to read file %s: %s" % (cifsUserFile, str(e)))
- return False
-
- try:
- fp = open(cifsUserFile, "w")
- lines = content.strip().split()
- for line in lines:
- if line.split(":")[1] == userName:
- continue
- fp.write("%s\n" % line)
- fp.close()
- except IOError, e:
- Utils.log("failed to write file %s: %s" % (cifsUserFile, str(e)))
- return False
- return True
-
-
-def main():
- if len(sys.argv) < 3:
- sys.stderr.write("usage: %s SERVER_LIST USERNAME\n" % os.path.basename(sys.argv[0]))
- sys.exit(-1)
-
- serverList = sys.argv[1]
- userName = sys.argv[2]
-
- rv = Utils.runCommand("grun.py %s delete_user_cifs.py %s" % (serverList, userName))
- if rv == 0:
- if not removeUser(userName):
- sys.exit(10)
- sys.exit(rv)
-
-
-if __name__ == "__main__":
- main()
diff --git a/src/com.gluster.storage.management.gateway/WebContent/scripts/gmg-reset-password.sh b/src/com.gluster.storage.management.gateway/WebContent/scripts/gmg-reset-password.sh
deleted file mode 100644
index 4edf0ffd..00000000
--- a/src/com.gluster.storage.management.gateway/WebContent/scripts/gmg-reset-password.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#-----------------------------------------------------------------------------------
-# gmg-reset-password.sh - script to reset password of given user to default password
-#-----------------------------------------------------------------------------------
-
-USAGE_ERR=1
-
-if [ $# -ne 1 ]; then
- echo "Usage: ${0} <username>"
- echo
- exit ${USAGE_ERR}
-fi
-
-# Main action body
-cd ..
-for FILE in WEB-INF/lib/*.jar
-do
- export CLASSPATH=${CLASSPATH}:${PWD}/${FILE}
-done
-export CLASSPATH=${PWD}/WEB-INF/classes:${CLASSPATH}
-cd -
-java com.gluster.storage.management.gateway.utils.PasswordManager reset ${1}
diff --git a/src/com.gluster.storage.management.gateway/WebContent/scripts/grun.py b/src/com.gluster.storage.management.gateway/WebContent/scripts/grun.py
deleted file mode 100755
index ae93b7f2..00000000
--- a/src/com.gluster.storage.management.gateway/WebContent/scripts/grun.py
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/usr/bin/python
-# Copyright (C) 2011 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Management Gateway.
-#
-
-import os
-import sys
-import Utils
-
-
-def main():
- sshCommandPrefix = "ssh -q -o BatchMode=yes -o GSSAPIAuthentication=no -o PasswordAuthentication=no -o StrictHostKeyChecking=no".split()
-
- if len(sys.argv) < 3:
- sys.stderr.write("usage: %s SERVER_FILE COMMAND [ARGUMENTS]\n" % os.path.basename(sys.argv[0]))
- sys.exit(-1)
- serverFile = sys.argv[1]
- command = sys.argv[2:]
-
- try:
- fp = open(serverFile)
- serverNameList = fp.readlines()
- fp.close()
- except IOError, e:
- Utils.log("Failed to read server file %s: %s\n" % (serverFile, str(e)))
- sys.exit(1)
-
- for serverName in serverNameList:
- rv = Utils.runCommand(sshCommandPrefix + [serverName.strip()] + command)
- print rv
-
- sys.exit(0)
-
-
-if __name__ == "__main__":
- main()
diff --git a/src/com.gluster.storage.management.gateway/WebContent/scripts/multicast-discover-servers.py b/src/com.gluster.storage.management.gateway/WebContent/scripts/multicast-discover-servers.py
deleted file mode 100755
index ac434827..00000000
--- a/src/com.gluster.storage.management.gateway/WebContent/scripts/multicast-discover-servers.py
+++ /dev/null
@@ -1,90 +0,0 @@
-#!/usr/bin/python
-# Copyright (C) 2009 Gluster, Inc. <http://www.gluster.com>
-# This file is part of Gluster Storage Platform.
-#
-# Gluster Storage Platform is free software; you can redistribute it
-# and/or modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 3 of
-# the License, or (at your option) any later version.
-#
-# Gluster Storage Platform 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 General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/>.
-
-import sys
-import socket
-import signal
-import struct
-import syslog
-import Globals
-import time
-import Utils
-from XmlHandler import *
-
-class TimeoutException(Exception):
- pass
-
-def timeoutSignal(signum, frame):
- raise TimeoutException, "Timed out"
-
-def serverDiscoveryRequest(multiCastGroup, port):
- servers = []
- # Sending request to all the servers
- socketSend = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
- socketSend.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2)
- socketSend.sendto("ServerDiscovery", (multiCastGroup, port))
-
- # Waiting for the response
- socketReceive = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
- socketReceive.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
- socketReceive.bind(('', port))
- mreq = struct.pack("4sl", socket.inet_aton(multiCastGroup), socket.INADDR_ANY)
-
- socketReceive.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
- sendtime = time.time()
- socketSend.sendto("<request><name>ServerDiscovery</name><time>%s</time></request>" % (sendtime), (multiCastGroup, port))
-
- try:
- while True:
- response = socketReceive.recvfrom(200)
- if not response:
- continue
- dom = XDOM()
- dom.parseString(response[0])
- if not dom:
- continue
- if dom.getTextByTagRoute("request.name"):
- continue
- responsetime = dom.getTextByTagRoute("response.time")
- servername = dom.getTextByTagRoute("response.servername")
- if responsetime == str(sendtime):
- servers.append(servername)
- signal.signal(signal.SIGALRM, timeoutSignal)
- signal.alarm(3)
- except TimeoutException:
- return servers
- return None
-
-def main():
- syslog.openlog("discovery server request")
- servers = serverDiscoveryRequest(Globals.MULTICAST_GROUP, Globals.MULTICAST_PORT)
- if not servers:
- Utils.log(syslog.LOG_ERR, "Failed to discover new servers")
- sys.exit(-1)
-
- servers = set(servers)
- try:
- for server in servers:
- print server
- except IOError:
- Utils.log(syslog.LOG_ERR, "Unable to open file %s" % Globals.DISCOVERED_SERVER_LIST_FILENAME)
- sys.exit(-1)
- sys.exit(0)
-
-if __name__ == "__main__":
- main()
diff --git a/src/com.gluster.storage.management.gateway/src/META-INF/persistence.xml b/src/com.gluster.storage.management.gateway/src/META-INF/persistence.xml
deleted file mode 100644
index 36b252ea..00000000
--- a/src/com.gluster.storage.management.gateway/src/META-INF/persistence.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
- <persistence-unit name="gluster-management-gateway" transaction-type="RESOURCE_LOCAL" />
-</persistence> \ No newline at end of file
diff --git a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/constants/VolumeOptionsDefaults.java b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/constants/VolumeOptionsDefaults.java
deleted file mode 100644
index 1f577c89..00000000
--- a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/constants/VolumeOptionsDefaults.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/**
- * DefaultVolumeOptions.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.gateway.constants;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.springframework.stereotype.Component;
-
-import com.gluster.storage.management.core.constants.CoreConstants;
-import com.gluster.storage.management.core.model.VolumeOptionInfo;
-
-@Component
-public class VolumeOptionsDefaults {
- public List<VolumeOptionInfo> options;
-
- public VolumeOptionsDefaults() {
- }
-
- /**
- * @return list of volume option information objects
- */
- public List<VolumeOptionInfo> getDefaults() {
- return getVolumeOptionsInfo();
- }
-
- /**
- * Fetches the list of all volume options with their information from GlusterFS and returns the same
- *
- * @return List of volume option information objects
- */
- private List<VolumeOptionInfo> getVolumeOptionsInfo() {
- List<VolumeOptionInfo> volumeOptionsInfo = new ArrayList<VolumeOptionInfo>();
-
- volumeOptionsInfo
- .add(new VolumeOptionInfo(
- "cluster.stripe-block-size",
- "This could be used in case of a stripe setup. Specifies the size of the stripe unit that will read from or written to the striped servers. "
- + CoreConstants.NEWLINE
- + "Optionally different stripe unit sizes can be specified for different fies, with the following pattern <filename-pattern:blk-size>. ",
- "*:128KB"));
- volumeOptionsInfo
- .add(new VolumeOptionInfo(
- "cluster.self-heal-window-size",
- "Specifies the number of maximum number blocks per file for which self-heal process would be applied simultaneously.",
- "16"));
- volumeOptionsInfo.add(new VolumeOptionInfo("cluster.data-self-heal-algorithm",
- "cluster.data-self-heal-algorithm", "auto"));
- volumeOptionsInfo
- .add(new VolumeOptionInfo(
- "network.frame-timeout",
- "The time frame after which the operation has to be declared as dead, if the server does not respond for a particular operation.",
- "1800"));
- volumeOptionsInfo.add(new VolumeOptionInfo("network.ping-timeout",
- "The time duration for which the client waits to check if the server is responsive.", "42"));
- volumeOptionsInfo.add(new VolumeOptionInfo("auth.allow",
- "'IP addresses/Host name' of the clients which should be allowed to access the the volume.", "*"));
- volumeOptionsInfo.add(new VolumeOptionInfo("auth.reject",
- "'IP addresses/Host name' of the clients which should be denied to access the volume.", "NONE"));
- volumeOptionsInfo
- .add(new VolumeOptionInfo(
- "performance.cache-refresh-timeout",
- "The cached data for a file will be retained till 'cache-refresh-timeout' seconds, after which data re-validation is performed.",
- "1"));
- volumeOptionsInfo.add(new VolumeOptionInfo("performance.cache-size", "Size of the read cache.", "32MB"));
- volumeOptionsInfo.add(new VolumeOptionInfo("performance.write-behind-window-size",
- "Size of the per-file write-behind buffer.", "1MB"));
- volumeOptionsInfo.add(new VolumeOptionInfo("performance.cache-max-file-size",
- "performance.cache-max-file-size", "-1"));
- volumeOptionsInfo.add(new VolumeOptionInfo("performance.cache-min-file-size",
- "performance.cache-min-file-size", "0"));
- volumeOptionsInfo
- .add(new VolumeOptionInfo(
- "performance.io-thread-count",
- " Number of threads in the thread-pool in the bricks to improve the concurrency in I/O s of server side.",
- "16"));
- volumeOptionsInfo
- .add(new VolumeOptionInfo(
- "diagnostics.latency-measurement",
- "Statistics related to the latency of each operation would be tracked inside GlusterFS data-structures.",
- "off"));
- volumeOptionsInfo.add(new VolumeOptionInfo("diagnostics.dump-fd-stats",
- "Statistics related to file-operations would be tracked inside GlusterFS data-structures.", "off"));
- volumeOptionsInfo.add(new VolumeOptionInfo("diagnostics.brick-log-level",
- "Changes the log-level of the bricks (servers).", "INFO"));
- volumeOptionsInfo.add(new VolumeOptionInfo("diagnostics.client-log-level",
- "Changes the log-level of the clients.", "INFO"));
- volumeOptionsInfo.add(new VolumeOptionInfo("nfs.enable-ino32",
- "Use this option from the CLI to make Gluster NFS return 32-bit inode numbers instead of 64-bit.",
- "off"));
- volumeOptionsInfo
- .add(new VolumeOptionInfo(
- "nfs.mem-factor",
- "This option specifies a multiple that determines the total amount of memory used. Increases this increases the performance of NFS.",
- "15"));
- volumeOptionsInfo.add(new VolumeOptionInfo("transport.keepalive", "transport.keepalive", "on"));
-
- return volumeOptionsInfo;
- }
-} \ No newline at end of file
diff --git a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/data/GlusterDataSource.java b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/data/GlusterDataSource.java
deleted file mode 100644
index 0802fe93..00000000
--- a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/data/GlusterDataSource.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * GlusterDataSource.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.gateway.data;
-
-import javax.servlet.ServletContext;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.jdbc.datasource.DriverManagerDataSource;
-import org.springframework.stereotype.Component;
-
-@Component
-public class GlusterDataSource extends DriverManagerDataSource {
- @Autowired
- ServletContext servletContext;
-
- public GlusterDataSource() {
- setDriverClassName(org.apache.derby.jdbc.EmbeddedDriver.class.getName());
-
- setUsername("gluster");
- // TODO: change to a stronger (encrypted) password
- setPassword("gluster");
- }
-
- public DriverManagerDataSource getDataSource() {
- // Database directory = work/data relative to context root
- setUrl("jdbc:derby:" + servletContext.getRealPath("data") + ";create=true");
-
- return this;
- }
-} \ No newline at end of file
diff --git a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/filters/AuditFilter.java b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/filters/AuditFilter.java
deleted file mode 100644
index 705bab79..00000000
--- a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/filters/AuditFilter.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- *
- */
-package com.gluster.storage.management.gateway.filters;
-
-import java.util.Date;
-
-import org.apache.log4j.Logger;
-
-import com.sun.jersey.spi.container.ContainerRequest;
-import com.sun.jersey.spi.container.ContainerRequestFilter;
-import com.sun.jersey.spi.container.ContainerResponse;
-import com.sun.jersey.spi.container.ContainerResponseFilter;
-import com.sun.jersey.spi.container.ResourceFilter;
-
-/**
- * Resource filter for maintaining audit trail of resource access
- */
-public class AuditFilter implements ResourceFilter, ContainerRequestFilter, ContainerResponseFilter {
- private static final Logger logger = Logger.getLogger(AuditFilter.class);
-
- @Override
- public ContainerRequestFilter getRequestFilter() {
- return this;
- }
-
- @Override
- public ContainerResponseFilter getResponseFilter() {
- return this;
- }
-
- @Override
- public ContainerRequest filter(ContainerRequest req) {
- logger.info("REQUEST: [" + req.getMethod() + "][" + req.getPath() + "]");
- return req;
- }
-
- @Override
- public ContainerResponse filter(ContainerRequest req, ContainerResponse response) {
- logger.info("RESPONSE: [" + req.getMethod() + "][" + req.getPath() + "]");
- return response;
- }
-}
diff --git a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/filters/GlusterResourceFilterFactory.java b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/filters/GlusterResourceFilterFactory.java
deleted file mode 100644
index 1c480f3f..00000000
--- a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/filters/GlusterResourceFilterFactory.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- *
- */
-package com.gluster.storage.management.gateway.filters;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.sun.jersey.api.model.AbstractMethod;
-import com.sun.jersey.spi.container.ResourceFilter;
-import com.sun.jersey.spi.container.ResourceFilterFactory;
-
-/**
- * Gluster resource filter factory. As of now, this creates only one filter - the audit filter {@code AuditFilter}
- */
-public class GlusterResourceFilterFactory implements ResourceFilterFactory {
-
- public GlusterResourceFilterFactory() {
- }
-
- /* (non-Javadoc)
- * @see com.sun.jersey.spi.container.ResourceFilterFactory#create(com.sun.jersey.api.model.AbstractMethod)
- */
- @Override
- public List<ResourceFilter> create(AbstractMethod arg0) {
- List<ResourceFilter> filters = new ArrayList<ResourceFilter>();
- filters.add(new AuditFilter());
-
- return filters;
- }
-}
diff --git a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/resources/v1_0/DiscoveredServersResource.java b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/resources/v1_0/DiscoveredServersResource.java
deleted file mode 100644
index 5a038670..00000000
--- a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/resources/v1_0/DiscoveredServersResource.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*******************************************************************************
- * 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.gateway.resources.v1_0;
-
-import static com.gluster.storage.management.core.constants.RESTConstants.PATH_PARAM_SERVER_NAME;
-import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_DETAILS;
-import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_PATH_DISCOVERED_SERVERS;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.QueryParam;
-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.model.Server;
-import com.gluster.storage.management.core.response.ServerListResponse;
-import com.gluster.storage.management.core.response.ServerNameListResponse;
-import com.gluster.storage.management.gateway.utils.GlusterUtil;
-import com.gluster.storage.management.gateway.utils.ServerUtil;
-import com.sun.jersey.api.core.InjectParam;
-import com.sun.jersey.spi.resource.Singleton;
-
-@Component
-@Singleton
-@Path(RESOURCE_PATH_DISCOVERED_SERVERS)
-public class DiscoveredServersResource extends AbstractResource {
- @InjectParam
- protected ServerUtil serverUtil;
-
- @InjectParam
- protected GlusterUtil glusterUtil;
-
- private List<String> discoveredServerNames = new ArrayList<String>();
-
- private static final Logger logger = Logger.getLogger(DiscoveredServersResource.class);
-
- public List<String> getDiscoveredServerNames() {
- return discoveredServerNames;
- }
-
- public void setDiscoveredServerNames(List<String> discoveredServerNames) {
- synchronized (discoveredServerNames) {
- this.discoveredServerNames = discoveredServerNames;
- }
- }
-
- public void removeDiscoveredServer(String serverName) {
- discoveredServerNames.remove(serverName);
- }
-
- public void addDiscoveredServer(String serverName) {
- discoveredServerNames.add(serverName);
- }
-
- @GET
- @Produces(MediaType.APPLICATION_XML)
- public Response getDiscoveredServersXML(@QueryParam(QUERY_PARAM_DETAILS) Boolean details) {
- return getDiscoveredServersResponse(details, MediaType.APPLICATION_XML);
- }
-
- @GET
- @Produces(MediaType.APPLICATION_JSON)
- public Response getDiscoveredServersJSON(@QueryParam(QUERY_PARAM_DETAILS) Boolean details) {
- return getDiscoveredServersResponse(details, MediaType.APPLICATION_JSON);
- }
-
- private Response getDiscoveredServersResponse(Boolean details, String mediaType) {
- if(details != null && details == true) {
- try {
- List<Server> discoveredServers = getDiscoveredServerDetails();
- return okResponse(new ServerListResponse(discoveredServers), mediaType);
- } catch(Exception e) {
- return errorResponse(e.getMessage());
- }
- } else {
- return okResponse(new ServerNameListResponse(getDiscoveredServerNames()), mediaType);
- }
- }
-
- private List<Server> getDiscoveredServerDetails() {
- List<Server> discoveredServers = new ArrayList<Server>();
- for (String serverName : getDiscoveredServerNames()) {
- try {
- discoveredServers.add(getDiscoveredServer(serverName));
- } catch(Exception e) {
- logger.warn("Could not fetch details of discovered server [ " + serverName + "]", e);
- // continue with next discovered server
- }
- }
- return discoveredServers;
- }
-
- @Path("{" + PATH_PARAM_SERVER_NAME + "}")
- @GET
- @Produces(MediaType.APPLICATION_XML)
- public Response getDiscoveredServerXML(@PathParam(PATH_PARAM_SERVER_NAME) String serverName) {
- return getDiscoveredServerResponse(serverName, MediaType.APPLICATION_XML);
- }
-
- @Path("{" + PATH_PARAM_SERVER_NAME + "}")
- @GET
- @Produces(MediaType.APPLICATION_JSON)
- public Response getDiscoveredServerJSON(@PathParam(PATH_PARAM_SERVER_NAME) String serverName) {
- return getDiscoveredServerResponse(serverName, MediaType.APPLICATION_JSON);
- }
-
- private Response getDiscoveredServerResponse(String serverName, String mediaType) {
- if(serverName == null || serverName.isEmpty()) {
- return badRequestResponse("Server name must not be empty!");
- }
- try {
- return okResponse(getDiscoveredServer(serverName), mediaType);
- } catch (Exception e) {
- // TODO: Log the exception
- return errorResponse(e.getMessage());
- }
- }
-
- private Server getDiscoveredServer(String serverName) {
- Server server = new Server(serverName);
- serverUtil.fetchServerDetails(server);
- return server;
- }
-
- public static void main(String[] args) {
- Response response = (Response)new DiscoveredServersResource().getDiscoveredServersXML(false);
- System.out.println(response.getEntity());
- }
-}
diff --git a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/resources/v1_0/TasksResource.java b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/resources/v1_0/TasksResource.java
deleted file mode 100644
index e5874f4b..00000000
--- a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/resources/v1_0/TasksResource.java
+++ /dev/null
@@ -1,194 +0,0 @@
-/**
- * TaskResource.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.gateway.resources.v1_0;
-
-import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_OPERATION;
-import static com.gluster.storage.management.core.constants.RESTConstants.PATH_PARAM_CLUSTER_NAME;
-import static com.gluster.storage.management.core.constants.RESTConstants.PATH_PARAM_TASK_ID;
-import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_PATH_CLUSTERS;
-import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_TASKS;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.ws.rs.DELETE;
-import javax.ws.rs.FormParam;
-import javax.ws.rs.GET;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.QueryParam;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
-import org.springframework.stereotype.Component;
-
-import com.gluster.storage.management.core.constants.RESTConstants;
-import com.gluster.storage.management.core.exceptions.GlusterRuntimeException;
-import com.gluster.storage.management.core.exceptions.GlusterValidationException;
-import com.gluster.storage.management.core.model.Status;
-import com.gluster.storage.management.core.model.TaskInfo;
-import com.gluster.storage.management.core.response.TaskInfoListResponse;
-import com.gluster.storage.management.gateway.tasks.Task;
-import com.sun.jersey.spi.resource.Singleton;
-
-@Path(RESOURCE_PATH_CLUSTERS + "/{" + PATH_PARAM_CLUSTER_NAME + "}/" + RESOURCE_TASKS)
-@Singleton
-@Component
-public class TasksResource extends AbstractResource {
- private Map<String, Task> tasksMap = new HashMap<String, Task>();
-
- public TasksResource() {
- }
-
- public void addTask(Task task) {
- tasksMap.put(task.getId(), task);
- }
-
- public void removeTask(Task task) {
- tasksMap.remove(task.getId());
- }
-
- public List<TaskInfo> getAllTasksInfo() {
- List<TaskInfo> allTasksInfo = new ArrayList<TaskInfo>();
- for (Map.Entry<String, Task> entry : tasksMap.entrySet()) {
- checkTaskStatus(entry.getKey());
- allTasksInfo.add(entry.getValue().getTaskInfo()); // TaskInfo with latest status
- }
- return allTasksInfo;
- }
-
- public Task getTask(String taskId) {
- for (Map.Entry<String, Task> entry : tasksMap.entrySet()) {
- if (entry.getValue().getId().equals(taskId)) {
- return entry.getValue();
- }
- }
- return null;
- }
-
- public List<Task> getAllTasks() {
- List<Task> tasks = new ArrayList<Task>();
- for (Map.Entry<String, Task> entry : tasksMap.entrySet()) {
- checkTaskStatus(entry.getKey());
- tasks.add( (Task) entry.getValue());
- }
- return tasks;
- }
-
- @GET
- @Produces(MediaType.APPLICATION_XML)
- public Response getTasks() {
- try {
- return okResponse(new TaskInfoListResponse(getAllTasksInfo()), MediaType.APPLICATION_XML);
- } catch (GlusterRuntimeException e) {
- return errorResponse(e.getMessage());
- }
- }
-
- @GET
- @Path("/{" + PATH_PARAM_TASK_ID + "}")
- @Produces(MediaType.APPLICATION_XML)
- public Response getTaskStatus( @PathParam(PATH_PARAM_TASK_ID) String taskId) {
- try {
- Task task = checkTaskStatus(taskId);
- return okResponse(task.getTaskInfo(), MediaType.APPLICATION_XML);
- } catch (GlusterRuntimeException e) {
- return errorResponse(e.getMessage());
- }
- }
-
- private Task checkTaskStatus(String taskId) {
- Task task = getTask(taskId);
- // No status check required if the task already complete or failure
- if (task.getTaskInfo().getStatus().getCode() == Status.STATUS_CODE_FAILURE
- || task.getTaskInfo().getStatus().getCode() == Status.STATUS_CODE_SUCCESS) {
- return task;
- }
- task.getTaskInfo().setStatus(task.checkStatus());
- return task;
- }
-
- @PUT
- @Path("/{" + PATH_PARAM_TASK_ID + "}")
- @Produces(MediaType.APPLICATION_XML)
- public Response performTask(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName,
- @PathParam(PATH_PARAM_TASK_ID) String taskId, @FormParam(FORM_PARAM_OPERATION) String taskOperation) {
- Task task = getTask(taskId);
-
- try {
- if (taskOperation.equals(RESTConstants.TASK_RESUME)) {
- task.resume();
- } else if (taskOperation.equals(RESTConstants.TASK_PAUSE)) {
- task.pause();
- } else if (taskOperation.equals(RESTConstants.TASK_STOP)) {
- // task.stop();
- clearTask(taskId, taskOperation); // Stop and remove from the task list
- } else if (taskOperation.equals(RESTConstants.TASK_COMMIT)) {
- task.commit();
- }
- return (Response) noContentResponse();
- } catch(GlusterValidationException ve) {
- return badRequestResponse(ve.getMessage());
- } catch (GlusterRuntimeException e) {
- return errorResponse(e.getMessage());
- }
- }
-
- @DELETE
- @Path("/{" + PATH_PARAM_TASK_ID + "}")
- @Produces(MediaType.APPLICATION_XML)
- public Response clearTask(@PathParam(PATH_PARAM_TASK_ID) String taskId,
- @QueryParam(FORM_PARAM_OPERATION) String taskOperation) {
- Task task = getTask(taskId);
- if (task == null) {
- return notFoundResponse("Task [" + taskId + "] not found!");
- }
-
- if(taskOperation == null || taskOperation.isEmpty()) {
- return badRequestResponse("Parameter [" + FORM_PARAM_OPERATION + "] is missing in request!");
- }
-
- if(!taskOperation.equals(RESTConstants.TASK_STOP) && !taskOperation.equals(RESTConstants.TASK_DELETE)) {
- return badRequestResponse("Invalid value [" + taskOperation + "] for parameter [" + FORM_PARAM_OPERATION
- + "]");
- }
-
- try {
- if (taskOperation.equals(RESTConstants.TASK_STOP)) {
- task.stop();
- // On successfully stopping the task, we can delete (forget) it as it is no more useful
- taskOperation = RESTConstants.TASK_DELETE;
- }
-
- if (taskOperation.equals(RESTConstants.TASK_DELETE)) {
- removeTask(task);
- }
-
- return noContentResponse();
- } catch (Exception e) {
- return errorResponse(e.getMessage());
- }
- }
-}
diff --git a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/resources/v1_0/VolumesResource.java b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/resources/v1_0/VolumesResource.java
deleted file mode 100644
index 8c22c67b..00000000
--- a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/resources/v1_0/VolumesResource.java
+++ /dev/null
@@ -1,1164 +0,0 @@
-/**
- * VolumesResource.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.gateway.resources.v1_0;
-
-import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_ACCESS_PROTOCOLS;
-import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_AUTO_COMMIT;
-import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_BRICKS;
-import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_CIFS_ENABLE;
-import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_CIFS_USERS;
-import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_FIX_LAYOUT;
-import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_FORCED_DATA_MIGRATE;
-import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_MIGRATE_DATA;
-import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_OPERATION;
-import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_OPTION_KEY;
-import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_OPTION_VALUE;
-import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_REPLICA_COUNT;
-import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_SOURCE;
-import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_STRIPE_COUNT;
-import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_TARGET;
-import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_TRANSPORT_TYPE;
-import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_VOLUME_NAME;
-import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_VOLUME_OPTIONS;
-import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_VOLUME_TYPE;
-import static com.gluster.storage.management.core.constants.RESTConstants.PATH_PARAM_CLUSTER_NAME;
-import static com.gluster.storage.management.core.constants.RESTConstants.PATH_PARAM_VOLUME_NAME;
-import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_BRICKS;
-import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_BRICK_NAME;
-import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_DELETE_OPTION;
-import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_DOWNLOAD;
-import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_FROM_TIMESTAMP;
-import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_LINE_COUNT;
-import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_LOG_SEVERITY;
-import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_TO_TIMESTAMP;
-import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_BRICKS;
-import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_DEFAULT_OPTIONS;
-import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_DOWNLOAD;
-import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_LOGS;
-import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_OPTIONS;
-import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_PATH_CLUSTERS;
-import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_TASKS;
-import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_VOLUMES;
-import static com.gluster.storage.management.core.constants.RESTConstants.TASK_START;
-import static com.gluster.storage.management.core.constants.RESTConstants.TASK_STOP;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.List;
-
-import javax.ws.rs.DELETE;
-import javax.ws.rs.FormParam;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.QueryParam;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
-import org.apache.log4j.Logger;
-
-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.exceptions.GlusterValidationException;
-import com.gluster.storage.management.core.model.Brick;
-import com.gluster.storage.management.core.model.GlusterServer;
-import com.gluster.storage.management.core.model.Status;
-import com.gluster.storage.management.core.model.Volume;
-import com.gluster.storage.management.core.model.Volume.NAS_PROTOCOL;
-import com.gluster.storage.management.core.model.Volume.VOLUME_TYPE;
-import com.gluster.storage.management.core.model.VolumeLogMessage;
-import com.gluster.storage.management.core.response.GenericResponse;
-import com.gluster.storage.management.core.response.LogMessageListResponse;
-import com.gluster.storage.management.core.response.VolumeListResponse;
-import com.gluster.storage.management.core.response.VolumeOptionInfoListResponse;
-import com.gluster.storage.management.core.utils.DateUtil;
-import com.gluster.storage.management.core.utils.FileUtil;
-import com.gluster.storage.management.core.utils.ProcessResult;
-import com.gluster.storage.management.core.utils.ProcessUtil;
-import com.gluster.storage.management.gateway.constants.VolumeOptionsDefaults;
-import com.gluster.storage.management.gateway.data.ClusterInfo;
-import com.gluster.storage.management.gateway.services.ClusterService;
-import com.gluster.storage.management.gateway.tasks.MigrateBrickTask;
-import com.gluster.storage.management.gateway.tasks.RebalanceVolumeTask;
-import com.gluster.storage.management.gateway.utils.GlusterUtil;
-import com.gluster.storage.management.gateway.utils.ServerUtil;
-import com.sun.jersey.api.core.InjectParam;
-import com.sun.jersey.spi.resource.Singleton;
-
-@Singleton
-@Path(RESOURCE_PATH_CLUSTERS + "/{" + PATH_PARAM_CLUSTER_NAME + "}/" + RESOURCE_VOLUMES)
-public class VolumesResource extends AbstractResource {
- private static final String VOLUME_DIRECTORY_CLEANUP_SCRIPT = "clear_volume_directory.py";
-
- private static final String VOLUME_CIFS_GRUN_SCRIPT = "grun.py";
- private static final String VOLUME_CREATE_CIFS_SCRIPT = "create_volume_cifs.py";
- private static final String VOLUME_START_CIFS_SCRIPT = "start_volume_cifs.py";
- private static final String VOLUME_STOP_CIFS_SCRIPT = "stop_volume_cifs.py";
- private static final String VOLUME_DELETE_CIFS_SCRIPT = "delete_volume_cifs.py";
- private static final String VOLUME_MODIFY_CIFS_SCRIPT = "modify_volume_cifs.py";
- private static final String ALL_SERVERS_FILE_NAME = "servers";
-
- private static final String VOLUME_BRICK_LOG_SCRIPT = "get_volume_brick_log.py";
- private static final Logger logger = Logger.getLogger(VolumesResource.class);
-
- @InjectParam
- private ServerUtil serverUtil;
-
- @InjectParam
- private GlusterUtil glusterUtil;
-
- @InjectParam
- private ClusterService clusterService;
-
- @InjectParam
- private VolumeOptionsDefaults volumeOptionsDefaults;
-
- @InjectParam
- private TasksResource taskResource;
-
- private ProcessUtil processUtil = new ProcessUtil();
-
- @GET
- @Produces({MediaType.APPLICATION_XML})
- public Response getVolumesXML(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName) {
- return getVolumes(clusterName, MediaType.APPLICATION_XML);
- }
-
- @GET
- @Produces({MediaType.APPLICATION_JSON})
- public Response getVolumesJSON(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName) {
- return getVolumes(clusterName, MediaType.APPLICATION_JSON);
- }
-
- public Response getVolumes(String clusterName, String mediaType) {
- if (clusterName == null || clusterName.isEmpty()) {
- return badRequestResponse("Cluster name must not be empty!");
- }
-
- ClusterInfo cluster = clusterService.getCluster(clusterName);
- if (cluster == null) {
- return notFoundResponse("Cluster [" + clusterName + "] not found!");
- }
-
- if(cluster.getServers().size() == 0) {
- // no server added yet. return an empty array.
- return okResponse(new VolumeListResponse(), mediaType);
- }
-
- return okResponse(getVolumes(clusterName), mediaType);
- }
-
- public VolumeListResponse getVolumes(String clusterName) {
- GlusterServer onlineServer = clusterService.getOnlineServer(clusterName);
- if (onlineServer == null) {
- return new VolumeListResponse(new ArrayList<Volume>());
- }
-
- try {
- return new VolumeListResponse(glusterUtil.getAllVolumes(onlineServer.getName()));
- } catch (ConnectionException e) {
- // online server has gone offline! try with a different one.
- onlineServer = clusterService.getNewOnlineServer(clusterName);
- if (onlineServer == null) {
- return new VolumeListResponse(new ArrayList<Volume>());
- }
-
- return new VolumeListResponse(glusterUtil.getAllVolumes(onlineServer.getName()));
- }
- }
-
- @POST
- @Produces(MediaType.APPLICATION_XML)
- public Response createVolume(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName, @FormParam(FORM_PARAM_VOLUME_NAME) String volumeName,
- @FormParam(FORM_PARAM_VOLUME_TYPE) String volumeType, @FormParam(FORM_PARAM_TRANSPORT_TYPE) String transportType,
- @FormParam(FORM_PARAM_REPLICA_COUNT) Integer replicaCount, @FormParam(FORM_PARAM_STRIPE_COUNT) Integer stripeCount,
- @FormParam(FORM_PARAM_BRICKS) String bricks, @FormParam(FORM_PARAM_ACCESS_PROTOCOLS) String accessProtocols,
- @FormParam(FORM_PARAM_VOLUME_OPTIONS) String options, @FormParam(FORM_PARAM_CIFS_USERS) String cifsUsers) {
- if(clusterName == null || clusterName.isEmpty()) {
- return badRequestResponse("Cluster name must not be empty!");
- }
-
- String missingParam = checkMissingParamsForCreateVolume(volumeName, volumeType, transportType, replicaCount,
- stripeCount, bricks, accessProtocols, options);
- if (missingParam != null) {
- return badRequestResponse("Parameter [" + missingParam + "] is missing in request!");
- }
-
- if (clusterService.getCluster(clusterName) == null) {
- return notFoundResponse("Cluster [" + clusterName + "] not found!");
- }
-
- if (volumeType.equals(VOLUME_TYPE.DISTRIBUTED_MIRROR) && replicaCount <= 0) {
- return badRequestResponse("Replica count must be a positive integer");
- }
-
- if (volumeType.equals(VOLUME_TYPE.DISTRIBUTED_STRIPE) && stripeCount <= 0) {
- return badRequestResponse("Stripe count must be a positive integer");
- }
-
- try {
- performCreateVolume(clusterName, volumeName, volumeType, transportType, replicaCount, stripeCount, bricks, accessProtocols,
- options, cifsUsers);
- return createdResponse(volumeName);
- } catch (Exception e) {
- return errorResponse(e.getMessage());
- }
- }
-
- public void performCreateVolume(String clusterName, String volumeName, String volumeType, String transportType, Integer replicaCount,
- Integer stripeCount, String bricks, String accessProtocols, String options, String cifsUsers) {
- GlusterServer onlineServer = clusterService.getOnlineServer(clusterName);
- if (onlineServer == null) {
- throw new GlusterRuntimeException("No online servers found in cluster [" + clusterName + "]");
- }
-
- try {
- glusterUtil.createVolume(onlineServer.getName(), volumeName, volumeType, transportType, replicaCount,
- stripeCount, bricks, accessProtocols, options);
- } catch (ConnectionException e) {
- // online server has gone offline! try with a different one.
- onlineServer = clusterService.getNewOnlineServer(clusterName);
- if (onlineServer == null) {
- throw new GlusterRuntimeException("No online servers found in cluster [" + clusterName + "]");
- }
-
- glusterUtil.createVolume(onlineServer.getName(), volumeName, volumeType, transportType, replicaCount,
- stripeCount, bricks, accessProtocols, options);
- }
-
- List<String> nasProtocols = Arrays.asList(accessProtocols.split(","));
- // only if cifs enabled
- if (nasProtocols.contains(NAS_PROTOCOL.CIFS.toString())) {
- try {
- createCIFSUsers(clusterName, volumeName, Arrays.asList(cifsUsers.split(",")));
- } catch (Exception e) {
- throw new GlusterRuntimeException(CoreConstants.NEWLINE + e.getMessage());
- }
- }
- }
-
- /**
- * Returns name of the missing parameter if any. If all parameters are present,
- * @param volumeName
- * @param volumeType
- * @param transportType
- * @param replicaCount
- * @param stripeCount
- * @param bricks
- * @param accessProtocols
- * @param options
- * @return
- */
- private String checkMissingParamsForCreateVolume(String volumeName, String volumeType,
- String transportType, Integer replicaCount, Integer stripeCount, String bricks, String accessProtocols,
- String options) {
-
- return (volumeName == null || volumeName.isEmpty()) ? FORM_PARAM_VOLUME_NAME :
- (volumeType == null || volumeType.isEmpty()) ? FORM_PARAM_VOLUME_TYPE :
- (transportType == null || transportType.isEmpty()) ? FORM_PARAM_TRANSPORT_TYPE :
- (replicaCount == null) ? FORM_PARAM_REPLICA_COUNT :
- (stripeCount == null) ? FORM_PARAM_STRIPE_COUNT :
- (bricks == null || bricks.isEmpty()) ? FORM_PARAM_BRICKS :
- (accessProtocols == null || accessProtocols.isEmpty()) ? FORM_PARAM_ACCESS_PROTOCOLS :
- (options == null || options.isEmpty()) ? FORM_PARAM_VOLUME_OPTIONS :
- null;
- }
-
- @GET
- @Path("{" + PATH_PARAM_VOLUME_NAME + "}")
- @Produces(MediaType.APPLICATION_XML)
- public Response getVolumeXML(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName,
- @PathParam(PATH_PARAM_VOLUME_NAME) String volumeName) {
- return getVolume(clusterName, volumeName, MediaType.APPLICATION_XML);
- }
-
- @GET
- @Path("{" + PATH_PARAM_VOLUME_NAME + "}")
- @Produces(MediaType.APPLICATION_JSON)
- public Response getVolumeJSON(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName,
- @PathParam(PATH_PARAM_VOLUME_NAME) String volumeName) {
- return getVolume(clusterName, volumeName, MediaType.APPLICATION_JSON);
- }
-
- private Response getVolume(String clusterName, String volumeName, String mediaType) {
- Volume volume = null;
-
- if (clusterName == null || clusterName.isEmpty()) {
- return badRequestResponse("Cluster name must not be empty!");
- }
-
- if (clusterService.getCluster(clusterName) == null) {
- return notFoundResponse("Cluster [" + clusterName + "] not found!");
- }
-
- try {
- volume = getVolume(clusterName, volumeName);
- return okResponse(volume, mediaType);
- } catch(Exception e) {
- return errorResponse(e.getMessage());
- }
- }
-
- private Volume getVolume(String clusterName, String volumeName) {
- Volume volume;
- GlusterServer onlineServer = clusterService.getOnlineServer(clusterName);
- if (onlineServer == null) {
- throw new GlusterRuntimeException("No online servers found in cluster [" + clusterName + "]");
- }
-
- try {
- volume = glusterUtil.getVolume(volumeName, onlineServer.getName());
- } catch (ConnectionException e) {
- // online server has gone offline! try with a different one.
- onlineServer = clusterService.getNewOnlineServer(clusterName);
- if (onlineServer == null) {
- throw new GlusterRuntimeException("No online servers found in cluster [" + clusterName + "]");
- }
-
- volume = glusterUtil.getVolume(volumeName, onlineServer.getName());
- }
- return volume;
- }
-
- @PUT
- @Path("{" + PATH_PARAM_VOLUME_NAME + "}")
- public Response performOperation(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName,
- @PathParam(PATH_PARAM_VOLUME_NAME) String volumeName, @FormParam(FORM_PARAM_OPERATION) String operation,
- @FormParam(FORM_PARAM_FIX_LAYOUT) Boolean isFixLayout,
- @FormParam(FORM_PARAM_MIGRATE_DATA) Boolean isMigrateData,
- @FormParam(FORM_PARAM_FORCED_DATA_MIGRATE) Boolean isForcedDataMigrate,
- @FormParam(FORM_PARAM_CIFS_ENABLE) Boolean enableCifs, @FormParam(FORM_PARAM_CIFS_USERS) String cifsUsers) {
- if (clusterName == null || clusterName.isEmpty()) {
- return badRequestResponse("Cluster name must not be empty!");
- }
-
- if (volumeName == null || volumeName.isEmpty()) {
- return badRequestResponse("Volume name must not be empty!");
- }
-
- if (clusterService.getCluster(clusterName) == null) {
- return notFoundResponse("Cluster [" + clusterName + "] not found!");
- }
-
- try {
- if (operation.equals(RESTConstants.TASK_REBALANCE_START)) {
- String taskId = rebalanceStart(clusterName, volumeName, isFixLayout, isMigrateData, isForcedDataMigrate);
- return acceptedResponse(RESTConstants.RESOURCE_PATH_CLUSTERS + "/" + clusterName + "/" + RESOURCE_TASKS
- + "/" + taskId);
- } else if (operation.equals(RESTConstants.TASK_REBALANCE_STOP)) {
- rebalanceStop(clusterName, volumeName);
- } else if (operation.equals(RESTConstants.TASK_CIFS_CONFIG)) {
- if (enableCifs) {
- modifyCIFSUsers(clusterName, volumeName, Arrays.asList(cifsUsers.split(",")));
- } else {
- stopCifsReexport(clusterName, volumeName);
- }
- } else {
- performVolumeOperation(clusterName, volumeName, operation);
- }
- return noContentResponse();
- } catch(Exception e) {
- return errorResponse(e.getMessage());
- }
- }
-
- private void performVolumeOperation(String clusterName, String volumeName, String operation) {
- GlusterServer onlineServer = clusterService.getOnlineServer(clusterName);
- try {
- if (onlineServer == null) {
- throw new GlusterRuntimeException("No online servers found in cluster [" + clusterName + "]");
- }
-
- performOperation(clusterName, volumeName, operation, onlineServer);
- } catch (ConnectionException e) {
- // online server has gone offline! try with a different one.
- onlineServer = clusterService.getNewOnlineServer(clusterName);
- performOperation(clusterName, volumeName, operation, onlineServer);
- }
- }
-
- private Status performOperation(String clusterName, String volumeName, String operation, GlusterServer onlineServer) {
- Status result;
- Volume volume = null;
- try {
- volume = getVolume(clusterName, volumeName);
- } catch (Exception e) {
- throw new GlusterRuntimeException("Could not fetch volume info for volume [" + volumeName + "]"
- + e.getMessage());
- }
-
- if (operation.equals(TASK_START)) {
- result = glusterUtil.startVolume(volumeName, onlineServer.getName());
-
- // call the start_volume_cifs.py script only if the volume is cifs enabled
- if (volume.getNASProtocols().contains(NAS_PROTOCOL.CIFS)) {
- if (result.isSuccess()) {
- startCifsReexport(onlineServer.getName(), volumeName);
- }
- }
- return result;
- } else if (operation.equals(TASK_STOP)) {
- result = glusterUtil.stopVolume(volumeName, onlineServer.getName());
-
- // call the stop_volume_cifs.py script only if the volume is cifs enabled
- if (volume.getNASProtocols().contains(NAS_PROTOCOL.CIFS)) {
- if (result.isSuccess()) {
- stopCifsReexport(onlineServer.getName(), volumeName);
- }
- }
- return result;
- } else {
- throw new GlusterValidationException("Invalid operation code [" + operation + "]");
- }
- }
-
- private void startCifsReexport(String clusterName, String volumeName) {
- File file;
- try {
- file = createOnlineServerList(clusterName);
- } catch (IOException e) {
- throw new GlusterRuntimeException("Error in CIFS configuration after stop volume [" + volumeName + "]: " + e.getMessage());
- }
-
- ProcessResult result = processUtil.executeCommand(VOLUME_CIFS_GRUN_SCRIPT + " " + file.getAbsolutePath() + " " +
- VOLUME_START_CIFS_SCRIPT + " " + volumeName);
- file.delete();
- if (!result.isSuccess()) {
- throw new GlusterRuntimeException("Error in cifs configuration after start volume [" + volumeName + "]: "
- + result);
- }
- }
-
- private void stopCifsReexport(String clusterName, String volumeName) {
- File file;
- try {
- file = createOnlineServerList(clusterName);
- } catch (IOException e) {
- throw new GlusterRuntimeException("Error in CIFS configuration after stop volume [" + volumeName + "]: " + e.getMessage());
- }
-
- ProcessResult result = processUtil.executeCommand(VOLUME_CIFS_GRUN_SCRIPT + " " + file.getAbsolutePath() + " " +
- VOLUME_STOP_CIFS_SCRIPT + " " + volumeName);
- file.delete();
- if (!result.isSuccess()) {
- throw new GlusterRuntimeException("Error in cifs configuration after stop volume [" + volumeName + "]: "
- + result);
- }
- }
-
- private void deleteCifsUsers(String clusterName, String volumeName) {
- File file;
- try {
- file = createOnlineServerList(clusterName);
- } catch (IOException e) {
- throw new GlusterRuntimeException("Error in deleting CIFS configuration [" + volumeName + "]: " + e.getMessage());
- }
-
- ProcessResult result = processUtil.executeCommand(VOLUME_CIFS_GRUN_SCRIPT + " " + file.getAbsolutePath() + " " +
- VOLUME_DELETE_CIFS_SCRIPT + " " + volumeName);
- file.delete();
- if (!result.isSuccess()) {
- throw new GlusterRuntimeException("Error in cifs configuration after delete volume [" + volumeName + "]: "
- + result);
- }
- }
-
- private void createCIFSUsers(String clusterName, String volumeName, List<String> cifsUsers) {
- File file;
- try {
- file = createOnlineServerList(clusterName);
- } catch (IOException e) {
- throw new GlusterRuntimeException("Error in CIFS configuration [" + volumeName + "]: " + e.getMessage());
- }
- String users = "";
- for (String user : cifsUsers) {
- users += " " + user;
- }
- ProcessResult result = processUtil.executeCommand(VOLUME_CIFS_GRUN_SCRIPT + " " + file.getAbsolutePath() + " " +
- VOLUME_CREATE_CIFS_SCRIPT + " " + volumeName + users);
- file.delete();
- if (!result.isSuccess()) {
- throw new GlusterRuntimeException("Error in CIFS configuration [" + volumeName + "]: " + result);
- }
- }
-
- private void modifyCIFSUsers(String clusterName, String volumeName, List<String> cifsUsers) {
- File file;
- try {
- file = createOnlineServerList(clusterName);
- } catch (IOException e) {
- throw new GlusterRuntimeException("Error in CIFS configuration [" + volumeName + "]: " + e.getMessage());
- }
- String users = "";
- for (String user : cifsUsers) {
- users += " " + user;
- }
- ProcessResult result = processUtil.executeCommand(VOLUME_CIFS_GRUN_SCRIPT + " " + file.getAbsolutePath() + " " +
- VOLUME_MODIFY_CIFS_SCRIPT + " " + volumeName + users);
- file.delete();
- if (!result.isSuccess()) {
- throw new GlusterRuntimeException("Error in CIFS configuration [" + volumeName + "]: " + result);
- }
- }
-
- public File createOnlineServerList(String clusterName) throws IOException {
- GlusterServer onlineServer = clusterService.getOnlineServer(clusterName);
- String clusterServersListFile = FileUtil.getTempDirName() + CoreConstants.FILE_SEPARATOR + ALL_SERVERS_FILE_NAME;
- List<GlusterServer> glusterServers = glusterUtil.getGlusterServers(onlineServer);
- File serversFile = new File(clusterServersListFile);
- FileOutputStream fos = new FileOutputStream(serversFile);
- for (GlusterServer server : glusterServers) {
- fos.write((server.getName() + CoreConstants.NEWLINE).getBytes());
- }
- fos.close();
- return serversFile;
-
- }
-
- @DELETE
- @Path("{" + PATH_PARAM_VOLUME_NAME + "}")
- public Response deleteVolume(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName,
- @PathParam(PATH_PARAM_VOLUME_NAME) String volumeName,
- @QueryParam(QUERY_PARAM_DELETE_OPTION) Boolean deleteFlag) {
- if (clusterName == null || clusterName.isEmpty()) {
- return badRequestResponse("Cluster name must not be empty");
- }
-
- if (volumeName == null || volumeName.isEmpty()) {
- return badRequestResponse("Volume name must not be empty");
- }
-
- if (clusterService.getCluster(clusterName) == null) {
- return notFoundResponse("Cluster [" + clusterName + "] not found!");
- }
-
- if (deleteFlag == null) {
- deleteFlag = false;
- }
-
- Volume volume = null;
- try {
- volume = getVolume(clusterName, volumeName);
- } catch (Exception e) {
- // TODO: Log the exception
- return errorResponse(e.getMessage());
- }
-
- List<Brick> bricks = volume.getBricks();
- Status status = glusterUtil.deleteVolume(volumeName, clusterService.getOnlineServer(clusterName)
- .getName());
- if(!status.isSuccess()) {
- return errorResponse("Couldn't delete volume [" + volumeName + "]. Error: " + status);
- }
-
- try {
- postDelete(volumeName, bricks, deleteFlag);
- } catch(Exception e) {
- return errorResponse("Volume [" + volumeName
- + "] deleted from cluster, however following errors happened: " + CoreConstants.NEWLINE
- + e.getMessage());
- }
-
- // call the delete_volume_cifs.py script only if the volume is cifs enabled
- if (volume.getNASProtocols().contains(NAS_PROTOCOL.CIFS)) {
- try {
- deleteCifsUsers(clusterName, volumeName);
- } catch (Exception e) {
- return errorResponse(CoreConstants.NEWLINE + e.getMessage());
- }
- }
-
- return noContentResponse();
- }
-
- @DELETE
- @Path("{" + PATH_PARAM_VOLUME_NAME + "}/" + RESOURCE_BRICKS)
- public Response removeBricks(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName,
- @PathParam(PATH_PARAM_VOLUME_NAME) String volumeName, @QueryParam(QUERY_PARAM_BRICKS) String bricks,
- @QueryParam(QUERY_PARAM_DELETE_OPTION) Boolean deleteFlag) {
- List<String> brickList = Arrays.asList(bricks.split(",")); // Convert from comma separated string (query
- // parameter)
- if (clusterName == null || clusterName.isEmpty()) {
- return badRequestResponse("Cluster name must not be empty!");
- }
-
- if (volumeName == null || volumeName.isEmpty()) {
- return badRequestResponse("Volume name must not be empty!");
- }
-
- if (bricks == null || bricks.isEmpty()) {
- return badRequestResponse("Parameter [" + QUERY_PARAM_BRICKS + "] is missing in request!");
- }
-
- if (clusterService.getCluster(clusterName) == null) {
- return notFoundResponse("Cluster [" + clusterName + "] not found!");
- }
-
- if(deleteFlag == null) {
- deleteFlag = false;
- }
-
- GlusterServer onlineServer = clusterService.getOnlineServer(clusterName);
- if (onlineServer == null) {
- return errorResponse("No online servers found in cluster [" + clusterName + "]");
- }
-
- try {
- removeBricks(clusterName, volumeName, brickList, onlineServer);
- } catch(Exception e) {
- return errorResponse(e.getMessage());
- }
-
- try {
- cleanupDirectories(brickList, volumeName, brickList.size(), deleteFlag);
- } catch(Exception e) {
- // append cleanup error to prepare brick error
- return errorResponse(e.getMessage());
- }
-
- return noContentResponse();
- }
-
- public void removeBricks(String clusterName, String volumeName, List<String> brickList, GlusterServer onlineServer) {
- Status status;
- try {
- status = glusterUtil.removeBricks(volumeName, brickList, onlineServer.getName());
- } catch (ConnectionException e) {
- // online server has gone offline! try with a different one.
- onlineServer = clusterService.getNewOnlineServer(clusterName);
- if (onlineServer == null) {
- throw new GlusterRuntimeException("No online servers found in cluster [" + clusterName + "]");
- }
- status = glusterUtil.removeBricks(volumeName, brickList, onlineServer.getName());
- }
- if (!status.isSuccess()) {
- throw new GlusterRuntimeException(status.toString());
- }
- }
-
- @SuppressWarnings("rawtypes")
- private void cleanupDirectories(List<String> bricks, String volumeName, int maxIndex, boolean deleteFlag) {
- Status result;
- String errors = "";
- for (int i = 0; i < maxIndex; i++) {
- String[] brickInfo = bricks.get(i).split(":");
- String serverName = brickInfo[0];
- String brickDirectory = brickInfo[1];
-
- // String mountPoint = brickDirectory.substring(0,
- // brickDirectory.lastIndexOf("/"));
- Object response = serverUtil.executeScriptOnServer(true, serverName, VOLUME_DIRECTORY_CLEANUP_SCRIPT + " "
- + brickDirectory + " " + (deleteFlag ? "-d" : ""), GenericResponse.class);
- if (response instanceof GenericResponse) {
- result = ((GenericResponse) response).getStatus();
- if (!result.isSuccess()) {
- errors += "[" + brickDirectory + "] => " + result + CoreConstants.NEWLINE;
- }
- } else {
- Status errStatus = (Status) response;
- errors += "[" + brickDirectory + "] => " + errStatus + CoreConstants.NEWLINE;
- }
- }
- if(!errors.trim().isEmpty()) {
- throw new GlusterRuntimeException("Volume directory cleanup errors: " + errors.trim());
- }
- }
-
- private void postDelete(String volumeName, List<Brick> bricks, boolean deleteFlag) {
- Status result;
- for (Brick brick : bricks) {
- String brickDirectory = brick.getBrickDirectory();
- // String mountPoint = brickDirectory.substring(0, brickDirectory.lastIndexOf("/"));
-
- result = (Status) serverUtil.executeScriptOnServer(true, brick.getServerName(),
- VOLUME_DIRECTORY_CLEANUP_SCRIPT + " " + brickDirectory + " " + (deleteFlag ? "-d" : ""),
- Status.class);
- if (!result.isSuccess()) {
- throw new GlusterRuntimeException("Error in post-delete operation of volume [" + volumeName + "]: "
- + result);
- }
- }
- }
-
- @POST
- @Path("{" + PATH_PARAM_VOLUME_NAME + " }/" + RESOURCE_OPTIONS)
- public Response setOption(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName,
- @PathParam(PATH_PARAM_VOLUME_NAME) String volumeName,
- @FormParam(RESTConstants.FORM_PARAM_OPTION_KEY) String key,
- @FormParam(RESTConstants.FORM_PARAM_OPTION_VALUE) String value) {
- if (clusterName == null || clusterName.isEmpty()) {
- return badRequestResponse("Cluster name must not be empty!");
- }
-
- if(volumeName == null || volumeName.isEmpty()) {
- return badRequestResponse("Volume name must not be empty!");
- }
-
- if(key == null || key.isEmpty()) {
- return badRequestResponse("Parameter [" + FORM_PARAM_OPTION_KEY + "] is missing in request!");
- }
-
- if(value == null || value.isEmpty()) {
- return badRequestResponse("Parameter [" + FORM_PARAM_OPTION_VALUE + "] is missing in request!");
- }
-
- if (clusterService.getCluster(clusterName) == null) {
- return notFoundResponse("Cluster [" + clusterName + "] not found!");
- }
-
- GlusterServer onlineServer = clusterService.getOnlineServer(clusterName);
- if (onlineServer == null) {
- return errorResponse("No online servers found in cluster [" + clusterName + "]");
- }
-
- try {
- glusterUtil.setOption(volumeName, key, value, onlineServer.getName());
- } catch (ConnectionException e) {
- // online server has gone offline! try with a different one.
- onlineServer = clusterService.getNewOnlineServer(clusterName);
- if (onlineServer == null) {
- return errorResponse("No online servers found in cluster [" + clusterName + "]");
- }
-
- try {
- glusterUtil.setOption(volumeName, key, value, onlineServer.getName());
- } catch(Exception e1) {
- return errorResponse(e1.getMessage());
- }
- } catch(Exception e) {
- return errorResponse(e.getMessage());
- }
-
- return createdResponse(key);
- }
-
- @PUT
- @Path("{" + PATH_PARAM_VOLUME_NAME + " }/" + RESOURCE_OPTIONS)
- public Response resetOptions(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName,
- @PathParam(PATH_PARAM_VOLUME_NAME) String volumeName) {
- if (clusterName == null || clusterName.isEmpty()) {
- return badRequestResponse("Cluster name must not be empty!");
- }
-
- if(volumeName == null || volumeName.isEmpty()) {
- return badRequestResponse("Volume name must not be empty!");
- }
-
- if (clusterService.getCluster(clusterName) == null) {
- return notFoundResponse("Cluster [" + clusterName + "] not found!");
- }
-
- GlusterServer onlineServer = clusterService.getOnlineServer(clusterName);
- if (onlineServer == null) {
- return errorResponse("No online servers found in cluster [" + clusterName + "]");
- }
-
- try {
- glusterUtil.resetOptions(volumeName, onlineServer.getName());
- } catch (ConnectionException e) {
- // online server has gone offline! try with a different one.
- onlineServer = clusterService.getNewOnlineServer(clusterName);
- if (onlineServer == null) {
- return errorResponse("No online servers found in cluster [" + clusterName + "]");
- }
-
- try {
- glusterUtil.resetOptions(volumeName, onlineServer.getName());
- } catch(Exception e1) {
- return errorResponse(e1.getMessage());
- }
- } catch(Exception e) {
- return errorResponse(e.getMessage());
- }
-
- return noContentResponse();
- }
-
- @GET
- @Path(RESOURCE_DEFAULT_OPTIONS)
- @Produces(MediaType.APPLICATION_XML)
- public VolumeOptionInfoListResponse getDefaultOptionsXML(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName) {
- // TODO: Fetch all volume options with their default values from GlusterFS
- // whenever such a CLI command is made available in GlusterFS
- return new VolumeOptionInfoListResponse(Status.STATUS_SUCCESS, volumeOptionsDefaults.getDefaults());
- }
-
- @GET
- @Path(RESOURCE_DEFAULT_OPTIONS)
- @Produces(MediaType.APPLICATION_JSON)
- public VolumeOptionInfoListResponse getDefaultOptionsJSON(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName) {
- // TODO: Fetch all volume options with their default values from GlusterFS
- // whenever such a CLI command is made available in GlusterFS
- return new VolumeOptionInfoListResponse(Status.STATUS_SUCCESS, volumeOptionsDefaults.getDefaults());
- }
-
- private List<VolumeLogMessage> getBrickLogs(Volume volume, Brick brick, Integer lineCount)
- throws GlusterRuntimeException {
- String logDir = glusterUtil.getLogLocation(volume.getName(), brick.getQualifiedName(), brick.getServerName());
- String logFileName = glusterUtil.getLogFileNameForBrickDir(brick.getBrickDirectory());
- String logFilePath = logDir + CoreConstants.FILE_SEPARATOR + logFileName;
-
- // Usage: get_volume_disk_log.py <volumeName> <diskName> <lineCount>
- Object responseObj = serverUtil.executeScriptOnServer(true, brick.getServerName(), VOLUME_BRICK_LOG_SCRIPT
- + " " + logFilePath + " " + lineCount, LogMessageListResponse.class);
-
- LogMessageListResponse response = null;
- if (responseObj instanceof LogMessageListResponse) {
- response = (LogMessageListResponse) responseObj;
- // populate disk and trim other fields
- List<VolumeLogMessage> logMessages = response.getLogMessages();
- for (VolumeLogMessage logMessage : logMessages) {
- logMessage.setBrickDirectory(brick.getBrickDirectory());
- }
- return logMessages;
- } else {
- Status status = (Status) responseObj;
- throw new GlusterRuntimeException(status.toString());
- }
- }
-
- @GET
- @Produces(MediaType.APPLICATION_OCTET_STREAM)
- @Path("{" + PATH_PARAM_VOLUME_NAME + "}/" + RESOURCE_LOGS + "/" + RESOURCE_DOWNLOAD)
- public Response downloadLogs(@PathParam(PATH_PARAM_CLUSTER_NAME) final String clusterName,
- @PathParam(PATH_PARAM_VOLUME_NAME) final String volumeName) {
- if (clusterName == null || clusterName.isEmpty()) {
- return badRequestResponse("Cluster name must not be empty!");
- }
-
- if (volumeName == null || volumeName.isEmpty()) {
- return badRequestResponse("Volume name must not be empty!");
- }
-
- if (clusterService.getCluster(clusterName) == null) {
- return notFoundResponse("Cluster [" + clusterName + "] not found!");
- }
-
- try {
- final Volume volume = getVolume(clusterName, volumeName);
- File archiveFile = new File(downloadLogs(volume));
- byte[] data = FileUtil.readFileAsByteArray(archiveFile);
- archiveFile.delete();
- return streamingOutputResponse(createStreamingOutput(data));
- } catch (Exception e) {
- logger.error("Volume [" + volumeName + "] doesn't exist in cluster [" + clusterName + "]! ["
- + e.getStackTrace() + "]");
- throw (GlusterRuntimeException) e;
- }
- }
-
-
- private String downloadLogs(Volume volume) {
- // create temporary directory
- File tempDir = FileUtil.createTempDir();
- String tempDirPath = tempDir.getPath();
-
- for (Brick brick : volume.getBricks()) {
- String logDir = glusterUtil.getLogLocation(volume.getName(), brick.getQualifiedName(),
- brick.getServerName());
- String logFileName = glusterUtil.getLogFileNameForBrickDir(brick.getBrickDirectory());
- String logFilePath = logDir + CoreConstants.FILE_SEPARATOR + logFileName;
-
- serverUtil.getFileFromServer(brick.getServerName(), logFilePath, tempDirPath);
-
- String fetchedLogFile = tempDirPath + File.separator + logFileName;
- // append log file name with server name so that log files don't overwrite each other
- // in cases where the brick log file names are same on multiple servers
- String localLogFile = tempDirPath + File.separator + brick.getServerName() + "-" + logFileName;
-
- FileUtil.renameFile(fetchedLogFile, localLogFile);
- }
-
- String gzipPath = FileUtil.getTempDirName() + CoreConstants.FILE_SEPARATOR + volume.getName() + "-logs.tar.gz";
- new ProcessUtil().executeCommand("tar", "czvf", gzipPath, "-C", tempDir.getParent(), tempDir.getName());
-
- // delete the temp directory
- FileUtil.recursiveDelete(tempDir);
-
- return gzipPath;
- }
-
- @GET
- @Path("{" + PATH_PARAM_VOLUME_NAME + "}/" + RESOURCE_LOGS)
- @Produces(MediaType.APPLICATION_XML)
- public Response getLogsXML(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName,
- @PathParam(PATH_PARAM_VOLUME_NAME) String volumeName, @QueryParam(QUERY_PARAM_BRICK_NAME) String brickName,
- @QueryParam(QUERY_PARAM_LOG_SEVERITY) String severity,
- @QueryParam(QUERY_PARAM_FROM_TIMESTAMP) String fromTimestamp,
- @QueryParam(QUERY_PARAM_TO_TIMESTAMP) String toTimestamp,
- @QueryParam(QUERY_PARAM_LINE_COUNT) Integer lineCount, @QueryParam(QUERY_PARAM_DOWNLOAD) Boolean download) {
- return getLogs(clusterName, volumeName, brickName, severity, fromTimestamp, toTimestamp, lineCount, MediaType.APPLICATION_XML);
- }
-
- @GET
- @Path("{" + PATH_PARAM_VOLUME_NAME + "}/" + RESOURCE_LOGS)
- @Produces(MediaType.APPLICATION_JSON)
- public Response getLogsJSON(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName,
- @PathParam(PATH_PARAM_VOLUME_NAME) String volumeName, @QueryParam(QUERY_PARAM_BRICK_NAME) String brickName,
- @QueryParam(QUERY_PARAM_LOG_SEVERITY) String severity,
- @QueryParam(QUERY_PARAM_FROM_TIMESTAMP) String fromTimestamp,
- @QueryParam(QUERY_PARAM_TO_TIMESTAMP) String toTimestamp,
- @QueryParam(QUERY_PARAM_LINE_COUNT) Integer lineCount, @QueryParam(QUERY_PARAM_DOWNLOAD) Boolean download) {
- return getLogs(clusterName, volumeName, brickName, severity, fromTimestamp, toTimestamp, lineCount, MediaType.APPLICATION_JSON);
- }
-
- public Response getLogs(String clusterName, String volumeName, String brickName, String severity,
- String fromTimestamp, String toTimestamp, Integer lineCount, String mediaType) {
- if (clusterName == null || clusterName.isEmpty()) {
- return badRequestResponse("Cluster name must not be empty!");
- }
-
- if (volumeName == null || volumeName.isEmpty()) {
- return badRequestResponse("Volume name must not be empty!");
- }
-
- if (clusterService.getCluster(clusterName) == null) {
- return notFoundResponse("Cluster [" + clusterName + "] not found!");
- }
-
- List<VolumeLogMessage> logMessages = null;
- Volume volume = null;
- try {
- volume = (Volume) getVolume(clusterName, volumeName);
- } catch(Exception e) {
- return errorResponse(e.getMessage());
- }
-
- if (brickName == null || brickName.isEmpty() || brickName.equals(CoreConstants.ALL)) {
- logMessages = getLogsForAllBricks(volume, lineCount);
- } else {
- // fetch logs for given brick of the volume
- for (Brick brick : volume.getBricks()) {
- if (brick.getQualifiedName().equals(brickName)) {
- logMessages = getBrickLogs(volume, brick, lineCount);
- break;
- }
- }
- }
-
- filterLogsBySeverity(logMessages, severity);
- filterLogsByTime(logMessages, fromTimestamp, toTimestamp);
-
- return okResponse(new LogMessageListResponse(logMessages), mediaType);
- }
-
- private void filterLogsByTime(List<VolumeLogMessage> logMessages, String fromTimestamp, String toTimestamp) {
- Date fromTime = null, toTime = null;
-
- if (fromTimestamp != null && !fromTimestamp.isEmpty()) {
- fromTime = DateUtil.stringToDate(fromTimestamp);
- }
-
- if (toTimestamp != null && !toTimestamp.isEmpty()) {
- toTime = DateUtil.stringToDate(toTimestamp);
- }
-
- List<VolumeLogMessage> messagesToRemove = new ArrayList<VolumeLogMessage>();
- for (VolumeLogMessage logMessage : logMessages) {
- Date logTimestamp = logMessage.getTimestamp();
- if (fromTime != null && logTimestamp.before(fromTime)) {
- messagesToRemove.add(logMessage);
- continue;
- }
-
- if (toTime != null && logTimestamp.after(toTime)) {
- messagesToRemove.add(logMessage);
- }
- }
- logMessages.removeAll(messagesToRemove);
- }
-
- private void filterLogsBySeverity(List<VolumeLogMessage> logMessages, String severity) {
- if (severity == null || severity.isEmpty()) {
- return;
- }
-
- List<VolumeLogMessage> messagesToRemove = new ArrayList<VolumeLogMessage>();
- for (VolumeLogMessage logMessage : logMessages) {
- if (!logMessage.getSeverity().equals(severity)) {
- messagesToRemove.add(logMessage);
- }
- }
- logMessages.removeAll(messagesToRemove);
- }
-
- private List<VolumeLogMessage> getLogsForAllBricks(Volume volume, Integer lineCount) {
- List<VolumeLogMessage> logMessages;
- logMessages = new ArrayList<VolumeLogMessage>();
- // fetch logs for every brick of the volume
- for (Brick brick : volume.getBricks()) {
- logMessages.addAll(getBrickLogs(volume, brick, lineCount));
- }
-
- // Sort the log messages based on log timestamp
- Collections.sort(logMessages, new Comparator<VolumeLogMessage>() {
- @Override
- public int compare(VolumeLogMessage message1, VolumeLogMessage message2) {
- return message1.getTimestamp().compareTo(message2.getTimestamp());
- }
- });
-
- return logMessages;
- }
-
- @POST
- @Path("{" + PATH_PARAM_VOLUME_NAME + "}/" + RESOURCE_BRICKS)
- public Response addBricks(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName,
- @PathParam(PATH_PARAM_VOLUME_NAME) String volumeName, @FormParam(FORM_PARAM_BRICKS) String bricks) {
- if (clusterName == null || clusterName.isEmpty()) {
- return badRequestResponse("Cluster name must not be empty!");
- }
-
- if (volumeName == null || volumeName.isEmpty()) {
- return badRequestResponse("Cluster name must not be empty!");
- }
-
- if (bricks == null || bricks.isEmpty()) {
- return badRequestResponse("Parameter [" + FORM_PARAM_BRICKS + "] is missing in request!");
- }
-
- if (clusterService.getCluster(clusterName) == null) {
- return notFoundResponse("Cluster [" + clusterName + "] not found!");
- }
-
- GlusterServer onlineServer = clusterService.getOnlineServer(clusterName);
- if (onlineServer == null) {
- return errorResponse("No online servers found in cluster [" + clusterName + "]");
- }
-
- List<String> brickList = Arrays.asList(bricks.split(","));
- try {
- glusterUtil.addBricks(volumeName, brickList, onlineServer.getName());
- } catch (ConnectionException e) {
- // online server has gone offline! try with a different one.
- onlineServer = clusterService.getNewOnlineServer(clusterName);
- if (onlineServer == null) {
- return errorResponse("No online servers found in cluster [" + clusterName + "]");
- }
-
- try {
- glusterUtil.addBricks(volumeName, brickList, onlineServer.getName());
- } catch(Exception e1) {
- return errorResponse(e1.getMessage());
- }
- } catch(Exception e1) {
- return errorResponse(e1.getMessage());
- }
-
- return createdResponse("");
- }
-
- @PUT
- @Path("{" + PATH_PARAM_VOLUME_NAME + "}/" + RESOURCE_BRICKS)
- public Response migrateBrick(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName,
- @PathParam(PATH_PARAM_VOLUME_NAME) String volumeName, @FormParam(FORM_PARAM_SOURCE) String fromBrick,
- @FormParam(FORM_PARAM_TARGET) String toBrick, @FormParam(FORM_PARAM_AUTO_COMMIT) Boolean autoCommit) {
-
- if (clusterName == null || clusterName.isEmpty()) {
- return badRequestResponse("Cluster name must not be empty!");
- }
-
- if (volumeName == null || volumeName.isEmpty()) {
- return badRequestResponse("Volume name must not be empty!");
- }
-
- if (fromBrick == null || fromBrick.isEmpty()) {
- return badRequestResponse("Parameter [" + FORM_PARAM_SOURCE + "] is missing in request!");
- }
-
- if (toBrick == null || toBrick.isEmpty()) {
- return badRequestResponse("Parameter [" + FORM_PARAM_TARGET + "] is missing in request!");
- }
-
- if (clusterService.getCluster(clusterName) == null) {
- return notFoundResponse("Cluster [" + clusterName + "] not found!");
- }
-
- GlusterServer onlineServer = clusterService.getOnlineServer(clusterName);
- if (onlineServer == null) {
- return errorResponse("No online servers found in cluster [" + clusterName + "]");
- }
-
- if(autoCommit == null) {
- autoCommit = false;
- }
-
- String taskId = null;
- try {
- taskId = migrateBrickStart(clusterName, volumeName, fromBrick, toBrick, autoCommit);
- }catch(Exception e) {
- return errorResponse(e.getMessage());
- }
-
- return acceptedResponse(RESTConstants.RESOURCE_PATH_CLUSTERS + "/" + clusterName + "/" + RESOURCE_TASKS + "/"
- + taskId);
- }
-
- private String migrateBrickStart(String clusterName, String volumeName, String fromBrick, String toBrick,
- Boolean autoCommit) {
- MigrateBrickTask migrateDiskTask = new MigrateBrickTask(clusterService, clusterName, volumeName, fromBrick,
- toBrick);
- migrateDiskTask.setAutoCommit(autoCommit);
- migrateDiskTask.start();
- taskResource.addTask(migrateDiskTask);
- return migrateDiskTask.getTaskInfo().getName(); // Return Task ID
- }
-
- private String getLayout(Boolean isFixLayout, Boolean isMigrateData,
- Boolean isForcedDataMigrate) {
- String layout = "";
- if (isForcedDataMigrate) {
- layout = "forced-data-migrate";
- } else if (isMigrateData) {
- layout = "migrate-data";
- } else if (isFixLayout) {
- layout = "fix-layout";
- }
- return layout;
- }
-
- private String rebalanceStart(String clusterName, String volumeName, Boolean isFixLayout, Boolean isMigrateData,
- Boolean isForcedDataMigrate) {
- RebalanceVolumeTask rebalanceTask = new RebalanceVolumeTask(clusterService, clusterName, volumeName, getLayout(
- isFixLayout, isMigrateData, isForcedDataMigrate));
- rebalanceTask.start();
- taskResource.addTask(rebalanceTask);
- return rebalanceTask.getId();
- }
-
- public void rebalanceStop(String clusterName, String volumeName) {
- // TODO: arrive at the task id and fetch it
- String taskId = "";
-
- taskResource.getTask(taskId).stop();
- }
-}
diff --git a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/security/GlusterUserDetailsService.java b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/security/GlusterUserDetailsService.java
deleted file mode 100644
index e806051c..00000000
--- a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/security/GlusterUserDetailsService.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * GlusterUserDetailsService.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.gateway.security;
-
-import org.springframework.security.core.userdetails.UserDetailsService;
-
-/**
- *
- */
-public interface GlusterUserDetailsService extends UserDetailsService {
- void changePassword(String username, String password);
-}
-
diff --git a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/security/UserAuthDao.java b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/security/UserAuthDao.java
deleted file mode 100644
index c930c295..00000000
--- a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/security/UserAuthDao.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * UserAuthDao.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.gateway.security;
-
-import java.sql.Connection;
-import java.sql.SQLException;
-
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.EntityTransaction;
-import javax.persistence.PersistenceUnit;
-
-import org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl;
-
-import com.gluster.storage.management.core.exceptions.GlusterRuntimeException;
-
-/**
- *
- */
-public class UserAuthDao extends JdbcDaoImpl implements GlusterUserDetailsService {
-
- /*
- * (non-Javadoc)
- *
- * @see com.gluster.storage.management.gateway.security.GlusterUserDetailsService#changePassword(java.lang.String,
- * java.lang.String)
- */
- @Override
- public void changePassword(String username, String password) {
- try {
- getJdbcTemplate().update("UPDATE USERS SET PASSWORD = ? WHERE USERNAME = ?", password, username);
- Connection connection = getDataSource().getConnection();
- connection.commit();
- connection.close();
- } catch(Exception e) {
- String errMsg = "Exception while changing password of user [" + username + "]. Error: " + e.getMessage();
- try {
- getDataSource().getConnection().rollback();
- } catch (SQLException e1) {
- throw new GlusterRuntimeException(errMsg + ", " + e1.getMessage());
- }
- throw new GlusterRuntimeException(errMsg);
- }
- }
-}
diff --git a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/services/GlusterServerService.java b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/services/GlusterServerService.java
deleted file mode 100644
index d1437cec..00000000
--- a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/services/GlusterServerService.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*******************************************************************************
- * 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.gateway.services;
-
-import java.util.List;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import com.gluster.storage.management.core.constants.CoreConstants;
-import com.gluster.storage.management.core.exceptions.ConnectionException;
-import com.gluster.storage.management.core.exceptions.GlusterRuntimeException;
-import com.gluster.storage.management.core.exceptions.GlusterValidationException;
-import com.gluster.storage.management.core.model.GlusterServer;
-import com.gluster.storage.management.core.model.Server.SERVER_STATUS;
-import com.gluster.storage.management.gateway.data.ClusterInfo;
-import com.gluster.storage.management.gateway.utils.GlusterUtil;
-import com.gluster.storage.management.gateway.utils.ServerUtil;
-
-/**
- *
- */
-@Component
-public class GlusterServerService {
- @Autowired
- protected ServerUtil serverUtil;
-
- @Autowired
- private ClusterService clusterService;
-
- @Autowired
- private GlusterUtil glusterUtil;
-
- public void fetchServerDetails(GlusterServer server) {
- try {
- server.setStatus(SERVER_STATUS.ONLINE);
- serverUtil.fetchServerDetails(server);
- } catch (ConnectionException e) {
- server.setStatus(SERVER_STATUS.OFFLINE);
- }
- }
-
- public List<GlusterServer> getGlusterServers(String clusterName, boolean fetchDetails) {
- List<GlusterServer> glusterServers;
- GlusterServer onlineServer = clusterService.getOnlineServer(clusterName);
- if (onlineServer == null) {
- throw new GlusterRuntimeException("No online servers found in cluster [" + clusterName + "]");
- }
-
- try {
- glusterServers = getGlusterServers(clusterName, onlineServer, fetchDetails);
- } catch (ConnectionException e) {
- // online server has gone offline! try with a different one.
- onlineServer = clusterService.getNewOnlineServer(clusterName);
- if (onlineServer == null) {
- throw new GlusterRuntimeException("No online servers found in cluster [" + clusterName + "]");
- }
- glusterServers = getGlusterServers(clusterName, onlineServer, fetchDetails);
- }
- return glusterServers;
- }
-
- private List<GlusterServer> getGlusterServers(String clusterName, GlusterServer onlineServer, boolean fetchDetails) {
- List<GlusterServer> glusterServers;
- try {
- glusterServers = glusterUtil.getGlusterServers(onlineServer);
- } catch (ConnectionException e) {
- // online server has gone offline! try with a different one.
- onlineServer = clusterService.getNewOnlineServer(clusterName);
- if (onlineServer == null) {
- throw new GlusterRuntimeException("No online servers found in cluster [" + clusterName + "]");
- }
-
- glusterServers = glusterUtil.getGlusterServers(onlineServer);
- }
-
- if (fetchDetails) {
- String errMsg = fetchDetailsOfServers(glusterServers, onlineServer);
- if (!errMsg.isEmpty()) {
- throw new GlusterRuntimeException("Couldn't fetch details for server(s): " + errMsg);
- }
- }
- return glusterServers;
- }
-
- private String fetchDetailsOfServers(List<GlusterServer> glusterServers, GlusterServer onlineServer) {
- String errMsg = "";
-
- for (GlusterServer server : glusterServers) {
- try {
- fetchServerDetails(server);
- } catch (Exception e) {
- errMsg += CoreConstants.NEWLINE + server.getName() + " : [" + e.getMessage() + "]";
- }
- }
- return errMsg;
- }
-
- public GlusterServer getGlusterServer(String clusterName, String serverName, Boolean fetchDetails) {
- if (clusterName == null || clusterName.isEmpty()) {
- throw new GlusterValidationException("Cluster name must not be empty!");
- }
-
- if (serverName == null || serverName.isEmpty()) {
- throw new GlusterValidationException("Server name must not be empty!");
- }
-
- ClusterInfo cluster = clusterService.getCluster(clusterName);
- if (cluster == null) {
- throw new GlusterRuntimeException("Cluster [" + clusterName + "] not found!");
- }
-
- GlusterServer onlineServer = clusterService.getOnlineServer(clusterName);
- if (onlineServer == null) {
- throw new GlusterRuntimeException("No online servers found in cluster [" + clusterName + "]");
- }
-
- return getGlusterServer(clusterName, serverName, onlineServer, fetchDetails);
- }
-
- private GlusterServer getGlusterServer(String clusterName, String serverName, GlusterServer onlineServer,
- Boolean fetchDetails) {
- GlusterServer server = null;
- try {
- server = glusterUtil.getGlusterServer(onlineServer, serverName);
- } catch (ConnectionException e) {
- // online server has gone offline! try with a different one.
- onlineServer = clusterService.getNewOnlineServer(clusterName);
- if (onlineServer == null) {
- throw new GlusterRuntimeException("No online servers found in cluster [" + clusterName + "]");
- }
- server = glusterUtil.getGlusterServer(onlineServer, serverName);
- }
-
- if (fetchDetails && server.isOnline()) {
- fetchServerDetails(server);
- }
- return server;
- }
-
- public boolean isValidServer(String clusterName, String serverName) {
- try {
- GlusterServer server = getGlusterServer(clusterName, serverName, false);
- return server != null;
- } catch(Exception e) {
- return false;
- }
- }
-}
diff --git a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/tasks/InitializeDiskTask.java b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/tasks/InitializeDiskTask.java
deleted file mode 100644
index ba1cba21..00000000
--- a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/tasks/InitializeDiskTask.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/**
- * InitializeDiskTask.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.gateway.tasks;
-
-import org.springframework.context.ApplicationContext;
-import org.springframework.web.context.ContextLoader;
-
-import com.gluster.storage.management.core.constants.GlusterConstants;
-import com.gluster.storage.management.core.exceptions.ConnectionException;
-import com.gluster.storage.management.core.exceptions.GlusterRuntimeException;
-import com.gluster.storage.management.core.model.Status;
-import com.gluster.storage.management.core.model.TaskInfo;
-import com.gluster.storage.management.core.model.TaskInfo.TASK_TYPE;
-import com.gluster.storage.management.core.model.TaskStatus;
-import com.gluster.storage.management.core.utils.ProcessResult;
-import com.gluster.storage.management.gateway.services.ClusterService;
-import com.gluster.storage.management.gateway.utils.GlusterUtil;
-import com.gluster.storage.management.gateway.utils.ServerUtil;
-import com.gluster.storage.management.gateway.utils.SshUtil;
-import com.sun.jersey.core.util.Base64;
-
-public class InitializeDiskTask extends Task {
-
- private static final String INITIALIZE_DISK_SCRIPT = "format_device.py";
-
- private String serverName;
- private String diskName;
- private String fsType;
- private ServerUtil serverUtil;
- private GlusterUtil glusterUtil;
-
- public InitializeDiskTask(ClusterService clusterService, String clusterName, String serverName, String diskName, String fsType) {
- super(clusterService, clusterName, TASK_TYPE.DISK_FORMAT, diskName, "Initialize disk " + serverName + ":"
- + diskName, false, false, false);
-
- setServerName(serverName);
- setDiskName(diskName);
- setFsType(fsType);
- taskInfo.setName(getId());
- init();
- }
-
- public InitializeDiskTask(ClusterService clusterService, String clusterName, TaskInfo info) {
- super(clusterService, clusterName, info);
- init();
- }
-
- private void init() {
- ApplicationContext ctx = ContextLoader.getCurrentWebApplicationContext();
- glusterUtil = ctx.getBean(GlusterUtil.class);
- serverUtil = ctx.getBean(ServerUtil.class);
- }
-
- @Override
- public String getId() {
- return new String(
- Base64.encode(getClusterName() + "-" + taskInfo.getType() + "-" + serverName + ":" + diskName));
- }
-
- @Override
- public void resume() {
- getTaskInfo().setStatus(
- new TaskStatus(new Status(Status.STATUS_CODE_FAILURE,
- "Stop/Pause/Resume is not supported in Disk Initialization")));
- }
-
- @Override
- public void stop() {
- getTaskInfo().setStatus(
- new TaskStatus(new Status(Status.STATUS_CODE_FAILURE,
- "Stop/Pause/Resume is not supported in Disk Initialization")));
- }
-
- @Override
- public void pause() {
- getTaskInfo().setStatus(
- new TaskStatus(new Status(Status.STATUS_CODE_FAILURE,
- "Stop/Pause/Resume is not supported in Disk Initialization")));
- }
-
- @Override
- public void commit() {
- // TODO Auto-generated method stub
- }
-
- @Override
- public TASK_TYPE getType() {
- return TASK_TYPE.DISK_FORMAT;
- }
-
-
- @Override
- public void start() {
- try {
- startInitializeDisk(serverName);
- } catch(ConnectionException e) {
- // online server might have gone offline. update the failure status
- getTaskInfo().setStatus(new TaskStatus(new Status(Status.STATUS_CODE_FAILURE, e.getMessage())));
- }
- }
-
- private void startInitializeDisk(String serverName) {
- String fsTypeCommand = (getFsType().equals(GlusterConstants.FSTYPE_DEFAULT)) ? "" : " -t " + getFsType();
-
- Object output = serverUtil.executeScriptOnServer(true, serverName, INITIALIZE_DISK_SCRIPT
- + fsTypeCommand + " " + getDiskName(), String.class);
- if(output instanceof Status) {
- // Status object will be returned only in case of failure
- throw new GlusterRuntimeException(((Status)output).toString());
- }
- TaskStatus taskStatus = new TaskStatus(new Status(Status.STATUS_CODE_RUNNING, (String)output));
- taskStatus.setPercentageSupported((getFsType().equals(GlusterConstants.FSTYPE_XFS)) ? false : true);
- getTaskInfo().setStatus(taskStatus);
- }
-
- @Override
- public TaskStatus checkStatus() {
-
- try {
- 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()));
- }
- }
-
- public void setDiskName(String diskName) {
- this.diskName = diskName;
- }
-
- public String getDiskName() {
- return diskName;
- }
-
- public void setServerName(String serverName) {
- this.serverName = serverName;
- }
-
- public String getServerName() {
- return serverName;
- }
-
- public void setFsType(String fsType) {
- this.fsType = fsType;
- }
-
- public String getFsType() {
- return fsType;
- }
-}
diff --git a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/tasks/MigrateBrickTask.java b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/tasks/MigrateBrickTask.java
deleted file mode 100644
index 694067aa..00000000
--- a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/tasks/MigrateBrickTask.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/**
- * MigrateDiskTask.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.gateway.tasks;
-
-import org.springframework.context.ApplicationContext;
-import org.springframework.web.context.ContextLoader;
-
-import com.gluster.storage.management.core.exceptions.ConnectionException;
-import com.gluster.storage.management.core.model.Status;
-import com.gluster.storage.management.core.model.TaskInfo.TASK_TYPE;
-import com.gluster.storage.management.core.model.TaskStatus;
-import com.gluster.storage.management.core.utils.ProcessResult;
-import com.gluster.storage.management.gateway.services.ClusterService;
-import com.gluster.storage.management.gateway.utils.GlusterUtil;
-import com.sun.jersey.core.util.Base64;
-
-public class MigrateBrickTask extends Task {
-
- private String fromBrick;
- private String toBrick;
- private Boolean autoCommit;
- private GlusterUtil glusterUtil;
-
- public String getFromBrick() {
- return fromBrick;
- }
-
- public void setFromBrick(String fromBrick) {
- this.fromBrick = fromBrick;
- }
-
- public String getToBrick() {
- return toBrick;
- }
-
- public void setToBrick(String toBrick) {
- this.toBrick = toBrick;
- }
-
- public Boolean getAutoCommit() {
- return autoCommit;
- }
-
- public void setAutoCommit(Boolean autoCommit) {
- this.autoCommit = autoCommit;
- }
-
- public MigrateBrickTask(ClusterService clusterService, String clusterName, String volumeName, String fromBrick,
- String toBrick) {
- super(clusterService, clusterName, TASK_TYPE.BRICK_MIGRATE, volumeName, "Brick Migration on volume ["
- + volumeName + "] from [" + fromBrick + "] to [" + toBrick + "]", true, true, true);
- setFromBrick(fromBrick);
- setToBrick(toBrick);
- taskInfo.setName(getId());
- init();
- }
-
- private void init() {
- ApplicationContext ctx = ContextLoader.getCurrentWebApplicationContext();
- glusterUtil = ctx.getBean(GlusterUtil.class);
- }
-
- @Override
- public String getId() {
- return new String(Base64.encode(clusterName + "-" + taskInfo.getType() + "-" + taskInfo.getReference() + "-" + fromBrick + "-"
- + toBrick));
- }
-
- @Override
- public void start() {
- try {
- startMigration(getOnlineServer().getName());
- } catch (ConnectionException e) {
- // online server might have gone Offline. try with a new one.
- startMigration(getNewOnlineServer().getName());
- }
- }
-
- private void startMigration(String onlineServerName) {
- ProcessResult processResult = glusterUtil.executeBrickMigration(onlineServerName, getTaskInfo().getReference(),
- getFromBrick(), getToBrick(), "start");
- if (processResult.getOutput().trim().matches(".*started successfully$")) {
- getTaskInfo().setStatus(
- new TaskStatus(new Status(Status.STATUS_CODE_RUNNING, processResult.getOutput().trim())));
- return;
- }
- }
-
- @Override
- public void pause() {
- try {
- pauseMigration(getOnlineServer().getName());
- } catch (ConnectionException e) {
- // online server might have gone offline. try with a new one.
- pauseMigration(getNewOnlineServer().getName());
- }
- }
-
- private void pauseMigration(String onlineServer) {
- ProcessResult processResult = glusterUtil.executeBrickMigration(onlineServer, taskInfo.getReference(),
- getFromBrick(), getToBrick(), "pause");
- TaskStatus taskStatus = new TaskStatus();
- if (processResult.getOutput().trim().matches(".*paused successfully$")) {
- taskStatus.setCode(Status.STATUS_CODE_PAUSE);
- taskStatus.setMessage(processResult.getOutput());
- getTaskInfo().setStatus(taskStatus);
- return;
- }
- }
-
- @Override
- public void resume() {
- start();
- }
-
- @Override
- public void commit() {
- try {
- commitMigration(getOnlineServer().getName());
- } catch (ConnectionException e) {
- // online server might have gone offline. try with a new one.
- commitMigration(getNewOnlineServer().getName());
- }
- }
-
- private void commitMigration(String serverName) {
- ProcessResult processResult = glusterUtil.executeBrickMigration(serverName, getTaskInfo().getReference(),
- getFromBrick(), getToBrick(), "commit");
- TaskStatus taskStatus = new TaskStatus();
- if (processResult.isSuccess()) {
- if (processResult.getOutput().trim().matches(".*commit successful$")) {
- taskStatus.setCode(Status.STATUS_CODE_SUCCESS);
- taskStatus.setMessage(processResult.getOutput());
- getTaskInfo().setStatus(taskStatus);
- }
- }
- }
-
- @Override
- public void stop() {
- try {
- stopMigration(getOnlineServer().getName());
- } catch (ConnectionException e) {
- // online server might have gone offline. try with a new one.
- stopMigration(getNewOnlineServer().getName());
- }
- }
-
- private void stopMigration(String serverName) {
- ProcessResult processResult = glusterUtil.executeBrickMigration(serverName, taskInfo.getReference(), getFromBrick(),
- getToBrick(), "abort");
- TaskStatus taskStatus = new TaskStatus();
- if (processResult.getOutput().trim().matches(".*aborted successfully$")) {
- taskStatus.setCode(Status.STATUS_CODE_SUCCESS);
- taskStatus.setMessage(processResult.getOutput());
- getTaskInfo().setStatus(taskStatus);
- }
- }
-
- @Override
- public TaskStatus checkStatus() {
- try {
- return checkMigrationStatus(getOnlineServer().getName());
- } catch (ConnectionException e) {
- // online server might have gone offline. try with a new one.
- return checkMigrationStatus(getNewOnlineServer().getName());
- }
- }
-
- private TaskStatus checkMigrationStatus(String serverName) {
- if (getTaskInfo().getStatus().getCode() == Status.STATUS_CODE_PAUSE) {
- return getTaskInfo().getStatus();
- }
- // For committed task, status command (CLI) is invalid, just return current status
- if (getTaskInfo().getStatus().getCode() == Status.STATUS_CODE_SUCCESS) {
- return getTaskInfo().getStatus();
- }
-
-
- TaskStatus taskStatus = new TaskStatus();
- try {
- ProcessResult processResult = glusterUtil.executeBrickMigration(serverName, getTaskInfo().getReference(),
- getFromBrick(), getToBrick(), "status");
- if (processResult.getOutput().trim().matches("^Number of files migrated.*Migration complete$")
- || processResult.getOutput().trim().matches("^Number of files migrated = 0 .*Current file=")) {
- // Note: Workaround - if no file in the volume brick to migrate, Gluster CLI is not giving proper
- // (complete) status
- taskStatus.setCode(Status.STATUS_CODE_COMMIT_PENDING);
- if (autoCommit) {
- commitMigration(serverName);
- return getTaskInfo().getStatus(); // return the committed status
- } else {
- taskStatus.setMessage(processResult.getOutput().trim()
- .replaceAll("Migration complete", "Commit pending"));
- }
- } else if (processResult.getOutput().trim().matches("^Number of files migrated.*Current file=.*")) {
- taskStatus.setCode(Status.STATUS_CODE_RUNNING);
- } else {
- taskStatus.setCode(Status.STATUS_CODE_FAILURE);
- }
- taskStatus.setMessage(processResult.getOutput());
- } catch (Exception e) {
- taskStatus.setCode(Status.STATUS_CODE_FAILURE);
- taskStatus.setMessage(e.getMessage());
- }
- taskInfo.setStatus(taskStatus); // Update the task status
- return taskStatus;
- }
-}
diff --git a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/tasks/RebalanceVolumeTask.java b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/tasks/RebalanceVolumeTask.java
deleted file mode 100644
index 134359fc..00000000
--- a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/tasks/RebalanceVolumeTask.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/**
- * RebalanceVolumeTask.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.gateway.tasks;
-
-import org.springframework.context.ApplicationContext;
-import org.springframework.web.context.ContextLoader;
-
-import com.gluster.storage.management.core.exceptions.ConnectionException;
-import com.gluster.storage.management.core.exceptions.GlusterRuntimeException;
-import com.gluster.storage.management.core.model.Status;
-import com.gluster.storage.management.core.model.TaskInfo.TASK_TYPE;
-import com.gluster.storage.management.core.model.TaskStatus;
-import com.gluster.storage.management.core.utils.ProcessResult;
-import com.gluster.storage.management.gateway.services.ClusterService;
-import com.gluster.storage.management.gateway.utils.GlusterUtil;
-import com.gluster.storage.management.gateway.utils.ServerUtil;
-import com.gluster.storage.management.gateway.utils.SshUtil;
-import com.sun.jersey.core.util.Base64;
-
-public class RebalanceVolumeTask extends Task {
-
- private String layout;
- private String serverName;
- private ServerUtil serverUtil;
- private GlusterUtil glusterUtil;
-
- public RebalanceVolumeTask(ClusterService clusterService, String clusterName, String volumeName, String layout) {
- super(clusterService, clusterName, TASK_TYPE.VOLUME_REBALANCE, volumeName, "Volume " + volumeName
- + " Rebalance", false, true, false);
- setLayout(layout);
- taskInfo.setName(getId());
- init();
- }
-
- private void init() {
- ApplicationContext ctx = ContextLoader.getCurrentWebApplicationContext();
- serverUtil = ctx.getBean(ServerUtil.class);
- glusterUtil = ctx.getBean(GlusterUtil.class);
- }
-
- @Override
- public String getId() {
- return new String(Base64.encode(getClusterName() + "-" + taskInfo.getType() + "-" + taskInfo.getReference()));
- }
-
- @Override
- public void start() {
- try {
- serverName = getOnlineServer().getName();
- startRebalance(serverName);
- } catch(ConnectionException e) {
- // online server might have gone offline. try with a new one
- serverName = getNewOnlineServer().getName();
- startRebalance(serverName);
- }
- }
-
- private void startRebalance(String serverName) {
- String command = "gluster volume rebalance " + getTaskInfo().getReference() + " " + getLayout() + " start";
- Object output = serverUtil.executeOnServer(true, serverName, command, String.class);
- if(output instanceof Status) {
- // Status object will be returned only in case of failure
- throw new GlusterRuntimeException(((Status)output).toString());
- }
- getTaskInfo().setStatus(new TaskStatus(new Status(Status.STATUS_CODE_RUNNING, (String)output)));
- }
-
- @Override
- public void resume() {
- getTaskInfo().setStatus(
- new TaskStatus(new Status(Status.STATUS_CODE_FAILURE,
- "Pause/Resume is not supported in Volume Rebalance")));
- }
-
- @Override
- public void stop() {
- try {
- glusterUtil.stopRebalance(serverName, getTaskInfo().getReference());
- } catch (ConnectionException e) {
- // online server might have gone offline. update the failure status
- getTaskInfo().setStatus(new TaskStatus(new Status(Status.STATUS_CODE_FAILURE, e.getMessage())));
- }
- }
-
- @Override
- public void pause() {
- getTaskInfo().setStatus(
- new TaskStatus(new Status(Status.STATUS_CODE_FAILURE,
- "Pause/Resume is not supported in Volume Rebalance")));
- }
-
- @Override
- public TaskStatus checkStatus() {
- try {
- return glusterUtil.checkRebalanceStatus(serverName, getTaskInfo().getReference());
- } catch(ConnectionException e) {
- // online server might have gone offline. update the failure status
- getTaskInfo().setStatus(new TaskStatus(new Status(Status.STATUS_CODE_FAILURE, e.getMessage())));
- return getTaskInfo().getStatus();
- }
- }
-
- public void setLayout(String layout) {
- this.layout = layout;
- }
-
- public String getLayout() {
- return layout;
- }
-
- @Override
- public void commit() {
- // TODO Auto-generated method stub
- }
-}
diff --git a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/utils/CpuStatsFactory.java b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/utils/CpuStatsFactory.java
deleted file mode 100644
index b6ef9ef2..00000000
--- a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/utils/CpuStatsFactory.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * 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.gateway.utils;
-
-import org.springframework.stereotype.Component;
-
-/**
- *
- */
-@Component
-public class CpuStatsFactory extends AbstractStatsFactory {
-
- private static final String CPU_STATS_SCRIPT = "get_rrd_cpu_details.py";
-
- @Override
- public String getStatsScriptName() {
- return CPU_STATS_SCRIPT;
- }
-
-}
diff --git a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/utils/GlusterUtil.java b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/utils/GlusterUtil.java
deleted file mode 100644
index 5db3926b..00000000
--- a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/utils/GlusterUtil.java
+++ /dev/null
@@ -1,662 +0,0 @@
-/**
- * GlusterUtil.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.gateway.utils;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import com.gluster.storage.management.core.constants.CoreConstants;
-import com.gluster.storage.management.core.constants.GlusterConstants;
-import com.gluster.storage.management.core.exceptions.GlusterRuntimeException;
-import com.gluster.storage.management.core.model.Brick;
-import com.gluster.storage.management.core.model.Brick.BRICK_STATUS;
-import com.gluster.storage.management.core.model.GlusterServer;
-import com.gluster.storage.management.core.model.InitDiskStatusResponse;
-import com.gluster.storage.management.core.model.InitDiskStatusResponse.FORMAT_STATUS;
-import com.gluster.storage.management.core.model.Server.SERVER_STATUS;
-import com.gluster.storage.management.core.model.Status;
-import com.gluster.storage.management.core.model.TaskStatus;
-import com.gluster.storage.management.core.model.Volume;
-import com.gluster.storage.management.core.model.Volume.TRANSPORT_TYPE;
-import com.gluster.storage.management.core.model.Volume.VOLUME_STATUS;
-import com.gluster.storage.management.core.model.Volume.VOLUME_TYPE;
-import com.gluster.storage.management.core.utils.GlusterCoreUtil;
-import com.gluster.storage.management.core.utils.ProcessResult;
-import com.gluster.storage.management.core.utils.StringUtil;
-import com.gluster.storage.management.gateway.resources.v1_0.TasksResource;
-
-@Component
-public class GlusterUtil {
- private static final String glusterFSminVersion = "3.1";
-
- private static final String HOSTNAME_PFX = "Hostname:";
- private static final String UUID_PFX = "Uuid:";
- private static final String STATE_PFX = "State:";
- private static final String GLUSTER_SERVER_STATUS_ONLINE = "Connected";
-
- private static final String VOLUME_NAME_PFX = "Volume Name:";
- private static final String VOLUME_TYPE_PFX = "Type:";
- private static final String VOLUME_STATUS_PFX = "Status:";
- private static final String VOLUME_NUMBER_OF_BRICKS = "Number of Bricks:";
- private static final String VOLUME_TRANSPORT_TYPE_PFX = "Transport-type:";
- private static final String VOLUME_BRICKS_GROUP_PFX = "Bricks";
- private static final String VOLUME_OPTIONS_RECONFIG_PFX = "Options Reconfigured";
- private static final String VOLUME_OPTION_AUTH_ALLOW_PFX = "auth.allow:";
- private static final String VOLUME_LOG_LOCATION_PFX = "log file location:";
- private static final String VOLUME_TYPE_DISTRIBUTE = "Distribute";
- private static final String VOLUME_TYPE_REPLICATE = "Replicate";
- private static final String GLUSTERD_INFO_FILE = "/etc/glusterd/glusterd.info";
-
- private static final GlusterCoreUtil glusterCoreUtil = new GlusterCoreUtil();
-
- private static final String INITIALIZE_DISK_STATUS_SCRIPT = "get_format_device_status.py";
-
- @Autowired
- private SshUtil sshUtil;
-
- @Autowired
- private ServerUtil serverUtil;
-
- @Autowired
- private TasksResource taskResource;
-
- public void setSshUtil(SshUtil sshUtil) {
- this.sshUtil = sshUtil;
- }
-
- public SshUtil getSshUtil() {
- return sshUtil;
- }
-
- /**
- * Extract value of given token from given line. It is assumed that the token, if present, will be of the following
- * form: <code>token: value</code>
- *
- * @param line
- * Line to be analyzed
- * @param token
- * Token whose value is to be extracted
- * @return Value of the token, if present in the line
- */
- private final String extractToken(String line, String token) {
- if (line.contains(token)) {
- return line.split(token)[1].trim();
- }
- return null;
- }
-
- public GlusterServer getGlusterServer(GlusterServer onlineServer, String serverName) {
- List<GlusterServer> servers = getGlusterServers(onlineServer);
- for (GlusterServer server : servers) {
- if (server.getName().equalsIgnoreCase(serverName)) {
- return server;
- }
- }
- return null;
- }
-
- private String getUuid(String serverName) {
- ProcessResult result = getSshUtil().executeRemote(serverName, "cat " + GLUSTERD_INFO_FILE);
- if (!result.isSuccess()) {
- throw new GlusterRuntimeException("Couldn't read file [" + GLUSTERD_INFO_FILE + "]. Error: "
- + result.toString());
- }
- return result.getOutput().split("=")[1];
- }
-
- public List<GlusterServer> getGlusterServers(GlusterServer knownServer) {
- String output = getPeerStatus(knownServer.getName());
- if (output == null) {
- return null;
- }
-
- knownServer.setUuid(getUuid(knownServer.getName()));
-
- List<GlusterServer> glusterServers = new ArrayList<GlusterServer>();
- glusterServers.add(knownServer);
-
- GlusterServer server = null;
- boolean foundHost = false;
- boolean foundUuid = false;
- for (String line : output.split(CoreConstants.NEWLINE)) {
- if (foundHost && foundUuid) {
- // Host and UUID is found, we should look for state
- String state = extractToken(line, STATE_PFX);
- if (state != null) {
- server.setStatus(state.contains(GLUSTER_SERVER_STATUS_ONLINE) ? SERVER_STATUS.ONLINE
- : SERVER_STATUS.OFFLINE);
- // Completed populating current server. Add it to the list
- // and reset all related variables.
- glusterServers.add(server);
-
- foundHost = false;
- foundUuid = false;
- server = null;
- }
- } else if (foundHost) {
- // Host is found, look for UUID
- String uuid = extractToken(line, UUID_PFX);
- if (uuid != null) {
- server.setUuid(uuid);
- foundUuid = true;
- }
- } else {
- // Look for the next host
- if (server == null) {
- server = new GlusterServer();
- }
- String hostName = extractToken(line, HOSTNAME_PFX);
- if (hostName != null) {
- server.setName(hostName);
- foundHost = true;
- }
- }
-
- }
- return glusterServers;
- }
-
- public List<String> getGlusterServerNames(String knownServer) {
- String output = getPeerStatus(knownServer);
- if (output == null) {
- return null;
- }
-
- List<String> glusterServerNames = new ArrayList<String>();
- for (String line : output.split(CoreConstants.NEWLINE)) {
- String hostName = extractToken(line, HOSTNAME_PFX);
- if (hostName != null) {
- glusterServerNames.add(hostName);
- }
- }
- return glusterServerNames;
- }
-
- /**
- * @param knownServer
- * A known server on which the gluster command will be executed to fetch peer status
- * @return Outout of the "gluster peer status" command
- */
- private String getPeerStatus(String knownServer) {
- String output;
- ProcessResult result = getSshUtil().executeRemote(knownServer, "gluster peer status");
- if (!result.isSuccess()) {
- output = null;
- }
- output = result.getOutput();
- return output;
- }
-
- public void addServer(String existingServer, String newServer) {
- ProcessResult result = sshUtil.executeRemote(existingServer, "gluster peer probe " + newServer);
- if(!result.isSuccess()) {
- throw new GlusterRuntimeException("Couldn't probe server [" + newServer + "] from [" + existingServer
- + "]. Error: " + result);
- }
-
- // reverse peer probe to ensure that host names appear in peer status on both sides
- result = sshUtil.executeRemote(newServer, "gluster peer probe " + existingServer);
- if(!result.isSuccess()) {
- throw new GlusterRuntimeException("Couldn't _reverse_ probe server [" + existingServer + "] from ["
- + newServer + "]. Error: " + result);
- }
- }
-
- public Status startVolume(String volumeName, String knownServer) {
- return new Status(sshUtil.executeRemote(knownServer, "gluster volume start " + volumeName));
- }
-
- public Status stopVolume(String volumeName, String knownServer) {
- return new Status(sshUtil.executeRemote(knownServer, "gluster --mode=script volume stop " + volumeName));
- }
-
- public void resetOptions(String volumeName, String knownServer) {
- ProcessResult result = sshUtil.executeRemote(knownServer, "gluster volume reset " + volumeName);
- if(!result.isSuccess()) {
- throw new GlusterRuntimeException("Couldn't reset options for volume [" + volumeName + "]! Error: "
- + result);
- }
- }
-
- public void createVolume(String knownServer, String volumeName, String volumeTypeStr, String transportTypeStr,
- Integer replicaCount, Integer stripeCount, String bricks, String accessProtocols, String options) {
-
- int count = 1; // replica or stripe count
-
- VOLUME_TYPE volType = Volume.getVolumeTypeByStr(volumeTypeStr);
- String volTypeArg = null;
- if (volType == VOLUME_TYPE.DISTRIBUTED_MIRROR) {
- volTypeArg = "replica";
- count = replicaCount;
- } else if (volType == VOLUME_TYPE.DISTRIBUTED_STRIPE) {
- volTypeArg = "stripe";
- count = stripeCount;
- }
-
- String transportTypeArg = null;
- TRANSPORT_TYPE transportType = Volume.getTransportTypeByStr(transportTypeStr);
- transportTypeArg = (transportType == TRANSPORT_TYPE.ETHERNET) ? "tcp" : "rdma";
-
- String command = prepareVolumeCreateCommand(volumeName, StringUtil.extractList(bricks, ","), count,
- volTypeArg, transportTypeArg);
- ProcessResult result = sshUtil.executeRemote(knownServer, command);
- if (!result.isSuccess()) {
- throw new GlusterRuntimeException("Error in creating volume [" + volumeName + "]: " + result);
- }
-
- try {
- createOptions(volumeName, StringUtil.extractMap(options, ",", "="), knownServer);
- } catch(Exception e) {
- throw new GlusterRuntimeException(
- "Volume created successfully, however following errors occurred while setting options: "
- + CoreConstants.NEWLINE + e.getMessage());
- }
- }
-
- private String prepareVolumeCreateCommand(String volumeName, List<String> brickDirectories, int count,
- String volumeType, String transportTypeStr) {
- StringBuilder command = new StringBuilder("gluster volume create " + volumeName + " ");
- if (volumeType != null) {
- command.append(volumeType + " " + count + " ");
- }
- command.append("transport " + transportTypeStr);
- for (String brickDir : brickDirectories) {
- command.append(" " + brickDir);
- }
- return command.toString();
- }
-
- public void createOptions(String volumeName, Map<String, String> options, String knownServer) {
- String errors = "";
- if (options != null) {
- for (Entry<String, String> option : options.entrySet()) {
- String key = option.getKey();
- String value = option.getValue();
-
- try {
- setOption(volumeName, key, value, knownServer);
- } catch(Exception e) {
- // append error
- errors += e.getMessage() + CoreConstants.NEWLINE;
- }
- }
- }
- if (!errors.trim().isEmpty()) {
- throw new GlusterRuntimeException("Errors while setting option(s) on volume [" + volumeName + "] : "
- + errors.trim());
- }
- }
-
- public void setOption(String volumeName, String key, String value, String knownServer) {
- ProcessResult result = sshUtil.executeRemote(knownServer, "gluster volume set " + volumeName + " " + key + " "
- + "\"" + value + "\"");
- if (!result.isSuccess()) {
- throw new GlusterRuntimeException("Volume [" + volumeName + "] set [" + key + "=" + value + "] => "
- + result);
- }
- }
-
- public Status deleteVolume(String volumeName, String knownServer) {
- return new Status(sshUtil.executeRemote(knownServer, "gluster --mode=script volume delete " + volumeName));
- }
-
- private String getVolumeInfo(String volumeName, String knownServer) {
- ProcessResult result = sshUtil.executeRemote(knownServer, "gluster volume info " + volumeName);
- if (!result.isSuccess()) {
- throw new GlusterRuntimeException("Command [gluster volume info " + volumeName + "] failed on ["
- + knownServer + "] with error: " + result);
- }
- return result.getOutput();
- }
-
- private String getVolumeInfo(String knownServer) {
- ProcessResult result = sshUtil.executeRemote(knownServer, "gluster volume info ");
- if (!result.isSuccess()) {
- throw new GlusterRuntimeException("Command [gluster volume info] failed on [" + knownServer
- + "] with error: " + result);
- }
- return result.getOutput();
- }
-
- private boolean readVolumeType(Volume volume, String line) {
- String volumeType = extractToken(line, VOLUME_TYPE_PFX);
- if (volumeType != null) {
- if (volumeType.equals(VOLUME_TYPE_DISTRIBUTE)) {
- volume.setVolumeType(VOLUME_TYPE.PLAIN_DISTRIBUTE);
- } else if (volumeType.equals(VOLUME_TYPE_REPLICATE)) {
- volume.setVolumeType(VOLUME_TYPE.DISTRIBUTED_MIRROR);
- volume.setReplicaCount(Volume.DEFAULT_REPLICA_COUNT);
- } else {
- volume.setVolumeType(VOLUME_TYPE.DISTRIBUTED_STRIPE);
- volume.setStripeCount(Volume.DEFAULT_STRIPE_COUNT);
- }
- return true;
- }
- return false;
- }
-
- private void readReplicaOrStripeCount(Volume volume, String line) {
- if (extractToken(line, "x") != null) {
- // expected formated of line is "Number of Bricks: 3 x 2 = 6"
- int count = Integer.parseInt(line.split("x")[1].split("=")[0].trim());
- if (volume.getVolumeType() == VOLUME_TYPE.DISTRIBUTED_STRIPE) {
- volume.setStripeCount(count);
- } else if (volume.getVolumeType() == VOLUME_TYPE.DISTRIBUTED_MIRROR) {
- volume.setReplicaCount(count);
- volume.setStripeCount(0);
- }
-
- }
- return;
- }
-
- private boolean readVolumeStatus(Volume volume, String line) {
- String volumeStatus = extractToken(line, VOLUME_STATUS_PFX);
- if (volumeStatus != null) {
- volume.setStatus(volumeStatus.equals("Started") ? VOLUME_STATUS.ONLINE : VOLUME_STATUS.OFFLINE);
- return true;
- }
- return false;
- }
-
- private boolean readTransportType(Volume volume, String line) {
- String transportType = extractToken(line, VOLUME_TRANSPORT_TYPE_PFX);
- if (transportType != null) {
- volume.setTransportType(transportType.equals("tcp") ? TRANSPORT_TYPE.ETHERNET : TRANSPORT_TYPE.INFINIBAND);
- return true;
- }
- return false;
- }
-
- private boolean readBrick(Volume volume, String brickLine) {
- BRICK_STATUS brickStatus;
- if (brickLine.matches("Brick[0-9]+:.*")) {
- // line: "Brick1: server1:/export/md0/volume-name"
- String brickName = brickLine.split(": ")[1];
- String[] brickParts = brickLine.split(":");
- String serverName = brickParts[1].trim();
- String brickDir = brickParts[2].trim();
- //To get the brick status
- brickStatus = getBrickStatus(serverName, volume.getName(), brickName);
-
- addBrickToVolume(volume, serverName, brickDir, brickStatus);
- return true;
- }
- return false;
- }
-
- private void addBrickToVolume(Volume volume, String serverName, String brickDir, BRICK_STATUS status) {
- //If brick directory has standard path, find and assign device name otherwise null
-// String stdBrickDirPattern = "^/export/.*/.*"; // e.g: /export/sdb/test
- String deviceName = null;
-// if (Pattern.matches(stdBrickDirPattern, brickDir) ) {
-// deviceName = brickDir.split("/")[2].trim();
-// }
- volume.addBrick(new Brick(serverName, status, brickDir));
- }
-
- // Do not throw exception, Gracefully handle as Offline brick.
- private BRICK_STATUS getBrickStatus(String serverName, String volumeName, String brick){
- try {
- ProcessResult output = getSshUtil().executeRemote(serverName, "get_brick_status.py" + " " + volumeName + " " + brick);
-
- if (output.isSuccess() && output.getOutput().equals(CoreConstants.ONLINE)) {
- return BRICK_STATUS.ONLINE;
- } else {
- return BRICK_STATUS.OFFLINE;
- }
- } catch(Exception e) { // Particularly interested on ConnectionExecption, if the server is offline
- return BRICK_STATUS.OFFLINE;
- }
- }
-
- private boolean readBrickGroup(String line) {
- return extractToken(line, VOLUME_BRICKS_GROUP_PFX) != null;
- }
-
- private boolean readOptionReconfigGroup(String line) {
- return extractToken(line, VOLUME_OPTIONS_RECONFIG_PFX) != null;
- }
-
- private boolean readOption(Volume volume, String line) {
- if (line.matches("^[^:]*:.*$")) {
- int index = line.indexOf(':');
- volume.setOption(line.substring(0, index).trim(), line.substring(index + 1, line.length()).trim());
-
- if (line.substring(0, index).trim().equals(Volume.OPTION_NFS_DISABLE)) {
- if (line.substring(index + 1, line.length()).trim().equals(GlusterConstants.ON)) {
- volume.disableNFS();
- } else {
- volume.enableNFS();
- }
- }
-
- return true;
- }
- return false;
- }
-
- public Volume getVolume(String volumeName, String knownServer) {
- return parseVolumeInfo(getVolumeInfo(volumeName, knownServer)).get(0);
- }
-
- public List<Volume> getAllVolumes(String knownServer) {
- return parseVolumeInfo(getVolumeInfo(knownServer));
- }
-
- private List<Volume> parseVolumeInfo(String volumeInfoText) {
- List<Volume> volumes = new ArrayList<Volume>();
- boolean isBricksGroupFound = false;
- boolean isOptionReconfigFound = false;
- Volume volume = null;
-
- for (String line : volumeInfoText.split(CoreConstants.NEWLINE)) {
- String volumeName = extractToken(line, VOLUME_NAME_PFX);
- if (volumeName != null) {
- if (volume != null) {
- volumes.add(volume);
- }
-
- // prepare next volume to be read
- volume = new Volume();
- volume.setName(volumeName);
- isBricksGroupFound = isOptionReconfigFound = false;
- continue;
- }
-
- if (readVolumeType(volume, line))
- continue;
- if (extractToken(line, VOLUME_NUMBER_OF_BRICKS) != null) {
- readReplicaOrStripeCount(volume, line);
- }
- if (readVolumeStatus(volume, line))
- continue;
- if (readTransportType(volume, line))
- continue;
- if (readBrickGroup(line)) {
- isBricksGroupFound = true;
- continue;
- }
-
- if (isBricksGroupFound) {
- if (readBrick(volume, line)) {
- continue;
- } else {
- isBricksGroupFound = false;
- }
- }
-
- if (readOptionReconfigGroup(line)) {
- isOptionReconfigFound = true;
- continue;
- }
-
- if (isOptionReconfigFound) {
- if (readOption(volume, line)) {
- continue;
- } else {
- isOptionReconfigFound = false;
- }
- }
- }
-
- if (volume != null) {// Adding the last volume parsed
- volumes.add(volume);
- }
-
- return volumes;
- }
-
- public void addBricks(String volumeName, List<String> bricks, String knownServer) {
- StringBuilder command = new StringBuilder("gluster volume add-brick " + volumeName);
- for (String brickDir : bricks) {
- command.append(" " + brickDir);
- }
-
- ProcessResult result = sshUtil.executeRemote(knownServer, command.toString());
- if(!result.isSuccess()) {
- throw new GlusterRuntimeException("Error in volume [" + volumeName + "] add-brick [" + bricks + "]: "
- + result);
- }
- }
-
- public String getLogLocation(String volumeName, String brickName, String knownServer) {
- String command = "gluster volume log locate " + volumeName + " " + brickName;
- ProcessResult result = sshUtil.executeRemote(knownServer, command);
- if (!result.isSuccess()) {
- throw new GlusterRuntimeException("Command [" + command + "] failed with error: [" + result.getExitValue()
- + "][" + result.getOutput() + "]");
- }
- String output = result.getOutput();
- if (output.startsWith(VOLUME_LOG_LOCATION_PFX)) {
- return output.substring(VOLUME_LOG_LOCATION_PFX.length()).trim();
- }
-
- throw new GlusterRuntimeException("Couldn't parse output of command [" + command + "]. Output [" + output
- + "] doesn't start with prefix [" + VOLUME_LOG_LOCATION_PFX + "]");
- }
-
- //TODO File.separator should be changed if gateway runs on windows/mac
- public String getLogFileNameForBrickDir(String brickDir) {
- String logFileName = brickDir;
- if (logFileName.startsWith(File.separator)) {
- logFileName = logFileName.replaceFirst(File.separator, "");
- }
- logFileName = logFileName.replaceAll(File.separator, "-") + ".log";
- return logFileName;
- }
-
- public Status removeBricks(String volumeName, List<String> bricks, String knownServer) {
- StringBuilder command = new StringBuilder("gluster --mode=script volume remove-brick " + volumeName);
- for (String brickDir : bricks) {
- command.append(" " + brickDir);
- }
- return new Status(sshUtil.executeRemote(knownServer, command.toString()));
- }
-
- public void removeServer(String existingServer, String serverName) {
- ProcessResult result = sshUtil.executeRemote(existingServer, "gluster --mode=script peer detach " + serverName);
- if(!result.isSuccess()) {
- throw new GlusterRuntimeException("Couldn't remove server [" + serverName + "]! Error: " + result);
- }
- }
-
- public TaskStatus checkRebalanceStatus(String serverName, String volumeName) {
- String command = "gluster volume rebalance " + volumeName + " status";
- ProcessResult processResult = sshUtil.executeRemote(serverName, command);
- TaskStatus taskStatus = new TaskStatus();
- if (processResult.isSuccess()) {
- if (processResult.getOutput().trim().matches("^rebalance completed.*")) {
- taskStatus.setCode(Status.STATUS_CODE_SUCCESS);
- } else if(processResult.getOutput().trim().matches(".*in progress.*")) {
- taskStatus.setCode(Status.STATUS_CODE_RUNNING);
- } else {
- taskStatus.setCode(Status.STATUS_CODE_FAILURE);
- }
- } else {
- taskStatus.setCode(Status.STATUS_CODE_FAILURE);
- }
- taskStatus.setMessage(processResult.getOutput()); // Common
- return taskStatus;
- }
-
- public void stopRebalance(String serverName, String volumeName) {
- String command = "gluster volume rebalance " + volumeName + " stop";
- ProcessResult processResult = sshUtil.executeRemote(serverName, command);
- TaskStatus taskStatus = new TaskStatus();
- if (processResult.isSuccess()) {
- taskStatus.setCode(Status.STATUS_CODE_SUCCESS);
- taskStatus.setMessage(processResult.getOutput());
- }
- }
-
- public TaskStatus getInitializingDeviceStatus(String serverName, String diskName) {
- Object response = serverUtil.executeScriptOnServer(true, serverName, INITIALIZE_DISK_STATUS_SCRIPT + " "
- + diskName, InitDiskStatusResponse.class);
-
- TaskStatus taskStatus = new TaskStatus();
- if (response instanceof Status) {
- taskStatus.setCode(Status.STATUS_CODE_FAILURE);
- taskStatus.setMessage(((Status) response).getMessage());
- throw new GlusterRuntimeException(((Status) response).getMessage());
- }
-
- InitDiskStatusResponse initDiskStatusResponse = (InitDiskStatusResponse) response;
-
- if (initDiskStatusResponse.getFormatStatus() == FORMAT_STATUS.COMPLETED) {
- taskStatus.setCode(Status.STATUS_CODE_SUCCESS);
- } else if (initDiskStatusResponse.getFormatStatus() == FORMAT_STATUS.IN_PROGRESS) {
- 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;
- }
-
- public ProcessResult executeBrickMigration(String onlineServerName, String volumeName, String fromBrick,
- String toBrick, String operation) {
- String command = "gluster volume replace-brick " + volumeName + " " + fromBrick + " " + toBrick + " " + operation;
- ProcessResult processResult = sshUtil.executeRemote(onlineServerName, command);
- if (!processResult.isSuccess()) {
- throw new GlusterRuntimeException(processResult.toString());
- }
- return processResult;
- }
-
- public static void main(String args[]) {
- // List<String> names = new GlusterUtil().getGlusterServerNames();
- // System.out.println(names);
- List<String> disks = new ArrayList<String>();
- disks.add("server1:sda");
- disks.add("server1:sdb");
- new GlusterUtil().addBricks("Volume3", disks, "localhost");
- }
-}
diff --git a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/utils/NetworkStatsFactory.java b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/utils/NetworkStatsFactory.java
deleted file mode 100644
index d3d47c58..00000000
--- a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/utils/NetworkStatsFactory.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*******************************************************************************
- * 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.gateway.utils;
-
-import java.util.List;
-
-import org.apache.log4j.Logger;
-import org.springframework.stereotype.Component;
-
-import com.gluster.storage.management.core.exceptions.GlusterRuntimeException;
-import com.gluster.storage.management.core.model.NetworkInterface;
-import com.gluster.storage.management.core.model.Server;
-import com.gluster.storage.management.core.model.ServerStats;
-import com.gluster.storage.management.core.model.ServerStatsRow;
-
-/**
- *
- */
-@Component
-public class NetworkStatsFactory extends AbstractStatsFactory {
- private static final Logger logger = Logger.getLogger(NetworkStatsFactory.class);
- private static final String NETWORK_STATS_SCRIPT = "get_rrd_net_details.py";
- private int[][] dataCount;
-
- @Override
- public String getStatsScriptName() {
- return NETWORK_STATS_SCRIPT;
- }
-
- @Override
- protected ServerStats getFirstOnlineServerStats(List<String> serverNames, String period,
- boolean removeServerOnError, boolean removeOnlineServer) {
- ServerStats firstOnlineServerStats = null;
- for(int i = serverNames.size() - 1; i >= 0; i--) {
- String serverName = serverNames.get(i);
- Server server = new Server(serverName);
- serverUtil.fetchServerDetails(server);
- try {
- for(NetworkInterface networkInterface : server.getNetworkInterfaces()) {
- ServerStats stats = fetchStats(serverName, period, networkInterface.getName());
- if(firstOnlineServerStats == null) {
- firstOnlineServerStats = stats;
- int rowCount = firstOnlineServerStats.getMetadata().getRowCount();
- int columnCount = firstOnlineServerStats.getMetadata().getLegend().size();
- dataCount = initDataCountArray(rowCount, columnCount);
- } else {
- addServerStats(stats, firstOnlineServerStats, dataCount);
- }
- }
-
- if(removeOnlineServer) {
- serverNames.remove(serverName);
- }
- return firstOnlineServerStats;
- } catch(Exception e) {
- // server might be offline - continue with next one
- logger.warn("Couldn't fetch stats from server [" + serverName + "]!", e);
- if(removeServerOnError) {
- serverNames.remove(serverName);
- }
- continue;
- }
- }
- throw new GlusterRuntimeException("All servers offline!");
- }
-
- protected void aggregateStats(List<String> serverNames, ServerStats aggregatedStats, String period) {
- if(serverNames.isEmpty()) {
- return;
- }
-
- for (String serverName : serverNames) {
- try {
- Server server = new Server(serverName);
- serverUtil.fetchServerDetails(server);
-
- for (NetworkInterface networkInterface : server.getNetworkInterfaces()) {
- // fetch the stats and add to aggregated stats
- addServerStats(fetchStats(serverName, period, networkInterface.getName()), aggregatedStats, dataCount);
- }
- } catch(Exception e) {
- // server might be offline - continue with next one
- logger.warn("Couldn't fetch Network stats from server [" + serverName + "]!", e);
- continue;
- }
- }
-
- averageAggregatedStats(aggregatedStats, dataCount);
- }
-
- @Override
- public ServerStats fetchStats(String serverName, String period, String... args) {
- ServerStats stats = super.fetchStats(serverName, period, args);
-
- // the data returned by rrd contains "bytes" transferred in the given time step. Update the stats object to represent KiB/s
- int step = stats.getMetadata().getStep();
- for(ServerStatsRow row : stats.getRows()) {
- List<Double> data = row.getUsageData();
- for (int i = 0; i < data.size(); i++) {
- Double val = data.get(i);
- data.set(i, val / 1024 / step);
- }
- }
-
- return stats;
- }
-}
diff --git a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/utils/ServerUtil.java b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/utils/ServerUtil.java
deleted file mode 100644
index 6cd8303c..00000000
--- a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/utils/ServerUtil.java
+++ /dev/null
@@ -1,289 +0,0 @@
-/**
- * ServerUtil.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.gateway.utils;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.util.ArrayList;
-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;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import com.gluster.storage.management.core.constants.CoreConstants;
-import com.gluster.storage.management.core.exceptions.ConnectionException;
-import com.gluster.storage.management.core.exceptions.GlusterRuntimeException;
-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.Status;
-import com.gluster.storage.management.core.response.GenericResponse;
-import com.gluster.storage.management.core.utils.ProcessResult;
-import com.gluster.storage.management.core.utils.ProcessUtil;
-
-@Component
-public class ServerUtil {
- @Autowired
- ServletContext servletContext;
-
- @Autowired
- private SshUtil sshUtil;
-
- @Autowired
- private String appVersion;
-
- private static final Logger logger = Logger.getLogger(ServerUtil.class);
-
- private static final String SCRIPT_DIR = "scripts";
- private static final String SCRIPT_COMMAND = "python";
- private static final String REMOTE_SCRIPT_GET_DISK_FOR_DIR = "get_disk_for_dir.py";
- private static final String REMOTE_SCRIPT_GET_SERVER_DETAILS = "get_server_details.py";
- private static final String REMOTE_SCRIPT_BASE_DIR = "/opt/glustermg";
- private static final String REMOTE_SCRIPT_DIR_NAME = "backend";
-
- public void setSshUtil(SshUtil sshUtil) {
- this.sshUtil = sshUtil;
- }
-
- public ProcessResult executeGlusterScript(boolean runInForeground, String scriptName, List<String> arguments) {
- List<String> command = new ArrayList<String>();
-
- command.add(SCRIPT_COMMAND);
- command.add(getScriptPath(scriptName));
- command.addAll(arguments);
- return new ProcessUtil().executeCommand(runInForeground, command);
- }
-
- private String getScriptPath(String scriptName) {
- return servletContext.getRealPath(SCRIPT_DIR) + CoreConstants.FILE_SEPARATOR + scriptName;
- }
-
- private String getRemoteScriptDir() {
- return REMOTE_SCRIPT_BASE_DIR + File.separator + appVersion + File.separator + REMOTE_SCRIPT_DIR_NAME;
- }
-
- /**
- * Fetch details of the given server. The server name must be populated in the object before calling this method.
- *
- * @param server
- * Server whose details are to be fetched
- */
- public void fetchServerDetails(Server server) {
- Object response = fetchServerDetails(server.getName());
- server.copyFrom((Server) response); // Update the details in <Server> object
- server.setDisks(((Server) response).getDisks());
- }
-
- public String fetchHostName(String serverName) {
- Object response = fetchServerDetails(serverName);
- return ((Server) response).getName();
- }
-
- private Object fetchServerDetails(String serverName) {
- // fetch standard server details like cpu, disk, memory details
- Object response = executeScriptOnServer(true, serverName, REMOTE_SCRIPT_GET_SERVER_DETAILS, Server.class);
- if (response instanceof Status) {
- throw new GlusterRuntimeException(((Status) response).getMessage());
- }
- return response;
- }
-
- /**
- * Executes given script on given server. Since the remote server may contain multiple versions of backend, this
- * method will invoke the script present in directory of same version as the gateway.
- *
- * @param runInForeground
- * @param serverName
- * @param scriptWithArgs
- * The script name followed by arguments to be passed. Note that the script name should not contain path
- * as it will be automatically identified by the method.
- * @param expectedClass
- * Class of the object expected from script execution
- * @return Object of the expected class from remote execution of the command. In case the remote execution fails
- * ungracefully, an object of class {@link Status} will be returned.
- */
- public Object executeScriptOnServer(boolean runInForeground, String serverName, String scriptWithArgs,
- @SuppressWarnings("rawtypes") Class expectedClass) {
- return executeOnServer(runInForeground, serverName, getRemoteScriptDir() + File.separator + scriptWithArgs, expectedClass);
- }
-
- /**
- * Executes given command on given server
- *
- * @param runInForeground
- * @param serverName
- * @param commandWithArgs
- * @param expectedClass
- * Class of the object expected from script execution
- * @return Object of the expected class from remote execution of the command. In case the remote execution fails
- * ungracefully, an object of class {@link Status} will be returned.
- */
- @SuppressWarnings("rawtypes")
- public Object executeOnServer(boolean runInForeground, String serverName, String commandWithArgs,
- Class expectedClass) {
- try {
- String output = executeOnServer(serverName, commandWithArgs);
- if(expectedClass == String.class) {
- return output;
- }
-
- // In case the script execution exits ungracefully, the agent would return a GenericResponse.
- // hence pass last argument as true to try GenericResponse unmarshalling in such cases.
- Object response = unmarshal(expectedClass, output, expectedClass != GenericResponse.class);
- if (expectedClass != GenericResponse.class && response instanceof GenericResponse) {
- // expected class was not GenericResponse, but that's what we got. This means the
- // script failed ungracefully. Extract and return the status object from the response
- return ((GenericResponse) response).getStatus();
- }
- return response;
- } catch (RuntimeException e) {
- // Except for connection exception, wrap any other exception in the a object and return it.
- if (e instanceof ConnectionException) {
- throw e;
- } else {
- // error during unmarshalling. return status with error from exception.
- return new Status(e);
- }
- }
- }
-
- private String executeOnServer(String serverName, String commandWithArgs) {
- ProcessResult result = sshUtil.executeRemote(serverName, commandWithArgs);
-
- if (!result.isSuccess()) {
- throw new GlusterRuntimeException("Command [" + commandWithArgs + "] failed on [" + serverName
- + "] with error [" + result.getExitValue() + "][" + result.getOutput() + "]");
- }
- return result.getOutput();
- }
-
- // This is the old executeOnServer that used socket communication.
- // We can keep it commented for the time being.
- // private String executeOnServerUsingSocket(String serverName, String commandWithArgs) {
- // try {
- // InetAddress address = InetAddress.getByName(serverName);
- // Socket connection = new Socket(address, 50000);
- //
- // PrintWriter writer = new PrintWriter(connection.getOutputStream(), true);
- // writer.println(commandWithArgs);
- // writer.println(); // empty line means end of request
- //
- // InputStream inputStream = connection.getInputStream();
- // int available = inputStream.available();
- //
- // StringBuffer output = new StringBuffer();
- // if( available > 0 ) {
- // // This happens when PeerAgent sends complete file
- // byte[] responseData = new byte[available];
- // inputStream.read(responseData);
- // output.append(new String(responseData, "UTF-8"));
- // } else {
- // // This happens in case of normal XML response from PeerAgent
- // BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
- //
- // String line;
- // while (!(line = reader.readLine()).trim().isEmpty()) {
- // output.append(line + CoreConstants.NEWLINE);
- // }
- // }
- // connection.close();
- //
- // return output.toString();
- // } catch (Exception e) {
- // throw new GlusterRuntimeException("Error during remote execution: [" + e.getMessage() + "]");
- // }
- // }
-
- public void getFileFromServer(String serverName, String remoteFileName, String localDirName) {
- sshUtil.getFile(serverName, remoteFileName, localDirName);
- }
-
- /**
- * Unmarshals given input string into object of given class
- *
- * @param expectedClass
- * Class whose object is expected
- * @param input
- * Input string
- * @param tryGenericResponseOnFailure
- * If true, and if the unmarshalling fails for given class, another unmarshalling will be attempted with
- * class {@link GenericResponse}. If this also fails, a status object with exception message is created
- * and returned.
- * @return Object of given expected class, or a status object in case first unmarshalling fails.
- */
- @SuppressWarnings("rawtypes")
- private Object unmarshal(Class expectedClass, String input, boolean tryGenericResponseOnFailure) {
- try {
- // create JAXB context and instantiate marshaller
- JAXBContext context = JAXBContext.newInstance(expectedClass);
- Unmarshaller um = context.createUnmarshaller();
- return um.unmarshal(new ByteArrayInputStream(input.getBytes()));
- } catch (JAXBException e) {
- if (tryGenericResponseOnFailure) {
- // unmarshalling failed. try to unmarshal a GenericResponse object
- return unmarshal(GenericResponse.class, input, false);
-
- }
- return new Status(Status.STATUS_CODE_FAILURE, "Error during unmarshalling string [" + input
- + "] for class [" + expectedClass.getName() + ": [" + e.getMessage() + "]");
- }
- }
-
- /**
- * @param serverName
- * Server on which the directory is present
- * @param brickDir
- * Directory whose disk is to be fetched
- * @return Status object containing the disk name, or error message in case the remote script fails.
- */
- public Status getDiskForDir(String serverName, String brickDir) {
- return (Status) executeScriptOnServer(true, serverName, REMOTE_SCRIPT_GET_DISK_FOR_DIR + " " + brickDir, Status.class);
- }
-
- public static void main(String[] args) {
-// ServerStats stats = new ServerUtil().fetchCPUUsageData("s1", "1d");
-// 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.gateway/src/com/gluster/storage/management/gateway/utils/StatsFactory.java b/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/utils/StatsFactory.java
deleted file mode 100644
index 09851367..00000000
--- a/src/com.gluster.storage.management.gateway/src/com/gluster/storage/management/gateway/utils/StatsFactory.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*******************************************************************************
- * 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.gateway.utils;
-
-import java.util.List;
-
-import com.gluster.storage.management.core.model.ServerStats;
-
-/**
- *
- */
-public interface StatsFactory {
- public ServerStats fetchStats(String serverName, String period, String...args);
- public ServerStats fetchAggregatedStats(List<String> serverName, String period);
-}
diff --git a/src/com.gluster.storage.management.gateway/src/log4j.properties b/src/com.gluster.storage.management.gateway/src/log4j.properties
deleted file mode 100644
index bde9e66f..00000000
--- a/src/com.gluster.storage.management.gateway/src/log4j.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-log4j.rootLogger=INFO, R
-
-log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
-log4j.appender.CONSOLE.immediateFlush=true
-log4j.appender.CONSOLE.target=System.out
-log4j.appender.CONSOLE.threshold=DEBUG
-log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
-log4j.appender.CONSOLE.layout.ConversionPattern=%d{dd MMM, yyyy HH:mm:ss} %p: %c %t - %m%n
-
-log4j.appender.R=org.apache.log4j.RollingFileAppender
-log4j.appender.R.File=/var/log/glustermg/glustermg.log
-log4j.appender.R.MaxFileSize=10MB
-log4j.appender.R.MaxBackupIndex=10
-log4j.appender.R.layout=org.apache.log4j.PatternLayout
-log4j.appender.R.layout.ConversionPattern=%d{dd MMM, yyyy HH:mm:ss} %p: %c %t - %m%n
-#log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
-
-log4j.logger.org=ERROR
-log4j.logger.com=ERROR
-log4j.logger.com.gluster=DEBUG \ No newline at end of file
diff --git a/src/com.gluster.storage.management.gui.feature.webstart/build.properties b/src/com.gluster.storage.management.gui.feature.webstart/build.properties
deleted file mode 100644
index 322a3114..00000000
--- a/src/com.gluster.storage.management.gui.feature.webstart/build.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#bin.includes = feature.xml
-root=rootfiles
diff --git a/src/com.gluster.storage.management.gui.feature.webstart/build/gluster.keystore b/src/com.gluster.storage.management.gui.feature.webstart/build/gluster.keystore
deleted file mode 100644
index ee3bc3a9..00000000
--- a/src/com.gluster.storage.management.gui.feature.webstart/build/gluster.keystore
+++ /dev/null
Binary files differ
diff --git a/src/com.gluster.storage.management.gui.feature.webstart/rootfiles/index.html b/src/com.gluster.storage.management.gui.feature.webstart/rootfiles/index.html
deleted file mode 100644
index 70f47279..00000000
--- a/src/com.gluster.storage.management.gui.feature.webstart/rootfiles/index.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<html>
-<head>
-<title>Gluster Storage Platform</title>
-</head>
-<body>
-<a href="http://192.168.1.123:8080/glustersp-webstart/linux.gtk.x86_64/gluster-management-console.jnlp">Gluster Storage Platform</a>
-</body>
-</html>
diff --git a/src/com.gluster.storage.management.gui.feature.webstart/rootfiles/splash.jpg b/src/com.gluster.storage.management.gui.feature.webstart/rootfiles/splash.jpg
deleted file mode 100644
index d03cf87b..00000000
--- a/src/com.gluster.storage.management.gui.feature.webstart/rootfiles/splash.jpg
+++ /dev/null
Binary files differ
diff --git a/src/com.gluster.storage.management.gui.feature/.project b/src/com.gluster.storage.management.gui.feature/.project
deleted file mode 100644
index c93780b5..00000000
--- a/src/com.gluster.storage.management.gui.feature/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>com.gluster.storage.management.gui.feature</name>
- <comment></comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.pde.FeatureBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.pde.FeatureNature</nature>
- </natures>
-</projectDescription>
diff --git a/src/com.gluster.storage.management.gui.feature/build.properties b/src/com.gluster.storage.management.gui.feature/build.properties
deleted file mode 100644
index 64f93a9f..00000000
--- a/src/com.gluster.storage.management.gui.feature/build.properties
+++ /dev/null
@@ -1 +0,0 @@
-bin.includes = feature.xml
diff --git a/src/com.gluster.storage.management.gui/build.properties b/src/com.gluster.storage.management.gui/build.properties
deleted file mode 100644
index 47ced62b..00000000
--- a/src/com.gluster.storage.management.gui/build.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
- .,\
- icons/,\
- product_lg.gif,\
- splash.bmp,\
- splash/,\
- images/,\
- plugin.xml,\
- preferences.ini
-src.includes = icons/,\
- splash.bmp,\
- images/,\
- preferences.ini
diff --git a/src/com.gluster.storage.management.gui/icons/tango/16x16/arrow-down.png b/src/com.gluster.storage.management.gui/icons/tango/16x16/arrow-down.png
deleted file mode 100644
index 7f23e3f4..00000000
--- a/src/com.gluster.storage.management.gui/icons/tango/16x16/arrow-down.png
+++ /dev/null
Binary files differ
diff --git a/src/com.gluster.storage.management.gui/icons/tango/16x16/arrow-up.png b/src/com.gluster.storage.management.gui/icons/tango/16x16/arrow-up.png
deleted file mode 100644
index b8ad3050..00000000
--- a/src/com.gluster.storage.management.gui/icons/tango/16x16/arrow-up.png
+++ /dev/null
Binary files differ
diff --git a/src/com.gluster.storage.management.gui/icons/tango/16x16/pause.png b/src/com.gluster.storage.management.gui/icons/tango/16x16/pause.png
deleted file mode 100644
index e1bd14d9..00000000
--- a/src/com.gluster.storage.management.gui/icons/tango/16x16/pause.png
+++ /dev/null
Binary files differ
diff --git a/src/com.gluster.storage.management.gui/icons/tango/16x16/running-task.png b/src/com.gluster.storage.management.gui/icons/tango/16x16/running-task.png
deleted file mode 100644
index 48967253..00000000
--- a/src/com.gluster.storage.management.gui/icons/tango/16x16/running-task.png
+++ /dev/null
Binary files differ
diff --git a/src/com.gluster.storage.management.gui/icons/tango/16x16/start.png b/src/com.gluster.storage.management.gui/icons/tango/16x16/start.png
deleted file mode 100644
index 2d6c7ab9..00000000
--- a/src/com.gluster.storage.management.gui/icons/tango/16x16/start.png
+++ /dev/null
Binary files differ
diff --git a/src/com.gluster.storage.management.gui/icons/tango/16x16/stop.png b/src/com.gluster.storage.management.gui/icons/tango/16x16/stop.png
deleted file mode 100644
index 78c4433d..00000000
--- a/src/com.gluster.storage.management.gui/icons/tango/16x16/stop.png
+++ /dev/null
Binary files differ
diff --git a/src/com.gluster.storage.management.gui/icons/tango/16x16/task-completed.png b/src/com.gluster.storage.management.gui/icons/tango/16x16/task-completed.png
deleted file mode 100644
index b71b825e..00000000
--- a/src/com.gluster.storage.management.gui/icons/tango/16x16/task-completed.png
+++ /dev/null
Binary files differ
diff --git a/src/com.gluster.storage.management.gui/icons/tango/16x16/task-error.png b/src/com.gluster.storage.management.gui/icons/tango/16x16/task-error.png
deleted file mode 100644
index 0488fd0d..00000000
--- a/src/com.gluster.storage.management.gui/icons/tango/16x16/task-error.png
+++ /dev/null
Binary files differ
diff --git a/src/com.gluster.storage.management.gui/icons/tango/22x22/offline-brick.png b/src/com.gluster.storage.management.gui/icons/tango/22x22/offline-brick.png
deleted file mode 100644
index 57694d4b..00000000
--- a/src/com.gluster.storage.management.gui/icons/tango/22x22/offline-brick.png
+++ /dev/null
Binary files differ
diff --git a/src/com.gluster.storage.management.gui/icons/tango/32x32/volume-create.png b/src/com.gluster.storage.management.gui/icons/tango/32x32/volume-create.png
deleted file mode 100644
index fcd15c01..00000000
--- a/src/com.gluster.storage.management.gui/icons/tango/32x32/volume-create.png
+++ /dev/null
Binary files differ
diff --git a/src/com.gluster.storage.management.gui/icons/tango/48x48/volume-create.png b/src/com.gluster.storage.management.gui/icons/tango/48x48/volume-create.png
deleted file mode 100644
index 967d1844..00000000
--- a/src/com.gluster.storage.management.gui/icons/tango/48x48/volume-create.png
+++ /dev/null
Binary files differ
diff --git a/src/com.gluster.storage.management.gui/icons/tango/48x48/volume.png b/src/com.gluster.storage.management.gui/icons/tango/48x48/volume.png
deleted file mode 100644
index 4bd1a2aa..00000000
--- a/src/com.gluster.storage.management.gui/icons/tango/48x48/volume.png
+++ /dev/null
Binary files differ
diff --git a/src/com.gluster.storage.management.gui/icons/tango/scalable/task_running.svg b/src/com.gluster.storage.management.gui/icons/tango/scalable/task_running.svg
deleted file mode 100644
index b11372f5..00000000
--- a/src/com.gluster.storage.management.gui/icons/tango/scalable/task_running.svg
+++ /dev/null
@@ -1,1304 +0,0 @@
-<?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"
- inkscape:export-ydpi="240.00000"
- inkscape:export-xdpi="240.00000"
- inkscape:export-filename="/home/jimmac/gfx/novell/pdes/trunk/docs/BIGmime-text.png"
- sodipodi:docname="download_log.svg"
- inkscape:version="0.48.1 "
- sodipodi:version="0.32"
- id="svg249"
- height="48.000000px"
- width="48.000000px"
- inkscape:output_extension="org.inkscape.output.svg.inkscape"
- version="1.1">
- <defs
- id="defs3">
- <linearGradient
- id="linearGradient9056">
- <stop
- style="stop-color:#6acd11;stop-opacity:1"
- offset="0"
- id="stop9058" />
- <stop
- style="stop-color:#4cbe01;stop-opacity:1"
- offset="1"
- id="stop9060" />
- </linearGradient>
- <linearGradient
- id="linearGradient9050">
- <stop
- id="stop9052"
- offset="0"
- style="stop-color:#428405;stop-opacity:1" />
- <stop
- id="stop9054"
- offset="1"
- style="stop-color:#356804;stop-opacity:1" />
- </linearGradient>
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="0 : 24 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="48 : 24 : 1"
- inkscape:persp3d-origin="24 : 16 : 1"
- id="perspective83" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5060"
- id="radialGradient5031"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
- cx="605.71429"
- cy="486.64789"
- fx="605.71429"
- fy="486.64789"
- r="117.14286" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient5060">
- <stop
- style="stop-color:black;stop-opacity:1;"
- offset="0"
- id="stop5062" />
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="1"
- id="stop5064" />
- </linearGradient>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5060"
- id="radialGradient5029"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
- cx="605.71429"
- cy="486.64789"
- fx="605.71429"
- fy="486.64789"
- r="117.14286" />
- <linearGradient
- id="linearGradient5048">
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="0"
- id="stop5050" />
- <stop
- id="stop5056"
- offset="0.5"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="1"
- id="stop5052" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5048"
- id="linearGradient5027"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
- x1="302.85715"
- y1="366.64789"
- x2="302.85715"
- y2="609.50507" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient4542">
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop4544" />
- <stop
- style="stop-color:#000000;stop-opacity:0;"
- offset="1"
- id="stop4546" />
- </linearGradient>
- <linearGradient
- id="linearGradient15662">
- <stop
- id="stop15664"
- offset="0.0000000"
- style="stop-color:#ffffff;stop-opacity:1.0000000;" />
- <stop
- id="stop15666"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:1;" />
- </linearGradient>
- <radialGradient
- id="aigrd3"
- cx="20.8921"
- cy="64.5679"
- r="5.257"
- fx="20.8921"
- fy="64.5679"
- gradientUnits="userSpaceOnUse">
- <stop
- offset="0"
- style="stop-color:#F0F0F0"
- id="stop15573" />
- <stop
- offset="1.0000000"
- style="stop-color:#9a9a9a;stop-opacity:1.0000000;"
- id="stop15575" />
- </radialGradient>
- <radialGradient
- id="aigrd2"
- cx="20.8921"
- cy="114.5684"
- r="5.256"
- fx="20.8921"
- fy="114.5684"
- gradientUnits="userSpaceOnUse">
- <stop
- offset="0"
- style="stop-color:#F0F0F0"
- id="stop15566" />
- <stop
- offset="1.0000000"
- style="stop-color:#9a9a9a;stop-opacity:1.0000000;"
- id="stop15568" />
- </radialGradient>
- <linearGradient
- id="linearGradient269">
- <stop
- id="stop270"
- offset="0.0000000"
- style="stop-color:#a3a3a3;stop-opacity:1.0000000;" />
- <stop
- id="stop271"
- offset="1.0000000"
- style="stop-color:#4c4c4c;stop-opacity:1.0000000;" />
- </linearGradient>
- <linearGradient
- id="linearGradient259">
- <stop
- id="stop260"
- offset="0.0000000"
- style="stop-color:#fafafa;stop-opacity:1.0000000;" />
- <stop
- id="stop261"
- offset="1.0000000"
- style="stop-color:#bbbbbb;stop-opacity:1.0000000;" />
- </linearGradient>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient269"
- id="radialGradient15656"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.968273,0,0,1.032767,-96.646447,0.646447)"
- cx="8.8244190"
- cy="3.7561285"
- fx="8.8244190"
- fy="3.7561285"
- r="37.751713" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient259"
- id="radialGradient15658"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.960493,0,0,1.041132,-100,0)"
- cx="33.966679"
- cy="35.736916"
- fx="33.966679"
- fy="35.736916"
- r="86.708450" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient15662"
- id="radialGradient15668"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.968273,0,0,1.032767,-96.646447,0.646447)"
- cx="8.1435566"
- cy="7.2678967"
- fx="8.1435566"
- fy="7.2678967"
- r="38.158695" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4542"
- id="radialGradient4548"
- cx="24.306795"
- cy="42.07798"
- fx="24.306795"
- fy="42.07798"
- r="15.821514"
- gradientTransform="matrix(1.000000,0.000000,0.000000,0.284916,0.000000,30.08928)"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2251"
- id="linearGradient2257"
- x1="33.396004"
- y1="36.921333"
- x2="34.170048"
- y2="38.070381"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(2.1672066,1.6680446)" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient2251">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop2253" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop2255" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2224"
- id="linearGradient2230"
- x1="35.996582"
- y1="40.458221"
- x2="33.664921"
- y2="37.770721"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(6.161836,4.033411)" />
- <linearGradient
- id="linearGradient2224">
- <stop
- style="stop-color:#7c7c7c;stop-opacity:1;"
- offset="0"
- id="stop2226" />
- <stop
- style="stop-color:#b8b8b8;stop-opacity:1;"
- offset="1"
- id="stop2228" />
- </linearGradient>
- <linearGradient
- y2="37.770721"
- x2="33.664921"
- y1="40.458221"
- x1="35.996582"
- gradientTransform="translate(2.1672066,2.0430446)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22486"
- xlink:href="#linearGradient2224"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient5048-2">
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="0"
- id="stop5050-9" />
- <stop
- id="stop5056-4"
- offset="0.5"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="1"
- id="stop5052-5" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient5060-1">
- <stop
- style="stop-color:black;stop-opacity:1;"
- offset="0"
- id="stop5062-6" />
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="1"
- id="stop5064-9" />
- </linearGradient>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5060-1"
- id="radialGradient5031-1"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
- cx="605.71429"
- cy="486.64789"
- fx="605.71429"
- fy="486.64789"
- r="117.14286" />
- <linearGradient
- id="linearGradient2206">
- <stop
- style="stop-color:#c3c6c0;stop-opacity:1.0000000;"
- offset="0.0000000"
- id="stop2208" />
- <stop
- style="stop-color:#e8eae6;stop-opacity:1.0000000;"
- offset="1.0000000"
- id="stop2210" />
- </linearGradient>
- <linearGradient
- id="linearGradient2214">
- <stop
- style="stop-color:#a9aaa7;stop-opacity:1.0000000;"
- offset="0.0000000"
- id="stop2216" />
- <stop
- style="stop-color:#676964;stop-opacity:1.0000000;"
- offset="1.0000000"
- id="stop2218" />
- </linearGradient>
- <linearGradient
- id="linearGradient2222">
- <stop
- style="stop-color:#5187d6;stop-opacity:1;"
- offset="0"
- id="stop2224" />
- <stop
- style="stop-color:#1e4580;stop-opacity:1;"
- offset="1"
- id="stop2227" />
- </linearGradient>
- <linearGradient
- id="linearGradient5048-2-8">
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="0"
- id="stop5050-9-2" />
- <stop
- id="stop5056-4-6"
- offset="0.5"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="1"
- id="stop5052-5-0" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2206-8"
- id="linearGradient26980-6"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.62034994,0,0,0.66330865,-49.866678,4.4079179)"
- x1="25.861118"
- y1="26.133587"
- x2="18.300278"
- y2="19.567596" />
- <linearGradient
- id="linearGradient2206-8">
- <stop
- style="stop-color:#c3c6c0;stop-opacity:1.0000000;"
- offset="0.0000000"
- id="stop2208-7" />
- <stop
- style="stop-color:#e8eae6;stop-opacity:1.0000000;"
- offset="1.0000000"
- id="stop2210-2" />
- </linearGradient>
- <linearGradient
- id="linearGradient2214-2">
- <stop
- style="stop-color:#a9aaa7;stop-opacity:1.0000000;"
- offset="0.0000000"
- id="stop2216-2" />
- <stop
- style="stop-color:#676964;stop-opacity:1.0000000;"
- offset="1.0000000"
- id="stop2218-0" />
- </linearGradient>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2222-9"
- id="radialGradient26984-3"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1520174,0,0,0.90350734,-62.623679,-4.288468)"
- cx="23.994133"
- cy="32.266911"
- fx="23.994133"
- fy="32.266911"
- r="19.088932" />
- <linearGradient
- id="linearGradient2222-9">
- <stop
- style="stop-color:#5187d6;stop-opacity:1;"
- offset="0"
- id="stop2224-6" />
- <stop
- style="stop-color:#1e4580;stop-opacity:1;"
- offset="1"
- id="stop2227-5" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2238-7"
- id="linearGradient26986-6"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.62034994,0,0,0.6615617,-49.866678,5.1018165)"
- x1="20.338758"
- y1="19.636894"
- x2="46.092255"
- y2="39.708324" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient2238-7">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop2240-0" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop2242-5" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2180-7"
- id="linearGradient26988-4"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.4813991,0,0,1.1400975,-61.032972,-4.6105736)"
- x1="8.8207808"
- y1="12.53757"
- x2="12.499243"
- y2="24.238262" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient2180-7">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop2182-3" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop2184-7" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2223-5"
- id="linearGradient26990-6"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6513633,0,0,0.6513633,49.389075,5.6726225)"
- x1="35.694206"
- y1="37.333858"
- x2="15.044075"
- y2="5.9588566" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient2223-5">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop2225-2" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop2229-2" />
- </linearGradient>
- <linearGradient
- y2="5.9588566"
- x2="15.044075"
- y1="37.333858"
- x1="35.694206"
- gradientTransform="matrix(0.6513633,0,0,0.6513633,-50.610925,5.6726225)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient27106"
- xlink:href="#linearGradient2223-5"
- inkscape:collect="always" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5048"
- id="linearGradient27240"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
- x1="302.85715"
- y1="366.64789"
- x2="302.85715"
- y2="609.50507" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5060"
- id="radialGradient27242"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
- cx="605.71429"
- cy="486.64789"
- fx="605.71429"
- fy="486.64789"
- r="117.14286" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5060"
- id="radialGradient27244"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
- cx="605.71429"
- cy="486.64789"
- fx="605.71429"
- fy="486.64789"
- r="117.14286" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient259"
- id="radialGradient27246"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.960493,0,0,-1.041132,-51.588305,51.80958)"
- cx="33.966679"
- cy="35.736916"
- fx="33.966679"
- fy="35.736916"
- r="86.708450" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient15662"
- id="radialGradient27250"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.968273,0,0,-1.032767,-48.234752,51.163133)"
- cx="8.1435566"
- cy="7.2678967"
- fx="8.1435566"
- fy="7.2678967"
- r="38.158695" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2224"
- id="linearGradient27252"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(2.1672066,2.0430446)"
- x1="35.996582"
- y1="40.458221"
- x2="33.664921"
- y2="37.770721" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2251"
- id="linearGradient27254"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(2.1672066,1.6680446)"
- x1="33.396004"
- y1="36.921333"
- x2="34.170048"
- y2="38.070381" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2206-8"
- id="linearGradient27256"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.62034994,0,0,0.66330865,-52.866678,3.4079179)"
- x1="25.861118"
- y1="26.133587"
- x2="18.300278"
- y2="19.567596" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2222-9"
- id="radialGradient27258"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1520174,0,0,0.90350734,-65.623679,-5.288468)"
- cx="23.994133"
- cy="32.266911"
- fx="23.994133"
- fy="32.266911"
- r="19.088932" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2238-7"
- id="linearGradient27260"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.62034994,0,0,0.6615617,-52.866678,4.1018165)"
- x1="20.338758"
- y1="19.636894"
- x2="46.092255"
- y2="39.708324" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2180-7"
- id="linearGradient27262"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.4813991,0,0,1.1400975,-64.032972,-5.6105736)"
- x1="8.8207808"
- y1="12.53757"
- x2="12.499243"
- y2="24.238262" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2223-5"
- id="linearGradient27264"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6513633,0,0,0.6513633,-53.610925,4.6726225)"
- x1="35.694206"
- y1="37.333858"
- x2="15.044075"
- y2="5.9588566" />
- <radialGradient
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1,0,0,0.536723,0,16.87306)"
- r="15.644737"
- fy="36.421127"
- fx="24.837126"
- cy="36.421127"
- cx="24.837126"
- id="radialGradient8668"
- xlink:href="#linearGradient8662"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient8662"
- inkscape:collect="always">
- <stop
- id="stop8664"
- offset="0"
- style="stop-color:#000000;stop-opacity:1;" />
- <stop
- id="stop8666"
- offset="1"
- style="stop-color:#000000;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient2591">
- <stop
- style="stop-color:#73d216"
- offset="0"
- id="stop2593" />
- <stop
- style="stop-color:#49bd00;stop-opacity:1;"
- offset="1"
- id="stop2595" />
- </linearGradient>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2591-7"
- id="radialGradient35310-4"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0,0.41460224,-0.50172349,0,95.317847,33.968371)"
- cx="22.291636"
- cy="32.797512"
- fx="22.291636"
- fy="32.797512"
- r="16.9562" />
- <linearGradient
- id="linearGradient2591-7">
- <stop
- style="stop-color:#73d216"
- offset="0"
- id="stop2593-1" />
- <stop
- style="stop-color:#49bd00;stop-opacity:1;"
- offset="1"
- id="stop2595-8" />
- </linearGradient>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient8650-7"
- id="radialGradient35312-6"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0,0.98213486,-0.74742824,0,93.921351,22.917018)"
- cx="19.701141"
- cy="2.8969381"
- fx="19.701141"
- fy="2.8969381"
- r="17.171415" />
- <linearGradient
- id="linearGradient8650-7"
- inkscape:collect="always">
- <stop
- id="stop8652-5"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop8654-6"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5048"
- id="linearGradient35425"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
- x1="302.85715"
- y1="366.64789"
- x2="302.85715"
- y2="609.50507" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5060"
- id="radialGradient35427"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
- cx="605.71429"
- cy="486.64789"
- fx="605.71429"
- fy="486.64789"
- r="117.14286" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5060"
- id="radialGradient35429"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
- cx="605.71429"
- cy="486.64789"
- fx="605.71429"
- fy="486.64789"
- r="117.14286" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient259"
- id="radialGradient35431"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.960493,0,0,-1.041132,-51.588305,51.80958)"
- cx="33.966679"
- cy="8.8006353"
- fx="33.966679"
- fy="8.8006353"
- r="86.708450" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient15662"
- id="radialGradient35433"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.968273,0,0,-1.032767,-48.234752,51.163133)"
- cx="8.1435566"
- cy="7.2678967"
- fx="8.1435566"
- fy="7.2678967"
- r="38.158695" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2224"
- id="linearGradient35435"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(2.1672066,2.0430446)"
- x1="35.996582"
- y1="40.458221"
- x2="33.664921"
- y2="37.770721" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2251"
- id="linearGradient35437"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(2.1672066,1.6680446)"
- x1="33.396004"
- y1="36.921333"
- x2="34.170048"
- y2="38.070381" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2206-8"
- id="linearGradient35439"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.62034994,0,0,0.66330865,-52.866678,3.4079179)"
- x1="25.861118"
- y1="26.133587"
- x2="18.300278"
- y2="19.567596" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2222-9"
- id="radialGradient35441"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1520174,0,0,0.90350734,-65.623679,-5.288468)"
- cx="23.994133"
- cy="32.266911"
- fx="23.994133"
- fy="32.266911"
- r="19.088932" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2238-7"
- id="linearGradient35443"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.62034994,0,0,0.6615617,-52.866678,4.1018165)"
- x1="20.338758"
- y1="19.636894"
- x2="46.092255"
- y2="39.708324" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2180-7"
- id="linearGradient35445"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.4813991,0,0,1.1400975,-64.032972,-5.6105736)"
- x1="8.8207808"
- y1="12.53757"
- x2="12.499243"
- y2="24.238262" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2223-5"
- id="linearGradient35447"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6513633,0,0,0.6513633,-53.610925,4.6726225)"
- x1="35.694206"
- y1="37.333858"
- x2="15.044075"
- y2="5.9588566" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5075"
- id="linearGradient2306"
- gradientUnits="userSpaceOnUse"
- x1="71.288956"
- y1="124.11652"
- x2="70.826942"
- y2="95"
- gradientTransform="translate(-56.000421,-79.094251)" />
- <linearGradient
- id="linearGradient5075">
- <stop
- style="stop-color:#adb0a8;stop-opacity:1;"
- offset="0"
- id="stop5077" />
- <stop
- style="stop-color:#464744;stop-opacity:1"
- offset="1"
- id="stop5079" />
- </linearGradient>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2691"
- id="radialGradient2314"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.05324342,-0.836238,2.019473,0.128568,-162.9195,100.0768)"
- cx="107.5884"
- cy="83.990814"
- fx="107.5884"
- fy="83.990814"
- r="12.551644" />
- <linearGradient
- id="linearGradient2691">
- <stop
- id="stop2693"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1" />
- <stop
- id="stop2695"
- offset="1"
- style="stop-color:#d3d7cf" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2684"
- id="linearGradient2690"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.128181,0,0,1.128181,-53.99314,-83.36009)"
- x1="70.913956"
- y1="101.74152"
- x2="70.951942"
- y2="88.923729" />
- <linearGradient
- id="linearGradient2684">
- <stop
- id="stop2686"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop2688"
- offset="1"
- style="stop-color:#000000;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- y2="88.923729"
- x2="70.951942"
- y1="101.74152"
- x1="70.913956"
- gradientTransform="matrix(1.128181,0,0,1.128181,-64.993141,-91.360091)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient8168"
- xlink:href="#linearGradient2684"
- inkscape:collect="always" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2684"
- id="linearGradient8252"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.128181,0,0,1.128181,-108.08145,-78.763896)"
- x1="70.913956"
- y1="101.74152"
- x2="70.951942"
- y2="88.923729" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2691"
- id="radialGradient8254"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.05324342,-0.836238,2.019473,0.128568,-206.0078,112.67299)"
- cx="107.5884"
- cy="83.990814"
- fx="107.5884"
- fy="83.990814"
- r="12.551644" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5075"
- id="linearGradient8256"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-99.088729,-66.498056)"
- x1="71.288956"
- y1="124.11652"
- x2="70.826942"
- y2="95" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2684"
- id="linearGradient8265"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.128181,0,0,1.128181,-108.08145,-78.763896)"
- x1="70.913956"
- y1="101.74152"
- x2="70.951942"
- y2="88.923729" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9056"
- id="radialGradient8267"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.05324342,-0.836238,2.019473,0.128568,-206.0078,112.67299)"
- cx="107.5884"
- cy="83.990814"
- fx="107.5884"
- fy="83.990814"
- r="12.551644" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9050"
- id="linearGradient8269"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-99.088729,-66.498056)"
- x1="71.288956"
- y1="124.11652"
- x2="70.826942"
- y2="95" />
- </defs>
- <sodipodi:namedview
- inkscape:window-y="-8"
- inkscape:window-x="-8"
- inkscape:window-height="838"
- inkscape:window-width="1600"
- inkscape:document-units="px"
- inkscape:grid-bbox="true"
- showgrid="false"
- inkscape:current-layer="g27205"
- inkscape:cy="23.895455"
- inkscape:cx="24.571642"
- inkscape:zoom="1"
- inkscape:pageshadow="2"
- inkscape:pageopacity="0.0"
- borderopacity="0.25490196"
- bordercolor="#666666"
- pagecolor="#ffffff"
- id="base"
- inkscape:showpageshadow="false"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata4">
- <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>
- <dc:subject>
- <rdf:Bag>
- <rdf:li>document</rdf:li>
- <rdf:li>settings</rdf:li>
- <rdf:li>preferences</rdf:li>
- <rdf:li>properties</rdf:li>
- <rdf:li>tweak</rdf:li>
- </rdf:Bag>
- </dc:subject>
- <cc:license
- rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
- <dc:creator>
- <cc:Agent>
- <dc:title>Jakub Steiner</dc:title>
- </cc:Agent>
- </dc:creator>
- <dc:source>http://jimmac.musichall.cz</dc:source>
- </cc:Work>
- <cc:License
- rdf:about="http://creativecommons.org/licenses/publicdomain/">
- <cc:permits
- rdf:resource="http://creativecommons.org/ns#Reproduction" />
- <cc:permits
- rdf:resource="http://creativecommons.org/ns#Distribution" />
- <cc:permits
- rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
- </cc:License>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:groupmode="layer"
- id="layer6"
- inkscape:label="Shadow" />
- <g
- style="display:inline"
- inkscape:groupmode="layer"
- inkscape:label="Base"
- id="layer1" />
- <g
- inkscape:groupmode="layer"
- id="layer5"
- inkscape:label="Text"
- style="display:inline">
- <g
- style="display:inline"
- id="g26971"
- transform="translate(-48.411695,-4.5961942)">
- <g
- id="g27205"
- transform="translate(102.5,0)">
- <g
- id="g35397"
- transform="matrix(1.0365373,0,0,1.0365373,-1.1521053,-1.338541)">
- <g
- style="display:inline"
- id="g5022"
- transform="matrix(0.02165152,0,0,0.01485743,-8.580705,46.281584)">
- <rect
- y="-150.69685"
- x="-1559.2523"
- height="478.35718"
- width="1339.6335"
- id="rect4173"
- style="opacity:0.40206185;color:#000000;fill:url(#linearGradient35425);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" />
- <path
- sodipodi:nodetypes="cccc"
- id="path5058"
- d="m -219.61876,-150.68038 c 0,0 0,478.33079 0,478.33079 142.874166,0.90045 345.40022,-107.16966 345.40014,-239.196175 0,-132.026537 -159.436816,-239.134595 -345.40014,-239.134615 z"
- style="opacity:0.40206185;color:#000000;fill:url(#radialGradient35427);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
- inkscape:connector-curvature="0" />
- <path
- style="opacity:0.40206185;color:#000000;fill:url(#radialGradient35429);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
- d="m -1559.2523,-150.68038 c 0,0 0,478.33079 0,478.33079 -142.8742,0.90045 -345.4002,-107.16966 -345.4002,-239.196175 0,-132.026537 159.4368,-239.134595 345.4002,-239.134615 z"
- id="path5018"
- sodipodi:nodetypes="cccc"
- inkscape:connector-curvature="0" />
- </g>
- <path
- style="color:#000000;fill:url(#radialGradient35431);fill-opacity:1;fill-rule:nonzero;stroke:#808080;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible"
- d="m -43.835704,48.163134 32.576903,0 c 0.636573,0 1.149049,-0.512476 1.149049,-1.149049 l 0,-31.105315 c -3.168864,-2.905608 -6.491445,-5.9334976 -9.871181,-8.6661296 l -23.854771,0 c -0.636573,0 -1.149048,0.512475 -1.149048,1.149048 l 0,38.6223966 c 0,0.636573 0.512475,1.149049 1.149048,1.149049 z"
- id="rect15391"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="sssccssss" />
- <path
- style="color:#000000;fill:none;stroke:url(#radialGradient35433);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible"
- d="m -43.773203,47.225634 32.47779,0 c 0.08257,0 0.148336,-0.06648 0.149048,-0.149049 l 0.266316,-30.868047 c 0.0068,-0.783664 -8.098317,-8.1134053 -9.428891,-8.103525 l -23.464263,0.1742364 c -0.08257,6.131e-4 -0.149048,0.06648 -0.149048,0.149049 l 0,38.6482866 c 0,0.08257 0.06648,0.149049 0.149048,0.149049 z"
- id="rect15660"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="sssssssss" />
- <g
- style="display:inline"
- transform="translate(-50.963312,3.5961942)"
- id="g2253">
- <rect
- style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible"
- id="rect15686"
- width="22.000004"
- height="1"
- x="15.000002"
- y="9"
- rx="0.15156493"
- ry="0.065390877" />
- <rect
- style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible"
- id="rect15690"
- width="22.000004"
- height="1"
- x="15.000002"
- y="13"
- rx="0.15156493"
- ry="0.065390877" />
- <rect
- style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible"
- id="rect15694"
- width="22.000004"
- height="1"
- x="15.000002"
- y="17"
- rx="0.15156493"
- ry="0.065390877" />
- <rect
- style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible"
- id="rect15698"
- width="22.000004"
- height="1"
- x="15.000002"
- y="21"
- rx="0.15156493"
- ry="0.065390877" />
- <rect
- style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible"
- id="rect15732"
- width="9.9000053"
- height="1"
- x="14.999992"
- y="25"
- rx="0.068204239"
- ry="0.065390877" />
- <rect
- style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible"
- id="rect15736"
- width="22.000004"
- height="1"
- x="14.999992"
- y="29"
- rx="0.15156493"
- ry="0.065390877" />
- <rect
- style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible"
- id="rect15740"
- width="22.000004"
- height="1"
- x="14.999992"
- y="33"
- rx="0.15156493"
- ry="0.065390877" />
- <rect
- style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible"
- id="rect15744"
- width="15.400014"
- height="1"
- x="14.999992"
- y="37"
- rx="0.10609552"
- ry="0.065390877" />
- <rect
- style="fill:#9c9c9c;fill-opacity:1;fill-rule:evenodd;stroke:none"
- id="rect23058"
- width="1.875"
- height="1.875"
- x="10.437507"
- y="8.5"
- rx="0"
- ry="0" />
- <rect
- ry="0"
- rx="0"
- y="12.4375"
- x="10.437507"
- height="1.875"
- width="1.875"
- id="rect23060"
- style="fill:#9c9c9c;fill-opacity:1;fill-rule:evenodd;stroke:none" />
- <rect
- style="fill:#9c9c9c;fill-opacity:1;fill-rule:evenodd;stroke:none"
- id="rect23062"
- width="1.875"
- height="1.875"
- x="10.437507"
- y="16.4375"
- rx="0"
- ry="0" />
- <rect
- ry="0"
- rx="0"
- y="20.40625"
- x="10.437507"
- height="1.875"
- width="1.875"
- id="rect23064"
- style="fill:#9c9c9c;fill-opacity:1;fill-rule:evenodd;stroke:none" />
- <rect
- style="fill:#9c9c9c;fill-opacity:1;fill-rule:evenodd;stroke:none"
- id="rect23066"
- width="1.875"
- height="1.875"
- x="10.437507"
- y="24.40625"
- rx="0"
- ry="0" />
- <rect
- ry="0"
- rx="0"
- y="28.383726"
- x="10.437507"
- height="1.875"
- width="1.875"
- id="rect23068"
- style="fill:#9c9c9c;fill-opacity:1;fill-rule:evenodd;stroke:none" />
- <rect
- style="fill:#9c9c9c;fill-opacity:1;fill-rule:evenodd;stroke:none"
- id="rect23070"
- width="1.875"
- height="1.875"
- x="10.437507"
- y="32.493786"
- rx="0"
- ry="0" />
- <rect
- ry="0"
- rx="0"
- y="36.47126"
- x="10.437507"
- height="1.875"
- width="1.875"
- id="rect23072"
- style="fill:#9c9c9c;fill-opacity:1;fill-rule:evenodd;stroke:none" />
- </g>
- <g
- style="display:inline"
- id="g22515"
- transform="matrix(1,0,0,-1,-51.588305,51.80958)">
- <path
- style="color:#000000;fill:url(#linearGradient35435);fill-opacity:1;fill-rule:evenodd;stroke:#808080;stroke-width:1.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
- d="m 31.474987,44.634988 c 4.90304,-4.045325 7.776832,-6.894317 10.079906,-8.785106 -3.331029,0.964689 -4.802716,1.485612 -8.911474,1.644622 0,0 -0.355929,6.640484 -1.168432,7.140484 z"
- id="path2210"
- sodipodi:nodetypes="cccc"
- inkscape:connector-curvature="0" />
- <path
- sodipodi:nodetypes="cccc"
- id="path2247"
- d="m 33.389463,42.509778 c 1.369779,-0.683829 4.825996,-2.853572 6.125377,-4.734576 -1.662385,0.469833 -3.058295,0.543813 -5.812819,0.742832 0,0 -0.03655,3.0179 -0.312558,3.991744 z"
- style="opacity:0.57079647;color:#000000;fill:none;stroke:url(#linearGradient35437);stroke-width:0.99999982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
- inkscape:connector-curvature="0" />
- </g>
- </g>
- <g
- id="g8258"
- transform="matrix(0.74615383,0,0,0.74615383,-5.6161892,6.4778259)">
- <path
- inkscape:r_cy="true"
- inkscape:r_cx="true"
- style="opacity:0.15;color:#000000;fill:none;stroke:url(#linearGradient8265);stroke-width:1.99999833;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
- d="m -42.088305,44.096194 0,-30.5 26.06998,14.817079 -26.06998,15.682921 z"
- id="path2682"
- sodipodi:nodetypes="cccc"
- inkscape:connector-curvature="0" />
- <path
- sodipodi:nodetypes="cccc"
- id="path3375"
- d="m -41.588845,42.407684 0,-27.811485 24.103287,13.905743 -24.103287,13.905742 z"
- style="color:#000000;fill:url(#radialGradient8267);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.00000036;marker:none;visibility:visible;display:inline;overflow:visible"
- inkscape:r_cx="true"
- inkscape:r_cy="true"
- inkscape:connector-curvature="0" />
- <path
- sodipodi:nodetypes="cccc"
- id="path2479"
- d="m -41.588845,42.407684 0,-27.811485 24.103287,13.905743 -24.103287,13.905742 z"
- style="color:#000000;fill:none;stroke:url(#linearGradient8269);stroke-width:1.53587627;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
- inkscape:r_cx="true"
- inkscape:r_cy="true"
- inkscape:connector-curvature="0" />
- <path
- sodipodi:nodetypes="cccccccc"
- id="path2481"
- d="m -40.829308,15.92091 0.01047,25.151578 21.524983,-12.570554 z m 0.988184,2.09743 18.614458,10.483594 -18.614458,10.483594 z"
- style="opacity:0.74336285;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.66948462;marker:none;visibility:visible;display:inline;overflow:visible"
- inkscape:r_cx="true"
- inkscape:r_cy="true"
- inkscape:connector-curvature="0" />
- <path
- sodipodi:nodetypes="cccc"
- inkscape:r_cy="true"
- inkscape:r_cx="true"
- id="path2339"
- d="m -39.854658,18.047134 0,10.769445 c 4.269198,-0.04478 8.275716,-0.167876 16.17406,-1.697312 z"
- style="opacity:0.5;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:block;overflow:visible"
- inkscape:connector-curvature="0" />
- </g>
- </g>
- </g>
- </g>
-</svg>
diff --git a/src/com.gluster.storage.management.gui/icons/tango/scalable/task_status_completed.svg b/src/com.gluster.storage.management.gui/icons/tango/scalable/task_status_completed.svg
deleted file mode 100644
index 5bde43c4..00000000
--- a/src/com.gluster.storage.management.gui/icons/tango/scalable/task_status_completed.svg
+++ /dev/null
@@ -1,1587 +0,0 @@
-<?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"
- inkscape:export-ydpi="240.00000"
- inkscape:export-xdpi="240.00000"
- inkscape:export-filename="/home/jimmac/gfx/novell/pdes/trunk/docs/BIGmime-text.png"
- sodipodi:docname="task_status_error.svg"
- inkscape:version="0.48.1 "
- sodipodi:version="0.32"
- id="svg249"
- height="48.000000px"
- width="48.000000px"
- inkscape:output_extension="org.inkscape.output.svg.inkscape"
- version="1.1">
- <defs
- id="defs3">
- <linearGradient
- inkscape:collect="always"
- id="linearGradient7580">
- <stop
- style="stop-color:#808080;stop-opacity:1;"
- offset="0"
- id="stop7582" />
- <stop
- style="stop-color:#808080;stop-opacity:0;"
- offset="1"
- id="stop7584" />
- </linearGradient>
- <linearGradient
- id="linearGradient11007">
- <stop
- style="stop-color:#8ab9ed;stop-opacity:1"
- offset="0"
- id="stop11009" />
- <stop
- style="stop-color:#2a5285;stop-opacity:1"
- offset="1"
- id="stop11011" />
- </linearGradient>
- <linearGradient
- id="linearGradient11001">
- <stop
- style="stop-color:#3a71b6;stop-opacity:1"
- offset="0"
- id="stop11003" />
- <stop
- style="stop-color:#203f66;stop-opacity:1"
- offset="1"
- id="stop11005" />
- </linearGradient>
- <linearGradient
- id="linearGradient9056">
- <stop
- style="stop-color:#6acd11;stop-opacity:1"
- offset="0"
- id="stop9058" />
- <stop
- style="stop-color:#4cbe01;stop-opacity:1"
- offset="1"
- id="stop9060" />
- </linearGradient>
- <linearGradient
- id="linearGradient9050">
- <stop
- id="stop9052"
- offset="0"
- style="stop-color:#428405;stop-opacity:1" />
- <stop
- id="stop9054"
- offset="1"
- style="stop-color:#356804;stop-opacity:1" />
- </linearGradient>
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="0 : 24 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="48 : 24 : 1"
- inkscape:persp3d-origin="24 : 16 : 1"
- id="perspective83" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5060"
- id="radialGradient5031"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
- cx="605.71429"
- cy="486.64789"
- fx="605.71429"
- fy="486.64789"
- r="117.14286" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient5060">
- <stop
- style="stop-color:black;stop-opacity:1;"
- offset="0"
- id="stop5062" />
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="1"
- id="stop5064" />
- </linearGradient>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5060"
- id="radialGradient5029"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
- cx="605.71429"
- cy="486.64789"
- fx="605.71429"
- fy="486.64789"
- r="117.14286" />
- <linearGradient
- id="linearGradient5048">
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="0"
- id="stop5050" />
- <stop
- id="stop5056"
- offset="0.5"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="1"
- id="stop5052" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5048"
- id="linearGradient5027"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
- x1="302.85715"
- y1="366.64789"
- x2="302.85715"
- y2="609.50507" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient4542">
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop4544" />
- <stop
- style="stop-color:#000000;stop-opacity:0;"
- offset="1"
- id="stop4546" />
- </linearGradient>
- <linearGradient
- id="linearGradient15662">
- <stop
- id="stop15664"
- offset="0.0000000"
- style="stop-color:#ffffff;stop-opacity:1.0000000;" />
- <stop
- id="stop15666"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:1;" />
- </linearGradient>
- <radialGradient
- id="aigrd3"
- cx="20.8921"
- cy="64.5679"
- r="5.257"
- fx="20.8921"
- fy="64.5679"
- gradientUnits="userSpaceOnUse">
- <stop
- offset="0"
- style="stop-color:#F0F0F0"
- id="stop15573" />
- <stop
- offset="1.0000000"
- style="stop-color:#9a9a9a;stop-opacity:1.0000000;"
- id="stop15575" />
- </radialGradient>
- <radialGradient
- id="aigrd2"
- cx="20.8921"
- cy="114.5684"
- r="5.256"
- fx="20.8921"
- fy="114.5684"
- gradientUnits="userSpaceOnUse">
- <stop
- offset="0"
- style="stop-color:#F0F0F0"
- id="stop15566" />
- <stop
- offset="1.0000000"
- style="stop-color:#9a9a9a;stop-opacity:1.0000000;"
- id="stop15568" />
- </radialGradient>
- <linearGradient
- id="linearGradient269">
- <stop
- id="stop270"
- offset="0.0000000"
- style="stop-color:#a3a3a3;stop-opacity:1.0000000;" />
- <stop
- id="stop271"
- offset="1.0000000"
- style="stop-color:#4c4c4c;stop-opacity:1.0000000;" />
- </linearGradient>
- <linearGradient
- id="linearGradient259">
- <stop
- id="stop260"
- offset="0.0000000"
- style="stop-color:#fafafa;stop-opacity:1.0000000;" />
- <stop
- id="stop261"
- offset="1.0000000"
- style="stop-color:#bbbbbb;stop-opacity:1.0000000;" />
- </linearGradient>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient269"
- id="radialGradient15656"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.968273,0,0,1.032767,-96.646447,0.646447)"
- cx="8.8244190"
- cy="3.7561285"
- fx="8.8244190"
- fy="3.7561285"
- r="37.751713" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient259"
- id="radialGradient15658"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.960493,0,0,1.041132,-100,0)"
- cx="33.966679"
- cy="35.736916"
- fx="33.966679"
- fy="35.736916"
- r="86.708450" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient15662"
- id="radialGradient15668"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.968273,0,0,1.032767,-96.646447,0.646447)"
- cx="8.1435566"
- cy="7.2678967"
- fx="8.1435566"
- fy="7.2678967"
- r="38.158695" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4542"
- id="radialGradient4548"
- cx="24.306795"
- cy="42.07798"
- fx="24.306795"
- fy="42.07798"
- r="15.821514"
- gradientTransform="matrix(1.000000,0.000000,0.000000,0.284916,0.000000,30.08928)"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2251"
- id="linearGradient2257"
- x1="33.396004"
- y1="36.921333"
- x2="34.170048"
- y2="38.070381"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(2.1672066,1.6680446)" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient2251">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop2253" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop2255" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2224"
- id="linearGradient2230"
- x1="35.996582"
- y1="40.458221"
- x2="33.664921"
- y2="37.770721"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(6.161836,4.033411)" />
- <linearGradient
- id="linearGradient2224">
- <stop
- style="stop-color:#7c7c7c;stop-opacity:1;"
- offset="0"
- id="stop2226" />
- <stop
- style="stop-color:#b8b8b8;stop-opacity:1;"
- offset="1"
- id="stop2228" />
- </linearGradient>
- <linearGradient
- y2="37.770721"
- x2="33.664921"
- y1="40.458221"
- x1="35.996582"
- gradientTransform="translate(2.1672066,2.0430446)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22486"
- xlink:href="#linearGradient2224"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient5048-2">
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="0"
- id="stop5050-9" />
- <stop
- id="stop5056-4"
- offset="0.5"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="1"
- id="stop5052-5" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient5060-1">
- <stop
- style="stop-color:black;stop-opacity:1;"
- offset="0"
- id="stop5062-6" />
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="1"
- id="stop5064-9" />
- </linearGradient>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5060-1"
- id="radialGradient5031-1"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
- cx="605.71429"
- cy="486.64789"
- fx="605.71429"
- fy="486.64789"
- r="117.14286" />
- <linearGradient
- id="linearGradient2206">
- <stop
- style="stop-color:#c3c6c0;stop-opacity:1.0000000;"
- offset="0.0000000"
- id="stop2208" />
- <stop
- style="stop-color:#e8eae6;stop-opacity:1.0000000;"
- offset="1.0000000"
- id="stop2210" />
- </linearGradient>
- <linearGradient
- id="linearGradient2214">
- <stop
- style="stop-color:#a9aaa7;stop-opacity:1.0000000;"
- offset="0.0000000"
- id="stop2216" />
- <stop
- style="stop-color:#676964;stop-opacity:1.0000000;"
- offset="1.0000000"
- id="stop2218" />
- </linearGradient>
- <linearGradient
- id="linearGradient2222">
- <stop
- style="stop-color:#5187d6;stop-opacity:1;"
- offset="0"
- id="stop2224" />
- <stop
- style="stop-color:#1e4580;stop-opacity:1;"
- offset="1"
- id="stop2227" />
- </linearGradient>
- <linearGradient
- id="linearGradient5048-2-8">
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="0"
- id="stop5050-9-2" />
- <stop
- id="stop5056-4-6"
- offset="0.5"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="1"
- id="stop5052-5-0" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2206-8"
- id="linearGradient26980-6"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.62034994,0,0,0.66330865,-49.866678,4.4079179)"
- x1="25.861118"
- y1="26.133587"
- x2="18.300278"
- y2="19.567596" />
- <linearGradient
- id="linearGradient2206-8">
- <stop
- style="stop-color:#c3c6c0;stop-opacity:1.0000000;"
- offset="0.0000000"
- id="stop2208-7" />
- <stop
- style="stop-color:#e8eae6;stop-opacity:1.0000000;"
- offset="1.0000000"
- id="stop2210-2" />
- </linearGradient>
- <linearGradient
- id="linearGradient2214-2">
- <stop
- style="stop-color:#a9aaa7;stop-opacity:1.0000000;"
- offset="0.0000000"
- id="stop2216-2" />
- <stop
- style="stop-color:#676964;stop-opacity:1.0000000;"
- offset="1.0000000"
- id="stop2218-0" />
- </linearGradient>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2222-9"
- id="radialGradient26984-3"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1520174,0,0,0.90350734,-62.623679,-4.288468)"
- cx="23.994133"
- cy="32.266911"
- fx="23.994133"
- fy="32.266911"
- r="19.088932" />
- <linearGradient
- id="linearGradient2222-9">
- <stop
- style="stop-color:#5187d6;stop-opacity:1;"
- offset="0"
- id="stop2224-6" />
- <stop
- style="stop-color:#1e4580;stop-opacity:1;"
- offset="1"
- id="stop2227-5" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2238-7"
- id="linearGradient26986-6"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.62034994,0,0,0.6615617,-49.866678,5.1018165)"
- x1="20.338758"
- y1="19.636894"
- x2="46.092255"
- y2="39.708324" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient2238-7">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop2240-0" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop2242-5" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2180-7"
- id="linearGradient26988-4"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.4813991,0,0,1.1400975,-61.032972,-4.6105736)"
- x1="8.8207808"
- y1="12.53757"
- x2="12.499243"
- y2="24.238262" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient2180-7">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop2182-3" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop2184-7" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2223-5"
- id="linearGradient26990-6"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6513633,0,0,0.6513633,49.389075,5.6726225)"
- x1="35.694206"
- y1="37.333858"
- x2="15.044075"
- y2="5.9588566" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient2223-5">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop2225-2" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop2229-2" />
- </linearGradient>
- <linearGradient
- y2="5.9588566"
- x2="15.044075"
- y1="37.333858"
- x1="35.694206"
- gradientTransform="matrix(0.6513633,0,0,0.6513633,-50.610925,5.6726225)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient27106"
- xlink:href="#linearGradient2223-5"
- inkscape:collect="always" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5048"
- id="linearGradient27240"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
- x1="302.85715"
- y1="366.64789"
- x2="302.85715"
- y2="609.50507" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5060"
- id="radialGradient27242"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
- cx="605.71429"
- cy="486.64789"
- fx="605.71429"
- fy="486.64789"
- r="117.14286" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5060"
- id="radialGradient27244"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
- cx="605.71429"
- cy="486.64789"
- fx="605.71429"
- fy="486.64789"
- r="117.14286" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient259"
- id="radialGradient27246"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.960493,0,0,-1.041132,-51.588305,51.80958)"
- cx="33.966679"
- cy="35.736916"
- fx="33.966679"
- fy="35.736916"
- r="86.708450" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient15662"
- id="radialGradient27250"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.968273,0,0,-1.032767,-48.234752,51.163133)"
- cx="8.1435566"
- cy="7.2678967"
- fx="8.1435566"
- fy="7.2678967"
- r="38.158695" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2224"
- id="linearGradient27252"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(2.1672066,2.0430446)"
- x1="35.996582"
- y1="40.458221"
- x2="33.664921"
- y2="37.770721" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2251"
- id="linearGradient27254"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(2.1672066,1.6680446)"
- x1="33.396004"
- y1="36.921333"
- x2="34.170048"
- y2="38.070381" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2206-8"
- id="linearGradient27256"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.62034994,0,0,0.66330865,-52.866678,3.4079179)"
- x1="25.861118"
- y1="26.133587"
- x2="18.300278"
- y2="19.567596" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2222-9"
- id="radialGradient27258"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1520174,0,0,0.90350734,-65.623679,-5.288468)"
- cx="23.994133"
- cy="32.266911"
- fx="23.994133"
- fy="32.266911"
- r="19.088932" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2238-7"
- id="linearGradient27260"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.62034994,0,0,0.6615617,-52.866678,4.1018165)"
- x1="20.338758"
- y1="19.636894"
- x2="46.092255"
- y2="39.708324" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2180-7"
- id="linearGradient27262"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.4813991,0,0,1.1400975,-64.032972,-5.6105736)"
- x1="8.8207808"
- y1="12.53757"
- x2="12.499243"
- y2="24.238262" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2223-5"
- id="linearGradient27264"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6513633,0,0,0.6513633,-53.610925,4.6726225)"
- x1="35.694206"
- y1="37.333858"
- x2="15.044075"
- y2="5.9588566" />
- <radialGradient
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1,0,0,0.536723,0,16.87306)"
- r="15.644737"
- fy="36.421127"
- fx="24.837126"
- cy="36.421127"
- cx="24.837126"
- id="radialGradient8668"
- xlink:href="#linearGradient8662"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient8662"
- inkscape:collect="always">
- <stop
- id="stop8664"
- offset="0"
- style="stop-color:#000000;stop-opacity:1;" />
- <stop
- id="stop8666"
- offset="1"
- style="stop-color:#000000;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient2591">
- <stop
- style="stop-color:#73d216"
- offset="0"
- id="stop2593" />
- <stop
- style="stop-color:#49bd00;stop-opacity:1;"
- offset="1"
- id="stop2595" />
- </linearGradient>
- <linearGradient
- id="linearGradient2591-7">
- <stop
- style="stop-color:#73d216"
- offset="0"
- id="stop2593-1" />
- <stop
- style="stop-color:#49bd00;stop-opacity:1;"
- offset="1"
- id="stop2595-8" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5048"
- id="linearGradient35425"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
- x1="302.85715"
- y1="366.64789"
- x2="302.85715"
- y2="609.50507" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5060"
- id="radialGradient35427"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
- cx="605.71429"
- cy="486.64789"
- fx="605.71429"
- fy="486.64789"
- r="117.14286" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5060"
- id="radialGradient35429"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
- cx="605.71429"
- cy="486.64789"
- fx="605.71429"
- fy="486.64789"
- r="117.14286" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient259"
- id="radialGradient35431"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.960493,0,0,-1.041132,-51.588305,51.80958)"
- cx="33.966679"
- cy="8.8006353"
- fx="33.966679"
- fy="8.8006353"
- r="86.708450" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient15662"
- id="radialGradient35433"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.968273,0,0,-1.032767,-48.234752,51.163133)"
- cx="8.1435566"
- cy="7.2678967"
- fx="8.1435566"
- fy="7.2678967"
- r="38.158695" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2224"
- id="linearGradient35435"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(2.1672066,2.0430446)"
- x1="35.996582"
- y1="40.458221"
- x2="33.664921"
- y2="37.770721" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2251"
- id="linearGradient35437"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(2.1672066,1.6680446)"
- x1="33.396004"
- y1="36.921333"
- x2="34.170048"
- y2="38.070381" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2206-8"
- id="linearGradient35439"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.62034994,0,0,0.66330865,-52.866678,3.4079179)"
- x1="25.861118"
- y1="26.133587"
- x2="18.300278"
- y2="19.567596" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2222-9"
- id="radialGradient35441"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1520174,0,0,0.90350734,-65.623679,-5.288468)"
- cx="23.994133"
- cy="32.266911"
- fx="23.994133"
- fy="32.266911"
- r="19.088932" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2238-7"
- id="linearGradient35443"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.62034994,0,0,0.6615617,-52.866678,4.1018165)"
- x1="20.338758"
- y1="19.636894"
- x2="46.092255"
- y2="39.708324" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2180-7"
- id="linearGradient35445"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.4813991,0,0,1.1400975,-64.032972,-5.6105736)"
- x1="8.8207808"
- y1="12.53757"
- x2="12.499243"
- y2="24.238262" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2223-5"
- id="linearGradient35447"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6513633,0,0,0.6513633,-53.610925,4.6726225)"
- x1="35.694206"
- y1="37.333858"
- x2="15.044075"
- y2="5.9588566" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5075"
- id="linearGradient2306"
- gradientUnits="userSpaceOnUse"
- x1="71.288956"
- y1="124.11652"
- x2="70.826942"
- y2="95"
- gradientTransform="translate(-56.000421,-79.094251)" />
- <linearGradient
- id="linearGradient5075">
- <stop
- style="stop-color:#adb0a8;stop-opacity:1;"
- offset="0"
- id="stop5077" />
- <stop
- style="stop-color:#464744;stop-opacity:1"
- offset="1"
- id="stop5079" />
- </linearGradient>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2691"
- id="radialGradient2314"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.05324342,-0.836238,2.019473,0.128568,-162.9195,100.0768)"
- cx="107.5884"
- cy="83.990814"
- fx="107.5884"
- fy="83.990814"
- r="12.551644" />
- <linearGradient
- id="linearGradient2691">
- <stop
- id="stop2693"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1" />
- <stop
- id="stop2695"
- offset="1"
- style="stop-color:#d3d7cf" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2684"
- id="linearGradient2690"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.128181,0,0,1.128181,-53.99314,-83.36009)"
- x1="70.913956"
- y1="101.74152"
- x2="70.951942"
- y2="88.923729" />
- <linearGradient
- id="linearGradient2684">
- <stop
- id="stop2686"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop2688"
- offset="1"
- style="stop-color:#000000;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- y2="88.923729"
- x2="70.951942"
- y1="101.74152"
- x1="70.913956"
- gradientTransform="matrix(1.128181,0,0,1.128181,-64.993141,-91.360091)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient8168"
- xlink:href="#linearGradient2684"
- inkscape:collect="always" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2684"
- id="linearGradient8252"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.128181,0,0,1.128181,-108.08145,-78.763896)"
- x1="70.913956"
- y1="101.74152"
- x2="70.951942"
- y2="88.923729" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2691"
- id="radialGradient8254"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.05324342,-0.836238,2.019473,0.128568,-206.0078,112.67299)"
- cx="107.5884"
- cy="83.990814"
- fx="107.5884"
- fy="83.990814"
- r="12.551644" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5075"
- id="linearGradient8256"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-99.088729,-66.498056)"
- x1="71.288956"
- y1="124.11652"
- x2="70.826942"
- y2="95" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2684"
- id="linearGradient8265"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.128181,0,0,1.128181,-108.08145,-78.763896)"
- x1="70.913956"
- y1="101.74152"
- x2="70.951942"
- y2="88.923729" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9056"
- id="radialGradient8267"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.05324342,-0.836238,2.019473,0.128568,-206.0078,112.67299)"
- cx="107.5884"
- cy="83.990814"
- fx="107.5884"
- fy="83.990814"
- r="12.551644" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9050"
- id="linearGradient8269"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-99.088729,-66.498056)"
- x1="71.288956"
- y1="124.11652"
- x2="70.826942"
- y2="95" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4255"
- id="linearGradient8019"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0,0.39514626,-0.39514626,0,44.916158,15.340618)"
- x1="51.064072"
- y1="36.929211"
- x2="2.973438"
- y2="15.565757" />
- <linearGradient
- id="linearGradient4255">
- <stop
- style="stop-color:#2a5285;stop-opacity:1;"
- offset="0"
- id="stop4257" />
- <stop
- style="stop-color:#9acbff;stop-opacity:1;"
- offset="1"
- id="stop4259" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient35212"
- id="linearGradient8021"
- gradientUnits="userSpaceOnUse"
- x1="38.434811"
- y1="17.814163"
- x2="36.937714"
- y2="44.153889" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient35212">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop35214" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop35216" />
- </linearGradient>
- <linearGradient
- id="linearGradient2817">
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop2819" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0.48453608;"
- offset="1"
- id="stop2821" />
- </linearGradient>
- <linearGradient
- id="linearGradient2679">
- <stop
- id="stop2681"
- offset="0"
- style="stop-color:#74a2d6;stop-opacity:1" />
- <stop
- id="stop2683"
- offset="1"
- style="stop-color:#2a5285;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- id="linearGradient2697">
- <stop
- id="stop2699"
- offset="0"
- style="stop-color:#3364a1;stop-opacity:1" />
- <stop
- id="stop2701"
- offset="1"
- style="stop-color:#203f66;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient3081">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop3083" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop3085" />
- </linearGradient>
- <linearGradient
- id="linearGradient10869">
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop10871" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0.48453608;"
- offset="1"
- id="stop10873" />
- </linearGradient>
- <linearGradient
- id="linearGradient10883">
- <stop
- id="stop10885"
- offset="0"
- style="stop-color:#babdb6" />
- <stop
- id="stop10887"
- offset="1"
- style="stop-color:#555753" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2817"
- id="linearGradient11079"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.103262,0,0,1.054917,-163.1228,-76.31138)"
- x1="174.83363"
- y1="84.263489"
- x2="174.74524"
- y2="105.49083" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2679"
- id="radialGradient11081"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(3.562309e-6,-1.07205,1.992104,-1.250658e-6,-175.6121,212.6949)"
- cx="170.2664"
- cy="102.3308"
- fx="170.2664"
- fy="102.3308"
- r="11" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11001"
- id="linearGradient11083"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1,0,0,1.004384,-145.0004,-71.4625)"
- x1="169"
- y1="110.33805"
- x2="169"
- y2="93.204849" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3081"
- id="linearGradient11085"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-4e-4,-0.09426)"
- x1="15.089521"
- y1="15.291994"
- x2="14"
- y2="52.510574" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2817"
- id="linearGradient11087"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.103262,0,0,1.054917,-163.1228,-76.31138)"
- x1="174.83363"
- y1="84.263489"
- x2="174.74524"
- y2="105.49083" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11007"
- id="radialGradient11089"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(3.562309e-6,-1.07205,1.992104,-1.250658e-6,-175.6121,212.6949)"
- cx="169.77171"
- cy="100.20107"
- fx="169.77171"
- fy="100.20107"
- r="11" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2697"
- id="linearGradient11091"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1,0,0,1.004384,-145.0004,-71.4625)"
- x1="169"
- y1="110.33805"
- x2="169"
- y2="93.204849" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3081"
- id="linearGradient11093"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-4e-4,-0.09426)"
- x1="15.089521"
- y1="15.291994"
- x2="14"
- y2="52.510574" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3892"
- id="linearGradient3898"
- x1="429.15128"
- y1="599.56494"
- x2="433.13641"
- y2="610.92285"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-413.32707,-580.0333)" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient3892">
- <stop
- style="stop-color:#fffff8;stop-opacity:1;"
- offset="0"
- id="stop3894" />
- <stop
- style="stop-color:#fffff8;stop-opacity:0;"
- offset="1"
- id="stop3896" />
- </linearGradient>
- <linearGradient
- y2="610.92285"
- x2="433.13641"
- y1="599.56494"
- x1="429.15128"
- gradientTransform="translate(-467.41538,-559.43711)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient6730"
- xlink:href="#linearGradient3892"
- inkscape:collect="always" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3892-7"
- id="linearGradient3898-1"
- x1="429.15128"
- y1="599.56494"
- x2="433.13641"
- y2="610.92285"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.3379015,0,0,1.3379015,-570.79911,-780.96842)" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient3892-7">
- <stop
- style="stop-color:#fffff8;stop-opacity:1;"
- offset="0"
- id="stop3894-4" />
- <stop
- style="stop-color:#fffff8;stop-opacity:0;"
- offset="1"
- id="stop3896-0" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3872"
- id="linearGradient3908"
- gradientUnits="userSpaceOnUse"
- x1="434.15228"
- y1="610.42682"
- x2="432.16248"
- y2="601.80182"
- gradientTransform="matrix(1.3379015,0,0,1.3379015,-570.79912,-780.96845)" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient3872">
- <stop
- style="stop-color:#1a8f23;stop-opacity:1"
- offset="0"
- id="stop3874" />
- <stop
- style="stop-color:#66ee77;stop-opacity:1"
- offset="1"
- id="stop3876" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3872"
- id="linearGradient6802"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.3379015,0,0,1.3379015,-570.79912,-780.96845)"
- x1="434.15228"
- y1="610.42682"
- x2="432.16248"
- y2="601.80182" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3892-7"
- id="linearGradient6804"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.3379015,0,0,1.3379015,-570.79911,-780.96842)"
- x1="429.15128"
- y1="599.56494"
- x2="433.13641"
- y2="610.92285" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient7580"
- id="linearGradient7586"
- x1="9.4567318"
- y1="5.060648"
- x2="9.1648064"
- y2="44.43565"
- gradientUnits="userSpaceOnUse" />
- </defs>
- <sodipodi:namedview
- inkscape:window-y="-8"
- inkscape:window-x="-8"
- inkscape:window-height="838"
- inkscape:window-width="1600"
- inkscape:document-units="px"
- inkscape:grid-bbox="true"
- showgrid="false"
- inkscape:current-layer="g26971"
- inkscape:cy="31.046152"
- inkscape:cx="19.499336"
- inkscape:zoom="1"
- inkscape:pageshadow="2"
- inkscape:pageopacity="0.0"
- borderopacity="0.25490196"
- bordercolor="#666666"
- pagecolor="#ffffff"
- id="base"
- inkscape:showpageshadow="false"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata4">
- <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>
- <dc:subject>
- <rdf:Bag>
- <rdf:li>document</rdf:li>
- <rdf:li>settings</rdf:li>
- <rdf:li>preferences</rdf:li>
- <rdf:li>properties</rdf:li>
- <rdf:li>tweak</rdf:li>
- </rdf:Bag>
- </dc:subject>
- <cc:license
- rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
- <dc:creator>
- <cc:Agent>
- <dc:title>Jakub Steiner</dc:title>
- </cc:Agent>
- </dc:creator>
- <dc:source>http://jimmac.musichall.cz</dc:source>
- </cc:Work>
- <cc:License
- rdf:about="http://creativecommons.org/licenses/publicdomain/">
- <cc:permits
- rdf:resource="http://creativecommons.org/ns#Reproduction" />
- <cc:permits
- rdf:resource="http://creativecommons.org/ns#Distribution" />
- <cc:permits
- rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
- </cc:License>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:groupmode="layer"
- id="layer6"
- inkscape:label="Shadow" />
- <g
- style="display:inline"
- inkscape:groupmode="layer"
- inkscape:label="Base"
- id="layer1" />
- <g
- inkscape:groupmode="layer"
- id="layer5"
- inkscape:label="Text"
- style="display:inline">
- <g
- style="display:inline"
- id="g26971"
- transform="translate(-48.411695,-4.5961942)">
- <g
- id="g27205"
- transform="translate(102.5,0)">
- <g
- id="g35397"
- transform="matrix(1.0365373,0,0,1.0365373,-1.1521053,-1.338541)">
- <g
- style="display:inline"
- id="g5022"
- transform="matrix(0.02165152,0,0,0.01485743,-8.580705,46.281584)">
- <rect
- y="-150.69685"
- x="-1559.2523"
- height="478.35718"
- width="1339.6335"
- id="rect4173"
- style="opacity:0.40206185;color:#000000;fill:url(#linearGradient35425);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" />
- <path
- sodipodi:nodetypes="cccc"
- id="path5058"
- d="m -219.61876,-150.68038 c 0,0 0,478.33079 0,478.33079 142.874166,0.90045 345.40022,-107.16966 345.40014,-239.196175 0,-132.026537 -159.436816,-239.134595 -345.40014,-239.134615 z"
- style="opacity:0.40206185;color:#000000;fill:url(#radialGradient35427);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
- inkscape:connector-curvature="0" />
- <path
- style="opacity:0.40206185;color:#000000;fill:url(#radialGradient35429);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
- d="m -1559.2523,-150.68038 c 0,0 0,478.33079 0,478.33079 -142.8742,0.90045 -345.4002,-107.16966 -345.4002,-239.196175 0,-132.026537 159.4368,-239.134595 345.4002,-239.134615 z"
- id="path5018"
- sodipodi:nodetypes="cccc"
- inkscape:connector-curvature="0" />
- </g>
- <path
- style="color:#000000;fill:url(#radialGradient35431);fill-opacity:1;fill-rule:nonzero;stroke:#808080;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible"
- d="m -43.835704,48.163134 32.576903,0 c 0.636573,0 1.149049,-0.512476 1.149049,-1.149049 l 0,-31.105315 c -3.168864,-2.905608 -6.491445,-5.9334976 -9.871181,-8.6661296 l -23.854771,0 c -0.636573,0 -1.149048,0.512475 -1.149048,1.149048 l 0,38.6223966 c 0,0.636573 0.512475,1.149049 1.149048,1.149049 z"
- id="rect15391"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="sssccssss" />
- <path
- style="color:#000000;fill:none;stroke:url(#radialGradient35433);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible"
- d="m -43.773203,47.225634 32.47779,0 c 0.08257,0 0.148336,-0.06648 0.149048,-0.149049 l 0.266316,-30.868047 c 0.0068,-0.783664 -8.098317,-8.1134053 -9.428891,-8.103525 l -23.464263,0.1742364 c -0.08257,6.131e-4 -0.149048,0.06648 -0.149048,0.149049 l 0,38.6482866 c 0,0.08257 0.06648,0.149049 0.149048,0.149049 z"
- id="rect15660"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="sssssssss" />
- <g
- style="display:inline"
- transform="translate(-50.963312,3.5961942)"
- id="g2253">
- <rect
- style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible"
- id="rect15686"
- width="22.000004"
- height="1"
- x="15.000002"
- y="9"
- rx="0.15156493"
- ry="0.065390877" />
- <rect
- style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible"
- id="rect15690"
- width="22.000004"
- height="1"
- x="15.000002"
- y="13"
- rx="0.15156493"
- ry="0.065390877" />
- <rect
- style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible"
- id="rect15694"
- width="22.000004"
- height="1"
- x="15.000002"
- y="17"
- rx="0.15156493"
- ry="0.065390877" />
- <rect
- style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible"
- id="rect15698"
- width="22.000004"
- height="1"
- x="15.000002"
- y="21"
- rx="0.15156493"
- ry="0.065390877" />
- <rect
- style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible"
- id="rect15732"
- width="9.9000053"
- height="1"
- x="14.999992"
- y="25"
- rx="0.068204239"
- ry="0.065390877" />
- <rect
- style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible"
- id="rect15736"
- width="22.000004"
- height="1"
- x="14.999992"
- y="29"
- rx="0.15156493"
- ry="0.065390877" />
- <rect
- style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible"
- id="rect15740"
- width="22.000004"
- height="1"
- x="14.999992"
- y="33"
- rx="0.15156493"
- ry="0.065390877" />
- <rect
- style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible"
- id="rect15744"
- width="15.400014"
- height="1"
- x="14.999992"
- y="37"
- rx="0.10609552"
- ry="0.065390877" />
- <rect
- style="fill:#9c9c9c;fill-opacity:1;fill-rule:evenodd;stroke:none"
- id="rect23058"
- width="1.875"
- height="1.875"
- x="10.437507"
- y="8.5"
- rx="0"
- ry="0" />
- <rect
- ry="0"
- rx="0"
- y="12.4375"
- x="10.437507"
- height="1.875"
- width="1.875"
- id="rect23060"
- style="fill:#9c9c9c;fill-opacity:1;fill-rule:evenodd;stroke:none" />
- <rect
- style="fill:#9c9c9c;fill-opacity:1;fill-rule:evenodd;stroke:none"
- id="rect23062"
- width="1.875"
- height="1.875"
- x="10.437507"
- y="16.4375"
- rx="0"
- ry="0" />
- <rect
- ry="0"
- rx="0"
- y="20.40625"
- x="10.437507"
- height="1.875"
- width="1.875"
- id="rect23064"
- style="fill:#9c9c9c;fill-opacity:1;fill-rule:evenodd;stroke:none" />
- <rect
- style="fill:#9c9c9c;fill-opacity:1;fill-rule:evenodd;stroke:none"
- id="rect23066"
- width="1.875"
- height="1.875"
- x="10.437507"
- y="24.40625"
- rx="0"
- ry="0" />
- <rect
- ry="0"
- rx="0"
- y="28.383726"
- x="10.437507"
- height="1.875"
- width="1.875"
- id="rect23068"
- style="fill:#9c9c9c;fill-opacity:1;fill-rule:evenodd;stroke:none" />
- <rect
- style="fill:#9c9c9c;fill-opacity:1;fill-rule:evenodd;stroke:none"
- id="rect23070"
- width="1.875"
- height="1.875"
- x="10.437507"
- y="32.493786"
- rx="0"
- ry="0" />
- <rect
- ry="0"
- rx="0"
- y="36.47126"
- x="10.437507"
- height="1.875"
- width="1.875"
- id="rect23072"
- style="fill:#9c9c9c;fill-opacity:1;fill-rule:evenodd;stroke:none" />
- </g>
- <g
- style="display:inline"
- id="g22515"
- transform="matrix(1,0,0,-1,-51.588305,51.80958)">
- <path
- style="color:#000000;fill:url(#linearGradient35435);fill-opacity:1;fill-rule:evenodd;stroke:#808080;stroke-width:1.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
- d="m 31.474987,44.634988 c 4.90304,-4.045325 7.776832,-6.894317 10.079906,-8.785106 -3.331029,0.964689 -4.802716,1.485612 -8.911474,1.644622 0,0 -0.355929,6.640484 -1.168432,7.140484 z"
- id="path2210"
- sodipodi:nodetypes="cccc"
- inkscape:connector-curvature="0" />
- <path
- sodipodi:nodetypes="cccc"
- id="path2247"
- d="m 33.389463,42.509778 c 1.369779,-0.683829 4.825996,-2.853572 6.125377,-4.734576 -1.662385,0.469833 -3.058295,0.543813 -5.812819,0.742832 0,0 -0.03655,3.0179 -0.312558,3.991744 z"
- style="opacity:0.57079647;color:#000000;fill:none;stroke:url(#linearGradient35437);stroke-width:0.99999982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
- inkscape:connector-curvature="0" />
- </g>
- </g>
- <g
- transform="translate(25.911695,4.596194)"
- style="display:inline"
- id="g2837" />
- <g
- id="g6797"
- transform="translate(-39.1875,0.875)">
- <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;opacity:0.75663715;color:#000000;fill:url(#linearGradient7586);fill-opacity:1;stroke:none;stroke-width:0.40099999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
- d="m 16.5,18.375 a 1.1892626,1.1892626 0 0 0 -0.6875,0.375 l -7.90625,8.625 -4.375,-3.84375 a 1.1892626,1.1892626 0 0 0 -1.6875,0.125 l -3.78125,4.4375 a 1.1892626,1.1892626 0 0 0 0.125,1.6875 l 9.59375,8.1875 A 1.1892626,1.1892626 0 0 0 9.4375,37.875 L 21.84375,24.25 a 1.1892626,1.1892626 0 0 0 -0.0625,-1.6875 L 17.5,18.6875 a 1.1892626,1.1892626 0 0 0 -1,-0.3125 z"
- id="path7576"
- inkscape:connector-curvature="0" />
- <path
- sodipodi:nodetypes="ccccccc"
- inkscape:connector-curvature="0"
- id="path3102"
- d="M 16.673107,19.547272 8.013486,29.062561 2.742529,24.448272 -1.020319,28.880071 8.554039,37.074718 20.971437,23.444847 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:#1a8f23;fill-opacity:1;stroke:#1a8f23;stroke-width:0.40137047;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" />
- <path
- sodipodi:nodetypes="ccccccccc"
- inkscape:connector-curvature="0"
- id="path3880"
- d="m 16.788086,20.928521 -8.530914,9.356615 -5.221977,-4.498962 -2.759421,3.052021 6.43865,5.393482 1.923234,1.630501 1.672377,-1.881357 9.448928,-10.410613 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(#linearGradient6802);fill-opacity:1;stroke:none;stroke-width:3.9000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
- <path
- sodipodi:nodetypes="ccccccc"
- inkscape:connector-curvature="0"
- id="path3884"
- d="M 16.810636,21.547 8.304205,30.907259 3.035188,26.371539 0.892458,28.796452 8.529702,35.204599 19.1684,23.612017 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:none;stroke:url(#linearGradient6804);stroke-width:0.86294645;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>
- </g>
- </g>
- </g>
-</svg>
diff --git a/src/com.gluster.storage.management.gui/icons/tango/scalable/task_status_error.svg b/src/com.gluster.storage.management.gui/icons/tango/scalable/task_status_error.svg
deleted file mode 100644
index 05f0adf2..00000000
--- a/src/com.gluster.storage.management.gui/icons/tango/scalable/task_status_error.svg
+++ /dev/null
@@ -1,1945 +0,0 @@
-<?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"
- inkscape:export-ydpi="240.00000"
- inkscape:export-xdpi="240.00000"
- inkscape:export-filename="/home/jimmac/gfx/novell/pdes/trunk/docs/BIGmime-text.png"
- sodipodi:docname="task_status_error.svg"
- inkscape:version="0.48.1 "
- sodipodi:version="0.32"
- id="svg249"
- height="48.000000px"
- width="48.000000px"
- inkscape:output_extension="org.inkscape.output.svg.inkscape"
- version="1.1">
- <defs
- id="defs3">
- <linearGradient
- inkscape:collect="always"
- id="linearGradient13792">
- <stop
- style="stop-color:#8f8f8f;stop-opacity:1;"
- offset="0"
- id="stop13794" />
- <stop
- style="stop-color:#8f8f8f;stop-opacity:0;"
- offset="1"
- id="stop13796" />
- </linearGradient>
- <linearGradient
- id="linearGradient9161">
- <stop
- id="stop9163"
- offset="0"
- style="stop-color:#e70707;stop-opacity:1" />
- <stop
- id="stop9165"
- offset="1"
- style="stop-color:#de6161;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- id="linearGradient9141">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop9143" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop9145" />
- </linearGradient>
- <linearGradient
- id="linearGradient9129">
- <stop
- style="stop-color:#1a8f23;stop-opacity:1"
- offset="0"
- id="stop9131" />
- <stop
- style="stop-color:#58dd68;stop-opacity:1"
- offset="1"
- id="stop9133" />
- </linearGradient>
- <linearGradient
- id="linearGradient11007">
- <stop
- style="stop-color:#8ab9ed;stop-opacity:1"
- offset="0"
- id="stop11009" />
- <stop
- style="stop-color:#2a5285;stop-opacity:1"
- offset="1"
- id="stop11011" />
- </linearGradient>
- <linearGradient
- id="linearGradient11001">
- <stop
- style="stop-color:#3a71b6;stop-opacity:1"
- offset="0"
- id="stop11003" />
- <stop
- style="stop-color:#203f66;stop-opacity:1"
- offset="1"
- id="stop11005" />
- </linearGradient>
- <linearGradient
- id="linearGradient9056">
- <stop
- style="stop-color:#6acd11;stop-opacity:1"
- offset="0"
- id="stop9058" />
- <stop
- style="stop-color:#4cbe01;stop-opacity:1"
- offset="1"
- id="stop9060" />
- </linearGradient>
- <linearGradient
- id="linearGradient9050">
- <stop
- id="stop9052"
- offset="0"
- style="stop-color:#428405;stop-opacity:1" />
- <stop
- id="stop9054"
- offset="1"
- style="stop-color:#356804;stop-opacity:1" />
- </linearGradient>
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="0 : 24 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="48 : 24 : 1"
- inkscape:persp3d-origin="24 : 16 : 1"
- id="perspective83" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5060"
- id="radialGradient5031"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
- cx="605.71429"
- cy="486.64789"
- fx="605.71429"
- fy="486.64789"
- r="117.14286" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient5060">
- <stop
- style="stop-color:black;stop-opacity:1;"
- offset="0"
- id="stop5062" />
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="1"
- id="stop5064" />
- </linearGradient>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5060"
- id="radialGradient5029"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
- cx="605.71429"
- cy="486.64789"
- fx="605.71429"
- fy="486.64789"
- r="117.14286" />
- <linearGradient
- id="linearGradient5048">
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="0"
- id="stop5050" />
- <stop
- id="stop5056"
- offset="0.5"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="1"
- id="stop5052" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5048"
- id="linearGradient5027"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
- x1="302.85715"
- y1="366.64789"
- x2="302.85715"
- y2="609.50507" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient4542">
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop4544" />
- <stop
- style="stop-color:#000000;stop-opacity:0;"
- offset="1"
- id="stop4546" />
- </linearGradient>
- <linearGradient
- id="linearGradient15662">
- <stop
- id="stop15664"
- offset="0.0000000"
- style="stop-color:#ffffff;stop-opacity:1.0000000;" />
- <stop
- id="stop15666"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:1;" />
- </linearGradient>
- <radialGradient
- id="aigrd3"
- cx="20.8921"
- cy="64.5679"
- r="5.257"
- fx="20.8921"
- fy="64.5679"
- gradientUnits="userSpaceOnUse">
- <stop
- offset="0"
- style="stop-color:#F0F0F0"
- id="stop15573" />
- <stop
- offset="1.0000000"
- style="stop-color:#9a9a9a;stop-opacity:1.0000000;"
- id="stop15575" />
- </radialGradient>
- <radialGradient
- id="aigrd2"
- cx="20.8921"
- cy="114.5684"
- r="5.256"
- fx="20.8921"
- fy="114.5684"
- gradientUnits="userSpaceOnUse">
- <stop
- offset="0"
- style="stop-color:#F0F0F0"
- id="stop15566" />
- <stop
- offset="1.0000000"
- style="stop-color:#9a9a9a;stop-opacity:1.0000000;"
- id="stop15568" />
- </radialGradient>
- <linearGradient
- id="linearGradient269">
- <stop
- id="stop270"
- offset="0.0000000"
- style="stop-color:#a3a3a3;stop-opacity:1.0000000;" />
- <stop
- id="stop271"
- offset="1.0000000"
- style="stop-color:#4c4c4c;stop-opacity:1.0000000;" />
- </linearGradient>
- <linearGradient
- id="linearGradient259">
- <stop
- id="stop260"
- offset="0.0000000"
- style="stop-color:#fafafa;stop-opacity:1.0000000;" />
- <stop
- id="stop261"
- offset="1.0000000"
- style="stop-color:#bbbbbb;stop-opacity:1.0000000;" />
- </linearGradient>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient269"
- id="radialGradient15656"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.968273,0,0,1.032767,-96.646447,0.646447)"
- cx="8.8244190"
- cy="3.7561285"
- fx="8.8244190"
- fy="3.7561285"
- r="37.751713" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient259"
- id="radialGradient15658"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.960493,0,0,1.041132,-100,0)"
- cx="33.966679"
- cy="35.736916"
- fx="33.966679"
- fy="35.736916"
- r="86.708450" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient15662"
- id="radialGradient15668"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.968273,0,0,1.032767,-96.646447,0.646447)"
- cx="8.1435566"
- cy="7.2678967"
- fx="8.1435566"
- fy="7.2678967"
- r="38.158695" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4542"
- id="radialGradient4548"
- cx="24.306795"
- cy="42.07798"
- fx="24.306795"
- fy="42.07798"
- r="15.821514"
- gradientTransform="matrix(1.000000,0.000000,0.000000,0.284916,0.000000,30.08928)"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2251"
- id="linearGradient2257"
- x1="33.396004"
- y1="36.921333"
- x2="34.170048"
- y2="38.070381"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(2.1672066,1.6680446)" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient2251">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop2253" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop2255" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2224"
- id="linearGradient2230"
- x1="35.996582"
- y1="40.458221"
- x2="33.664921"
- y2="37.770721"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(6.161836,4.033411)" />
- <linearGradient
- id="linearGradient2224">
- <stop
- style="stop-color:#7c7c7c;stop-opacity:1;"
- offset="0"
- id="stop2226" />
- <stop
- style="stop-color:#b8b8b8;stop-opacity:1;"
- offset="1"
- id="stop2228" />
- </linearGradient>
- <linearGradient
- y2="37.770721"
- x2="33.664921"
- y1="40.458221"
- x1="35.996582"
- gradientTransform="translate(2.1672066,2.0430446)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22486"
- xlink:href="#linearGradient2224"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient5048-2">
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="0"
- id="stop5050-9" />
- <stop
- id="stop5056-4"
- offset="0.5"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="1"
- id="stop5052-5" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient5060-1">
- <stop
- style="stop-color:black;stop-opacity:1;"
- offset="0"
- id="stop5062-6" />
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="1"
- id="stop5064-9" />
- </linearGradient>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5060-1"
- id="radialGradient5031-1"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
- cx="605.71429"
- cy="486.64789"
- fx="605.71429"
- fy="486.64789"
- r="117.14286" />
- <linearGradient
- id="linearGradient2206">
- <stop
- style="stop-color:#c3c6c0;stop-opacity:1.0000000;"
- offset="0.0000000"
- id="stop2208" />
- <stop
- style="stop-color:#e8eae6;stop-opacity:1.0000000;"
- offset="1.0000000"
- id="stop2210" />
- </linearGradient>
- <linearGradient
- id="linearGradient2214">
- <stop
- style="stop-color:#a9aaa7;stop-opacity:1.0000000;"
- offset="0.0000000"
- id="stop2216" />
- <stop
- style="stop-color:#676964;stop-opacity:1.0000000;"
- offset="1.0000000"
- id="stop2218" />
- </linearGradient>
- <linearGradient
- id="linearGradient2222">
- <stop
- style="stop-color:#5187d6;stop-opacity:1;"
- offset="0"
- id="stop2224" />
- <stop
- style="stop-color:#1e4580;stop-opacity:1;"
- offset="1"
- id="stop2227" />
- </linearGradient>
- <linearGradient
- id="linearGradient5048-2-8">
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="0"
- id="stop5050-9-2" />
- <stop
- id="stop5056-4-6"
- offset="0.5"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="1"
- id="stop5052-5-0" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2206-8"
- id="linearGradient26980-6"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.62034994,0,0,0.66330865,-49.866678,4.4079179)"
- x1="25.861118"
- y1="26.133587"
- x2="18.300278"
- y2="19.567596" />
- <linearGradient
- id="linearGradient2206-8">
- <stop
- style="stop-color:#c3c6c0;stop-opacity:1.0000000;"
- offset="0.0000000"
- id="stop2208-7" />
- <stop
- style="stop-color:#e8eae6;stop-opacity:1.0000000;"
- offset="1.0000000"
- id="stop2210-2" />
- </linearGradient>
- <linearGradient
- id="linearGradient2214-2">
- <stop
- style="stop-color:#a9aaa7;stop-opacity:1.0000000;"
- offset="0.0000000"
- id="stop2216-2" />
- <stop
- style="stop-color:#676964;stop-opacity:1.0000000;"
- offset="1.0000000"
- id="stop2218-0" />
- </linearGradient>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2222-9"
- id="radialGradient26984-3"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1520174,0,0,0.90350734,-62.623679,-4.288468)"
- cx="23.994133"
- cy="32.266911"
- fx="23.994133"
- fy="32.266911"
- r="19.088932" />
- <linearGradient
- id="linearGradient2222-9">
- <stop
- style="stop-color:#5187d6;stop-opacity:1;"
- offset="0"
- id="stop2224-6" />
- <stop
- style="stop-color:#1e4580;stop-opacity:1;"
- offset="1"
- id="stop2227-5" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2238-7"
- id="linearGradient26986-6"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.62034994,0,0,0.6615617,-49.866678,5.1018165)"
- x1="20.338758"
- y1="19.636894"
- x2="46.092255"
- y2="39.708324" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient2238-7">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop2240-0" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop2242-5" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2180-7"
- id="linearGradient26988-4"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.4813991,0,0,1.1400975,-61.032972,-4.6105736)"
- x1="8.8207808"
- y1="12.53757"
- x2="12.499243"
- y2="24.238262" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient2180-7">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop2182-3" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop2184-7" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2223-5"
- id="linearGradient26990-6"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6513633,0,0,0.6513633,49.389075,5.6726225)"
- x1="35.694206"
- y1="37.333858"
- x2="15.044075"
- y2="5.9588566" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient2223-5">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop2225-2" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop2229-2" />
- </linearGradient>
- <linearGradient
- y2="5.9588566"
- x2="15.044075"
- y1="37.333858"
- x1="35.694206"
- gradientTransform="matrix(0.6513633,0,0,0.6513633,-50.610925,5.6726225)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient27106"
- xlink:href="#linearGradient2223-5"
- inkscape:collect="always" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5048"
- id="linearGradient27240"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
- x1="302.85715"
- y1="366.64789"
- x2="302.85715"
- y2="609.50507" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5060"
- id="radialGradient27242"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
- cx="605.71429"
- cy="486.64789"
- fx="605.71429"
- fy="486.64789"
- r="117.14286" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5060"
- id="radialGradient27244"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
- cx="605.71429"
- cy="486.64789"
- fx="605.71429"
- fy="486.64789"
- r="117.14286" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient259"
- id="radialGradient27246"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.960493,0,0,-1.041132,-51.588305,51.80958)"
- cx="33.966679"
- cy="35.736916"
- fx="33.966679"
- fy="35.736916"
- r="86.708450" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient15662"
- id="radialGradient27250"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.968273,0,0,-1.032767,-48.234752,51.163133)"
- cx="8.1435566"
- cy="7.2678967"
- fx="8.1435566"
- fy="7.2678967"
- r="38.158695" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2224"
- id="linearGradient27252"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(2.1672066,2.0430446)"
- x1="35.996582"
- y1="40.458221"
- x2="33.664921"
- y2="37.770721" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2251"
- id="linearGradient27254"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(2.1672066,1.6680446)"
- x1="33.396004"
- y1="36.921333"
- x2="34.170048"
- y2="38.070381" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2206-8"
- id="linearGradient27256"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.62034994,0,0,0.66330865,-52.866678,3.4079179)"
- x1="25.861118"
- y1="26.133587"
- x2="18.300278"
- y2="19.567596" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2222-9"
- id="radialGradient27258"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1520174,0,0,0.90350734,-65.623679,-5.288468)"
- cx="23.994133"
- cy="32.266911"
- fx="23.994133"
- fy="32.266911"
- r="19.088932" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2238-7"
- id="linearGradient27260"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.62034994,0,0,0.6615617,-52.866678,4.1018165)"
- x1="20.338758"
- y1="19.636894"
- x2="46.092255"
- y2="39.708324" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2180-7"
- id="linearGradient27262"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.4813991,0,0,1.1400975,-64.032972,-5.6105736)"
- x1="8.8207808"
- y1="12.53757"
- x2="12.499243"
- y2="24.238262" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2223-5"
- id="linearGradient27264"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6513633,0,0,0.6513633,-53.610925,4.6726225)"
- x1="35.694206"
- y1="37.333858"
- x2="15.044075"
- y2="5.9588566" />
- <radialGradient
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1,0,0,0.536723,0,16.87306)"
- r="15.644737"
- fy="36.421127"
- fx="24.837126"
- cy="36.421127"
- cx="24.837126"
- id="radialGradient8668"
- xlink:href="#linearGradient8662"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient8662"
- inkscape:collect="always">
- <stop
- id="stop8664"
- offset="0"
- style="stop-color:#000000;stop-opacity:1;" />
- <stop
- id="stop8666"
- offset="1"
- style="stop-color:#000000;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient2591">
- <stop
- style="stop-color:#73d216"
- offset="0"
- id="stop2593" />
- <stop
- style="stop-color:#49bd00;stop-opacity:1;"
- offset="1"
- id="stop2595" />
- </linearGradient>
- <linearGradient
- id="linearGradient2591-7">
- <stop
- style="stop-color:#73d216"
- offset="0"
- id="stop2593-1" />
- <stop
- style="stop-color:#49bd00;stop-opacity:1;"
- offset="1"
- id="stop2595-8" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5048"
- id="linearGradient35425"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
- x1="302.85715"
- y1="366.64789"
- x2="302.85715"
- y2="609.50507" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5060"
- id="radialGradient35427"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
- cx="605.71429"
- cy="486.64789"
- fx="605.71429"
- fy="486.64789"
- r="117.14286" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5060"
- id="radialGradient35429"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
- cx="605.71429"
- cy="486.64789"
- fx="605.71429"
- fy="486.64789"
- r="117.14286" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient259"
- id="radialGradient35431"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.960493,0,0,-1.041132,-51.588305,51.80958)"
- cx="33.966679"
- cy="8.8006353"
- fx="33.966679"
- fy="8.8006353"
- r="86.708450" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient15662"
- id="radialGradient35433"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.968273,0,0,-1.032767,-48.234752,51.163133)"
- cx="8.1435566"
- cy="7.2678967"
- fx="8.1435566"
- fy="7.2678967"
- r="38.158695" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2224"
- id="linearGradient35435"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(2.1672066,2.0430446)"
- x1="35.996582"
- y1="40.458221"
- x2="33.664921"
- y2="37.770721" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2251"
- id="linearGradient35437"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(2.1672066,1.6680446)"
- x1="33.396004"
- y1="36.921333"
- x2="34.170048"
- y2="38.070381" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2206-8"
- id="linearGradient35439"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.62034994,0,0,0.66330865,-52.866678,3.4079179)"
- x1="25.861118"
- y1="26.133587"
- x2="18.300278"
- y2="19.567596" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2222-9"
- id="radialGradient35441"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1520174,0,0,0.90350734,-65.623679,-5.288468)"
- cx="23.994133"
- cy="32.266911"
- fx="23.994133"
- fy="32.266911"
- r="19.088932" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2238-7"
- id="linearGradient35443"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.62034994,0,0,0.6615617,-52.866678,4.1018165)"
- x1="20.338758"
- y1="19.636894"
- x2="46.092255"
- y2="39.708324" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2180-7"
- id="linearGradient35445"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.4813991,0,0,1.1400975,-64.032972,-5.6105736)"
- x1="8.8207808"
- y1="12.53757"
- x2="12.499243"
- y2="24.238262" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2223-5"
- id="linearGradient35447"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6513633,0,0,0.6513633,-53.610925,4.6726225)"
- x1="35.694206"
- y1="37.333858"
- x2="15.044075"
- y2="5.9588566" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5075"
- id="linearGradient2306"
- gradientUnits="userSpaceOnUse"
- x1="71.288956"
- y1="124.11652"
- x2="70.826942"
- y2="95"
- gradientTransform="translate(-56.000421,-79.094251)" />
- <linearGradient
- id="linearGradient5075">
- <stop
- style="stop-color:#adb0a8;stop-opacity:1;"
- offset="0"
- id="stop5077" />
- <stop
- style="stop-color:#464744;stop-opacity:1"
- offset="1"
- id="stop5079" />
- </linearGradient>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2691"
- id="radialGradient2314"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.05324342,-0.836238,2.019473,0.128568,-162.9195,100.0768)"
- cx="107.5884"
- cy="83.990814"
- fx="107.5884"
- fy="83.990814"
- r="12.551644" />
- <linearGradient
- id="linearGradient2691">
- <stop
- id="stop2693"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1" />
- <stop
- id="stop2695"
- offset="1"
- style="stop-color:#d3d7cf" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2684"
- id="linearGradient2690"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.128181,0,0,1.128181,-53.99314,-83.36009)"
- x1="70.913956"
- y1="101.74152"
- x2="70.951942"
- y2="88.923729" />
- <linearGradient
- id="linearGradient2684">
- <stop
- id="stop2686"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop2688"
- offset="1"
- style="stop-color:#000000;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- y2="88.923729"
- x2="70.951942"
- y1="101.74152"
- x1="70.913956"
- gradientTransform="matrix(1.128181,0,0,1.128181,-64.993141,-91.360091)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient8168"
- xlink:href="#linearGradient2684"
- inkscape:collect="always" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2684"
- id="linearGradient8252"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.128181,0,0,1.128181,-108.08145,-78.763896)"
- x1="70.913956"
- y1="101.74152"
- x2="70.951942"
- y2="88.923729" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2691"
- id="radialGradient8254"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.05324342,-0.836238,2.019473,0.128568,-206.0078,112.67299)"
- cx="107.5884"
- cy="83.990814"
- fx="107.5884"
- fy="83.990814"
- r="12.551644" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5075"
- id="linearGradient8256"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-99.088729,-66.498056)"
- x1="71.288956"
- y1="124.11652"
- x2="70.826942"
- y2="95" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2684"
- id="linearGradient8265"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.128181,0,0,1.128181,-108.08145,-78.763896)"
- x1="70.913956"
- y1="101.74152"
- x2="70.951942"
- y2="88.923729" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9056"
- id="radialGradient8267"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.05324342,-0.836238,2.019473,0.128568,-206.0078,112.67299)"
- cx="107.5884"
- cy="83.990814"
- fx="107.5884"
- fy="83.990814"
- r="12.551644" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9050"
- id="linearGradient8269"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-99.088729,-66.498056)"
- x1="71.288956"
- y1="124.11652"
- x2="70.826942"
- y2="95" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4255"
- id="linearGradient8019"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0,0.39514626,-0.39514626,0,44.916158,15.340618)"
- x1="51.064072"
- y1="36.929211"
- x2="2.973438"
- y2="15.565757" />
- <linearGradient
- id="linearGradient4255">
- <stop
- style="stop-color:#2a5285;stop-opacity:1;"
- offset="0"
- id="stop4257" />
- <stop
- style="stop-color:#9acbff;stop-opacity:1;"
- offset="1"
- id="stop4259" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient35212"
- id="linearGradient8021"
- gradientUnits="userSpaceOnUse"
- x1="38.434811"
- y1="17.814163"
- x2="36.937714"
- y2="44.153889" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient35212">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop35214" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop35216" />
- </linearGradient>
- <linearGradient
- id="linearGradient2817">
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop2819" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0.48453608;"
- offset="1"
- id="stop2821" />
- </linearGradient>
- <linearGradient
- id="linearGradient2679">
- <stop
- id="stop2681"
- offset="0"
- style="stop-color:#74a2d6;stop-opacity:1" />
- <stop
- id="stop2683"
- offset="1"
- style="stop-color:#2a5285;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- id="linearGradient2697">
- <stop
- id="stop2699"
- offset="0"
- style="stop-color:#3364a1;stop-opacity:1" />
- <stop
- id="stop2701"
- offset="1"
- style="stop-color:#203f66;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient3081">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop3083" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop3085" />
- </linearGradient>
- <linearGradient
- id="linearGradient10869">
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop10871" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0.48453608;"
- offset="1"
- id="stop10873" />
- </linearGradient>
- <linearGradient
- id="linearGradient10883">
- <stop
- id="stop10885"
- offset="0"
- style="stop-color:#babdb6" />
- <stop
- id="stop10887"
- offset="1"
- style="stop-color:#555753" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2817"
- id="linearGradient11079"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.103262,0,0,1.054917,-163.1228,-76.31138)"
- x1="174.83363"
- y1="84.263489"
- x2="174.74524"
- y2="105.49083" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2679"
- id="radialGradient11081"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(3.562309e-6,-1.07205,1.992104,-1.250658e-6,-175.6121,212.6949)"
- cx="170.2664"
- cy="102.3308"
- fx="170.2664"
- fy="102.3308"
- r="11" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11001"
- id="linearGradient11083"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1,0,0,1.004384,-145.0004,-71.4625)"
- x1="169"
- y1="110.33805"
- x2="169"
- y2="93.204849" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3081"
- id="linearGradient11085"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-4e-4,-0.09426)"
- x1="15.089521"
- y1="15.291994"
- x2="14"
- y2="52.510574" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2817"
- id="linearGradient11087"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.103262,0,0,1.054917,-163.1228,-76.31138)"
- x1="174.83363"
- y1="84.263489"
- x2="174.74524"
- y2="105.49083" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11007"
- id="radialGradient11089"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(3.562309e-6,-1.07205,1.992104,-1.250658e-6,-175.6121,212.6949)"
- cx="169.77171"
- cy="100.20107"
- fx="169.77171"
- fy="100.20107"
- r="11" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2697"
- id="linearGradient11091"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1,0,0,1.004384,-145.0004,-71.4625)"
- x1="169"
- y1="110.33805"
- x2="169"
- y2="93.204849" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3081"
- id="linearGradient11093"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-4e-4,-0.09426)"
- x1="15.089521"
- y1="15.291994"
- x2="14"
- y2="52.510574" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3892"
- id="linearGradient3898"
- x1="429.15128"
- y1="599.56494"
- x2="433.13641"
- y2="610.92285"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-413.32707,-580.0333)" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient3892">
- <stop
- style="stop-color:#fffff8;stop-opacity:1;"
- offset="0"
- id="stop3894" />
- <stop
- style="stop-color:#fffff8;stop-opacity:0;"
- offset="1"
- id="stop3896" />
- </linearGradient>
- <linearGradient
- y2="610.92285"
- x2="433.13641"
- y1="599.56494"
- x1="429.15128"
- gradientTransform="translate(-467.41538,-559.43711)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient6730"
- xlink:href="#linearGradient3892"
- inkscape:collect="always" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3892-7"
- id="linearGradient3898-1"
- x1="429.15128"
- y1="599.56494"
- x2="433.13641"
- y2="610.92285"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.3379015,0,0,1.3379015,-570.79911,-780.96842)" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient3892-7">
- <stop
- style="stop-color:#fffff8;stop-opacity:1;"
- offset="0"
- id="stop3894-4" />
- <stop
- style="stop-color:#fffff8;stop-opacity:0;"
- offset="1"
- id="stop3896-0" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3872"
- id="linearGradient3908"
- gradientUnits="userSpaceOnUse"
- x1="434.15228"
- y1="610.42682"
- x2="432.16248"
- y2="601.80182"
- gradientTransform="matrix(1.3379015,0,0,1.3379015,-570.79912,-780.96845)" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient3872">
- <stop
- style="stop-color:#1a8f23;stop-opacity:1"
- offset="0"
- id="stop3874" />
- <stop
- style="stop-color:#66ee77;stop-opacity:1"
- offset="1"
- id="stop3876" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2817-4"
- id="linearGradient13377"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.624525,0,0,1.054917,-530.24846,-71.839329)"
- x1="174.83363"
- y1="84.263489"
- x2="174.74524"
- y2="105.49083" />
- <linearGradient
- id="linearGradient2817-4">
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop2819-6" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0.48453608;"
- offset="1"
- id="stop2821-0" />
- </linearGradient>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient13364"
- id="radialGradient13379"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(8.905772e-6,-1.07205,4.98026,-1.250658e-6,-584.92577,217.16695)"
- cx="169.77171"
- cy="100.20107"
- fx="169.77171"
- fy="100.20107"
- r="11" />
- <linearGradient
- id="linearGradient13364">
- <stop
- style="stop-color:#f10a0a;stop-opacity:1"
- offset="0"
- id="stop13366" />
- <stop
- style="stop-color:#cd0101;stop-opacity:1"
- offset="1"
- id="stop13368" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient13358"
- id="linearGradient13381"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.498884,0,0,1.004384,-508.20837,-66.990449)"
- x1="169"
- y1="110.33805"
- x2="169"
- y2="93.204849" />
- <linearGradient
- id="linearGradient13358">
- <stop
- style="stop-color:#bd0000;stop-opacity:1"
- offset="0"
- id="stop13360" />
- <stop
- style="stop-color:#970000;stop-opacity:1"
- offset="1"
- id="stop13362" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3081-5"
- id="linearGradient13383"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.8933072,0,0,0.96437208,-157.89239,5.2328667)"
- x1="15.089521"
- y1="15.291994"
- x2="14"
- y2="52.510574" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient3081-5">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop3083-4" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop3085-4" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient52493"
- id="linearGradient52499"
- x1="-72.303078"
- y1="20.700233"
- x2="-71.390366"
- y2="31.757452"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient52493">
- <stop
- style="stop-color:#f7f7f7;stop-opacity:1;"
- offset="0"
- id="stop52495" />
- <stop
- style="stop-color:#f7f7f7;stop-opacity:0;"
- offset="1"
- id="stop52497" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5048-4"
- id="linearGradient35425-0"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
- x1="302.85715"
- y1="366.64789"
- x2="302.85715"
- y2="609.50507" />
- <linearGradient
- id="linearGradient5048-4">
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="0"
- id="stop5050-4" />
- <stop
- id="stop5056-3"
- offset="0.5"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="1"
- id="stop5052-6" />
- </linearGradient>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5060-18"
- id="radialGradient35427-9"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
- cx="605.71429"
- cy="486.64789"
- fx="605.71429"
- fy="486.64789"
- r="117.14286" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient5060-18">
- <stop
- style="stop-color:black;stop-opacity:1;"
- offset="0"
- id="stop5062-9" />
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="1"
- id="stop5064-1" />
- </linearGradient>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5060-18"
- id="radialGradient35429-1"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
- cx="605.71429"
- cy="486.64789"
- fx="605.71429"
- fy="486.64789"
- r="117.14286" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient259-6"
- id="radialGradient35431-8"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.960493,0,0,-1.041132,-51.588305,51.80958)"
- cx="33.966679"
- cy="8.8006353"
- fx="33.966679"
- fy="8.8006353"
- r="86.70845" />
- <linearGradient
- id="linearGradient259-6">
- <stop
- id="stop260-3"
- offset="0.0000000"
- style="stop-color:#fafafa;stop-opacity:1.0000000;" />
- <stop
- id="stop261-5"
- offset="1.0000000"
- style="stop-color:#bbbbbb;stop-opacity:1.0000000;" />
- </linearGradient>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient15662-9"
- id="radialGradient35433-0"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.968273,0,0,-1.032767,-48.234752,51.163133)"
- cx="8.1435566"
- cy="7.2678967"
- fx="8.1435566"
- fy="7.2678967"
- r="38.158695" />
- <linearGradient
- id="linearGradient15662-9">
- <stop
- id="stop15664-1"
- offset="0.0000000"
- style="stop-color:#ffffff;stop-opacity:1.0000000;" />
- <stop
- id="stop15666-0"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2224-2"
- id="linearGradient35435-8"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(2.1672066,2.0430446)"
- x1="35.996582"
- y1="40.458221"
- x2="33.664921"
- y2="37.770721" />
- <linearGradient
- id="linearGradient2224-2">
- <stop
- style="stop-color:#7c7c7c;stop-opacity:1;"
- offset="0"
- id="stop2226-2" />
- <stop
- style="stop-color:#b8b8b8;stop-opacity:1;"
- offset="1"
- id="stop2228-6" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2251-9"
- id="linearGradient35437-8"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(2.1672066,1.6680446)"
- x1="33.396004"
- y1="36.921333"
- x2="34.170048"
- y2="38.070381" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient2251-9">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop2253-7" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop2255-7" />
- </linearGradient>
- <linearGradient
- id="linearGradient2817-9">
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop2819-3" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0.48453608;"
- offset="1"
- id="stop2821-05" />
- </linearGradient>
- <linearGradient
- id="linearGradient2679-3">
- <stop
- id="stop2681-9"
- offset="0"
- style="stop-color:#74a2d6;stop-opacity:1" />
- <stop
- id="stop2683-7"
- offset="1"
- style="stop-color:#2a5285;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- id="linearGradient11001-4">
- <stop
- style="stop-color:#3a71b6;stop-opacity:1"
- offset="0"
- id="stop11003-3" />
- <stop
- style="stop-color:#203f66;stop-opacity:1"
- offset="1"
- id="stop11005-5" />
- </linearGradient>
- <linearGradient
- id="linearGradient13513">
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop13515" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0.48453608;"
- offset="1"
- id="stop13517" />
- </linearGradient>
- <linearGradient
- id="linearGradient11007-0">
- <stop
- style="stop-color:#8ab9ed;stop-opacity:1"
- offset="0"
- id="stop11009-4" />
- <stop
- style="stop-color:#2a5285;stop-opacity:1"
- offset="1"
- id="stop11011-7" />
- </linearGradient>
- <linearGradient
- id="linearGradient2697-2">
- <stop
- id="stop2699-7"
- offset="0"
- style="stop-color:#3364a1;stop-opacity:1" />
- <stop
- id="stop2701-1"
- offset="1"
- style="stop-color:#203f66;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9161"
- id="linearGradient13786"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-9.2175077,12.197592)"
- x1="159.45625"
- y1="34.133106"
- x2="159.41743"
- y2="19.593225" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9141"
- id="linearGradient13788"
- gradientUnits="userSpaceOnUse"
- x1="159.25"
- y1="18.296875"
- x2="159.8125"
- y2="47.546875" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient13792"
- id="linearGradient13798"
- x1="164.49797"
- y1="17.406996"
- x2="149.96054"
- y2="31.430309"
- gradientUnits="userSpaceOnUse" />
- </defs>
- <sodipodi:namedview
- inkscape:window-y="-8"
- inkscape:window-x="-8"
- inkscape:window-height="838"
- inkscape:window-width="1600"
- inkscape:document-units="px"
- inkscape:grid-bbox="true"
- showgrid="false"
- inkscape:current-layer="g26971"
- inkscape:cy="31.046152"
- inkscape:cx="19.499336"
- inkscape:zoom="1"
- inkscape:pageshadow="2"
- inkscape:pageopacity="0.0"
- borderopacity="0.25490196"
- bordercolor="#666666"
- pagecolor="#ffffff"
- id="base"
- inkscape:showpageshadow="false"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata4">
- <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>
- <dc:subject>
- <rdf:Bag>
- <rdf:li>document</rdf:li>
- <rdf:li>settings</rdf:li>
- <rdf:li>preferences</rdf:li>
- <rdf:li>properties</rdf:li>
- <rdf:li>tweak</rdf:li>
- </rdf:Bag>
- </dc:subject>
- <cc:license
- rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
- <dc:creator>
- <cc:Agent>
- <dc:title>Jakub Steiner</dc:title>
- </cc:Agent>
- </dc:creator>
- <dc:source>http://jimmac.musichall.cz</dc:source>
- </cc:Work>
- <cc:License
- rdf:about="http://creativecommons.org/licenses/publicdomain/">
- <cc:permits
- rdf:resource="http://creativecommons.org/ns#Reproduction" />
- <cc:permits
- rdf:resource="http://creativecommons.org/ns#Distribution" />
- <cc:permits
- rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
- </cc:License>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:groupmode="layer"
- id="layer6"
- inkscape:label="Shadow" />
- <g
- style="display:inline"
- inkscape:groupmode="layer"
- inkscape:label="Base"
- id="layer1" />
- <g
- inkscape:groupmode="layer"
- id="layer5"
- inkscape:label="Text"
- style="display:inline">
- <g
- style="display:inline"
- id="g26971"
- transform="translate(-48.411695,-4.5961942)">
- <g
- id="g2837"
- style="display:inline"
- transform="translate(128.41169,4.596194)" />
- <g
- style="display:inline"
- id="g35397-7"
- transform="matrix(1.0365373,0,0,1.0365373,101.34789,-1.338541)">
- <g
- style="display:inline"
- id="g5022-2"
- transform="matrix(0.02165152,0,0,0.01485743,-8.580705,46.281584)">
- <rect
- y="-150.69685"
- x="-1559.2523"
- height="478.35718"
- width="1339.6335"
- id="rect4173-2"
- style="opacity:0.40206185;color:#000000;fill:url(#linearGradient35425-0);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" />
- <path
- sodipodi:nodetypes="cccc"
- id="path5058-7"
- d="m -219.61876,-150.68038 c 0,0 0,478.33079 0,478.33079 142.874166,0.90045 345.40022,-107.16966 345.40014,-239.196175 0,-132.026537 -159.436816,-239.134595 -345.40014,-239.134615 z"
- style="opacity:0.40206185;color:#000000;fill:url(#radialGradient35427-9);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
- inkscape:connector-curvature="0" />
- <path
- style="opacity:0.40206185;color:#000000;fill:url(#radialGradient35429-1);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
- d="m -1559.2523,-150.68038 c 0,0 0,478.33079 0,478.33079 -142.8742,0.90045 -345.4002,-107.16966 -345.4002,-239.196175 0,-132.026537 159.4368,-239.134595 345.4002,-239.134615 z"
- id="path5018-0"
- sodipodi:nodetypes="cccc"
- inkscape:connector-curvature="0" />
- </g>
- <path
- style="color:#000000;fill:url(#radialGradient35431-8);fill-opacity:1;fill-rule:nonzero;stroke:#808080;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible"
- d="m -43.835704,48.163134 32.576903,0 c 0.636573,0 1.149049,-0.512476 1.149049,-1.149049 l 0,-31.105315 c -3.168864,-2.905608 -6.491445,-5.9334976 -9.871181,-8.6661296 l -23.854771,0 c -0.636573,0 -1.149048,0.512475 -1.149048,1.149048 l 0,38.6223966 c 0,0.636573 0.512475,1.149049 1.149048,1.149049 z"
- id="rect15391-3"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="sssccssss" />
- <path
- style="color:#000000;fill:none;stroke:url(#radialGradient35433-0);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible"
- d="m -43.773203,47.225634 32.47779,0 c 0.08257,0 0.148336,-0.06648 0.149048,-0.149049 l 0.266316,-30.868047 c 0.0068,-0.783664 -8.098317,-8.1134053 -9.428891,-8.103525 l -23.464263,0.1742364 c -0.08257,6.131e-4 -0.149048,0.06648 -0.149048,0.149049 l 0,38.6482866 c 0,0.08257 0.06648,0.149049 0.149048,0.149049 z"
- id="rect15660-6"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="sssssssss" />
- <g
- style="display:inline"
- transform="translate(-50.963312,3.5961942)"
- id="g2253-0">
- <rect
- style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible"
- id="rect15686-9"
- width="22.000004"
- height="1"
- x="15.000002"
- y="9"
- rx="0.15156493"
- ry="0.065390877" />
- <rect
- style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible"
- id="rect15690-8"
- width="22.000004"
- height="1"
- x="15.000002"
- y="13"
- rx="0.15156493"
- ry="0.065390877" />
- <rect
- style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible"
- id="rect15694-9"
- width="22.000004"
- height="1"
- x="15.000002"
- y="17"
- rx="0.15156493"
- ry="0.065390877" />
- <rect
- style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible"
- id="rect15698-6"
- width="22.000004"
- height="1"
- x="15.000002"
- y="21"
- rx="0.15156493"
- ry="0.065390877" />
- <rect
- style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible"
- id="rect15732-4"
- width="9.9000053"
- height="1"
- x="14.999992"
- y="25"
- rx="0.068204239"
- ry="0.065390877" />
- <rect
- style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible"
- id="rect15736-0"
- width="22.000004"
- height="1"
- x="14.999992"
- y="29"
- rx="0.15156493"
- ry="0.065390877" />
- <rect
- style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible"
- id="rect15740-2"
- width="22.000004"
- height="1"
- x="14.999992"
- y="33"
- rx="0.15156493"
- ry="0.065390877" />
- <rect
- style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible"
- id="rect15744-9"
- width="15.400014"
- height="1"
- x="14.999992"
- y="37"
- rx="0.10609552"
- ry="0.065390877" />
- <rect
- style="fill:#9c9c9c;fill-opacity:1;fill-rule:evenodd;stroke:none"
- id="rect23058-0"
- width="1.875"
- height="1.875"
- x="10.437507"
- y="8.5"
- rx="0"
- ry="0" />
- <rect
- ry="0"
- rx="0"
- y="12.4375"
- x="10.437507"
- height="1.875"
- width="1.875"
- id="rect23060-3"
- style="fill:#9c9c9c;fill-opacity:1;fill-rule:evenodd;stroke:none" />
- <rect
- style="fill:#9c9c9c;fill-opacity:1;fill-rule:evenodd;stroke:none"
- id="rect23062-2"
- width="1.875"
- height="1.875"
- x="10.437507"
- y="16.4375"
- rx="0"
- ry="0" />
- <rect
- ry="0"
- rx="0"
- y="20.40625"
- x="10.437507"
- height="1.875"
- width="1.875"
- id="rect23064-2"
- style="fill:#9c9c9c;fill-opacity:1;fill-rule:evenodd;stroke:none" />
- <rect
- style="fill:#9c9c9c;fill-opacity:1;fill-rule:evenodd;stroke:none"
- id="rect23066-4"
- width="1.875"
- height="1.875"
- x="10.437507"
- y="24.40625"
- rx="0"
- ry="0" />
- <rect
- ry="0"
- rx="0"
- y="28.383726"
- x="10.437507"
- height="1.875"
- width="1.875"
- id="rect23068-7"
- style="fill:#9c9c9c;fill-opacity:1;fill-rule:evenodd;stroke:none" />
- <rect
- style="fill:#9c9c9c;fill-opacity:1;fill-rule:evenodd;stroke:none"
- id="rect23070-7"
- width="1.875"
- height="1.875"
- x="10.437507"
- y="32.493786"
- rx="0"
- ry="0" />
- <rect
- ry="0"
- rx="0"
- y="36.47126"
- x="10.437507"
- height="1.875"
- width="1.875"
- id="rect23072-4"
- style="fill:#9c9c9c;fill-opacity:1;fill-rule:evenodd;stroke:none" />
- </g>
- <g
- style="display:inline"
- id="g22515-5"
- transform="matrix(1,0,0,-1,-51.588305,51.80958)">
- <path
- style="color:#000000;fill:url(#linearGradient35435-8);fill-opacity:1;fill-rule:evenodd;stroke:#808080;stroke-width:1.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
- d="m 31.474987,44.634988 c 4.90304,-4.045325 7.776832,-6.894317 10.079906,-8.785106 -3.331029,0.964689 -4.802716,1.485612 -8.911474,1.644622 0,0 -0.355929,6.640484 -1.168432,7.140484 z"
- id="path2210-3"
- sodipodi:nodetypes="cccc"
- inkscape:connector-curvature="0" />
- <path
- sodipodi:nodetypes="cccc"
- id="path2247-1"
- d="m 33.389463,42.509778 c 1.369779,-0.683829 4.825996,-2.853572 6.125377,-4.734576 -1.662385,0.469833 -3.058295,0.543813 -5.812819,0.742832 0,0 -0.03655,3.0179 -0.312558,3.991744 z"
- style="opacity:0.57079647;color:#000000;fill:none;stroke:url(#linearGradient35437-8);stroke-width:0.99999982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
- inkscape:connector-curvature="0" />
- </g>
- </g>
- <g
- transform="translate(248.41168,4.5961937)"
- style="display:inline"
- id="g2837-3" />
- <g
- id="g13781"
- transform="matrix(0.64845351,-0.64845351,0.64845351,0.64845351,-49.395802,100.94756)">
- <path
- sodipodi:type="inkscape:offset"
- inkscape:radius="0"
- inkscape:original="M 157.59375 17.71875 L 157.59375 24.59375 L 150.75 24.59375 L 150.75 29 L 157.59375 29 L 157.59375 35.875 L 162.03125 35.875 L 162.03125 29 L 168.875 29 L 168.875 24.59375 L 162.03125 24.59375 L 162.03125 17.71875 L 157.59375 17.71875 z "
- style="fill:none;stroke:url(#linearGradient13798);stroke-width:4.24102354;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- id="path13790"
- d="m 157.59375,17.71875 0,6.875 -6.84375,0 0,4.40625 6.84375,0 0,6.875 4.4375,0 0,-6.875 6.84375,0 0,-4.40625 -6.84375,0 0,-6.875 -4.4375,0 z"
- transform="translate(-9.2175077,12.197592)" />
- <path
- transform="translate(-9.2175077,12.197592)"
- d="m 157.59375,17.71875 0,6.875 -6.84375,0 0,4.40625 6.84375,0 0,6.875 4.4375,0 0,-6.875 6.84375,0 0,-4.40625 -6.84375,0 0,-6.875 -4.4375,0 z"
- id="path9157"
- style="fill:none;stroke:#750000;stroke-width:2.20000005;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
- inkscape:original="M 157.59375 17.71875 L 157.59375 24.59375 L 150.75 24.59375 L 150.75 29 L 157.59375 29 L 157.59375 35.875 L 162.03125 35.875 L 162.03125 29 L 168.875 29 L 168.875 24.59375 L 162.03125 24.59375 L 162.03125 17.71875 L 157.59375 17.71875 z "
- inkscape:radius="0"
- sodipodi:type="inkscape:offset" />
- <path
- inkscape:connector-curvature="0"
- id="rect8616"
- d="m 148.37624,29.916342 0,6.875 -6.84375,0 0,4.40625 6.84375,0 0,6.875 4.4375,0 0,-6.875 6.84375,0 0,-4.40625 -6.84375,0 0,-6.875 -4.4375,0 z"
- style="fill:url(#linearGradient13786);fill-opacity:1;fill-rule:evenodd;stroke:none" />
- <path
- transform="translate(-9.2175077,12.197592)"
- d="m 158.09375,18.21875 0,6.375 a 0.50828383,0.50828383 0 0 1 -0.5,0.5 l -6.34375,0 0,3.40625 6.34375,0 a 0.50828383,0.50828383 0 0 1 0.5,0.5 l 0,6.375 3.4375,0 0,-6.375 a 0.50828383,0.50828383 0 0 1 0.5,-0.5 l 6.34375,0 0,-3.40625 -6.34375,0 a 0.50828383,0.50828383 0 0 1 -0.5,-0.5 l 0,-6.375 -3.4375,0 z"
- id="path9149"
- style="opacity:0.49557519;fill:none;stroke:url(#linearGradient13788);stroke-opacity:1"
- inkscape:original="M 157.59375 17.71875 L 157.59375 24.59375 L 150.75 24.59375 L 150.75 29 L 157.59375 29 L 157.59375 35.875 L 162.03125 35.875 L 162.03125 29 L 168.875 29 L 168.875 24.59375 L 162.03125 24.59375 L 162.03125 17.71875 L 157.59375 17.71875 z "
- inkscape:radius="-0.50823301"
- sodipodi:type="inkscape:offset" />
- </g>
- </g>
- </g>
-</svg>
diff --git a/src/com.gluster.storage.management.gui/icons/tango/scalable/task_stopped.svg b/src/com.gluster.storage.management.gui/icons/tango/scalable/task_stopped.svg
deleted file mode 100644
index 17945d57..00000000
--- a/src/com.gluster.storage.management.gui/icons/tango/scalable/task_stopped.svg
+++ /dev/null
@@ -1,1667 +0,0 @@
-<?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"
- inkscape:export-ydpi="240.00000"
- inkscape:export-xdpi="240.00000"
- inkscape:export-filename="/home/jimmac/gfx/novell/pdes/trunk/docs/BIGmime-text.png"
- sodipodi:docname="task_paused.svg"
- inkscape:version="0.48.1 "
- sodipodi:version="0.32"
- id="svg249"
- height="48.000000px"
- width="48.000000px"
- inkscape:output_extension="org.inkscape.output.svg.inkscape"
- version="1.1">
- <defs
- id="defs3">
- <linearGradient
- id="linearGradient13364">
- <stop
- style="stop-color:#f10a0a;stop-opacity:1"
- offset="0"
- id="stop13366" />
- <stop
- style="stop-color:#cd0101;stop-opacity:1"
- offset="1"
- id="stop13368" />
- </linearGradient>
- <linearGradient
- id="linearGradient13358">
- <stop
- style="stop-color:#bd0000;stop-opacity:1"
- offset="0"
- id="stop13360" />
- <stop
- style="stop-color:#970000;stop-opacity:1"
- offset="1"
- id="stop13362" />
- </linearGradient>
- <linearGradient
- id="linearGradient11007">
- <stop
- style="stop-color:#8ab9ed;stop-opacity:1"
- offset="0"
- id="stop11009" />
- <stop
- style="stop-color:#2a5285;stop-opacity:1"
- offset="1"
- id="stop11011" />
- </linearGradient>
- <linearGradient
- id="linearGradient11001">
- <stop
- style="stop-color:#3a71b6;stop-opacity:1"
- offset="0"
- id="stop11003" />
- <stop
- style="stop-color:#203f66;stop-opacity:1"
- offset="1"
- id="stop11005" />
- </linearGradient>
- <linearGradient
- id="linearGradient9056">
- <stop
- style="stop-color:#6acd11;stop-opacity:1"
- offset="0"
- id="stop9058" />
- <stop
- style="stop-color:#4cbe01;stop-opacity:1"
- offset="1"
- id="stop9060" />
- </linearGradient>
- <linearGradient
- id="linearGradient9050">
- <stop
- id="stop9052"
- offset="0"
- style="stop-color:#428405;stop-opacity:1" />
- <stop
- id="stop9054"
- offset="1"
- style="stop-color:#356804;stop-opacity:1" />
- </linearGradient>
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="0 : 24 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="48 : 24 : 1"
- inkscape:persp3d-origin="24 : 16 : 1"
- id="perspective83" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5060"
- id="radialGradient5031"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
- cx="605.71429"
- cy="486.64789"
- fx="605.71429"
- fy="486.64789"
- r="117.14286" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient5060">
- <stop
- style="stop-color:black;stop-opacity:1;"
- offset="0"
- id="stop5062" />
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="1"
- id="stop5064" />
- </linearGradient>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5060"
- id="radialGradient5029"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
- cx="605.71429"
- cy="486.64789"
- fx="605.71429"
- fy="486.64789"
- r="117.14286" />
- <linearGradient
- id="linearGradient5048">
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="0"
- id="stop5050" />
- <stop
- id="stop5056"
- offset="0.5"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="1"
- id="stop5052" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5048"
- id="linearGradient5027"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
- x1="302.85715"
- y1="366.64789"
- x2="302.85715"
- y2="609.50507" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient4542">
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop4544" />
- <stop
- style="stop-color:#000000;stop-opacity:0;"
- offset="1"
- id="stop4546" />
- </linearGradient>
- <linearGradient
- id="linearGradient15662">
- <stop
- id="stop15664"
- offset="0.0000000"
- style="stop-color:#ffffff;stop-opacity:1.0000000;" />
- <stop
- id="stop15666"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:1;" />
- </linearGradient>
- <radialGradient
- id="aigrd3"
- cx="20.8921"
- cy="64.5679"
- r="5.257"
- fx="20.8921"
- fy="64.5679"
- gradientUnits="userSpaceOnUse">
- <stop
- offset="0"
- style="stop-color:#F0F0F0"
- id="stop15573" />
- <stop
- offset="1.0000000"
- style="stop-color:#9a9a9a;stop-opacity:1.0000000;"
- id="stop15575" />
- </radialGradient>
- <radialGradient
- id="aigrd2"
- cx="20.8921"
- cy="114.5684"
- r="5.256"
- fx="20.8921"
- fy="114.5684"
- gradientUnits="userSpaceOnUse">
- <stop
- offset="0"
- style="stop-color:#F0F0F0"
- id="stop15566" />
- <stop
- offset="1.0000000"
- style="stop-color:#9a9a9a;stop-opacity:1.0000000;"
- id="stop15568" />
- </radialGradient>
- <linearGradient
- id="linearGradient269">
- <stop
- id="stop270"
- offset="0.0000000"
- style="stop-color:#a3a3a3;stop-opacity:1.0000000;" />
- <stop
- id="stop271"
- offset="1.0000000"
- style="stop-color:#4c4c4c;stop-opacity:1.0000000;" />
- </linearGradient>
- <linearGradient
- id="linearGradient259">
- <stop
- id="stop260"
- offset="0.0000000"
- style="stop-color:#fafafa;stop-opacity:1.0000000;" />
- <stop
- id="stop261"
- offset="1.0000000"
- style="stop-color:#bbbbbb;stop-opacity:1.0000000;" />
- </linearGradient>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient269"
- id="radialGradient15656"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.968273,0,0,1.032767,-96.646447,0.646447)"
- cx="8.8244190"
- cy="3.7561285"
- fx="8.8244190"
- fy="3.7561285"
- r="37.751713" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient259"
- id="radialGradient15658"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.960493,0,0,1.041132,-100,0)"
- cx="33.966679"
- cy="35.736916"
- fx="33.966679"
- fy="35.736916"
- r="86.708450" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient15662"
- id="radialGradient15668"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.968273,0,0,1.032767,-96.646447,0.646447)"
- cx="8.1435566"
- cy="7.2678967"
- fx="8.1435566"
- fy="7.2678967"
- r="38.158695" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4542"
- id="radialGradient4548"
- cx="24.306795"
- cy="42.07798"
- fx="24.306795"
- fy="42.07798"
- r="15.821514"
- gradientTransform="matrix(1.000000,0.000000,0.000000,0.284916,0.000000,30.08928)"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2251"
- id="linearGradient2257"
- x1="33.396004"
- y1="36.921333"
- x2="34.170048"
- y2="38.070381"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(2.1672066,1.6680446)" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient2251">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop2253" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop2255" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2224"
- id="linearGradient2230"
- x1="35.996582"
- y1="40.458221"
- x2="33.664921"
- y2="37.770721"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(6.161836,4.033411)" />
- <linearGradient
- id="linearGradient2224">
- <stop
- style="stop-color:#7c7c7c;stop-opacity:1;"
- offset="0"
- id="stop2226" />
- <stop
- style="stop-color:#b8b8b8;stop-opacity:1;"
- offset="1"
- id="stop2228" />
- </linearGradient>
- <linearGradient
- y2="37.770721"
- x2="33.664921"
- y1="40.458221"
- x1="35.996582"
- gradientTransform="translate(2.1672066,2.0430446)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22486"
- xlink:href="#linearGradient2224"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient5048-2">
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="0"
- id="stop5050-9" />
- <stop
- id="stop5056-4"
- offset="0.5"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="1"
- id="stop5052-5" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient5060-1">
- <stop
- style="stop-color:black;stop-opacity:1;"
- offset="0"
- id="stop5062-6" />
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="1"
- id="stop5064-9" />
- </linearGradient>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5060-1"
- id="radialGradient5031-1"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
- cx="605.71429"
- cy="486.64789"
- fx="605.71429"
- fy="486.64789"
- r="117.14286" />
- <linearGradient
- id="linearGradient2206">
- <stop
- style="stop-color:#c3c6c0;stop-opacity:1.0000000;"
- offset="0.0000000"
- id="stop2208" />
- <stop
- style="stop-color:#e8eae6;stop-opacity:1.0000000;"
- offset="1.0000000"
- id="stop2210" />
- </linearGradient>
- <linearGradient
- id="linearGradient2214">
- <stop
- style="stop-color:#a9aaa7;stop-opacity:1.0000000;"
- offset="0.0000000"
- id="stop2216" />
- <stop
- style="stop-color:#676964;stop-opacity:1.0000000;"
- offset="1.0000000"
- id="stop2218" />
- </linearGradient>
- <linearGradient
- id="linearGradient2222">
- <stop
- style="stop-color:#5187d6;stop-opacity:1;"
- offset="0"
- id="stop2224" />
- <stop
- style="stop-color:#1e4580;stop-opacity:1;"
- offset="1"
- id="stop2227" />
- </linearGradient>
- <linearGradient
- id="linearGradient5048-2-8">
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="0"
- id="stop5050-9-2" />
- <stop
- id="stop5056-4-6"
- offset="0.5"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="1"
- id="stop5052-5-0" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2206-8"
- id="linearGradient26980-6"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.62034994,0,0,0.66330865,-49.866678,4.4079179)"
- x1="25.861118"
- y1="26.133587"
- x2="18.300278"
- y2="19.567596" />
- <linearGradient
- id="linearGradient2206-8">
- <stop
- style="stop-color:#c3c6c0;stop-opacity:1.0000000;"
- offset="0.0000000"
- id="stop2208-7" />
- <stop
- style="stop-color:#e8eae6;stop-opacity:1.0000000;"
- offset="1.0000000"
- id="stop2210-2" />
- </linearGradient>
- <linearGradient
- id="linearGradient2214-2">
- <stop
- style="stop-color:#a9aaa7;stop-opacity:1.0000000;"
- offset="0.0000000"
- id="stop2216-2" />
- <stop
- style="stop-color:#676964;stop-opacity:1.0000000;"
- offset="1.0000000"
- id="stop2218-0" />
- </linearGradient>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2222-9"
- id="radialGradient26984-3"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1520174,0,0,0.90350734,-62.623679,-4.288468)"
- cx="23.994133"
- cy="32.266911"
- fx="23.994133"
- fy="32.266911"
- r="19.088932" />
- <linearGradient
- id="linearGradient2222-9">
- <stop
- style="stop-color:#5187d6;stop-opacity:1;"
- offset="0"
- id="stop2224-6" />
- <stop
- style="stop-color:#1e4580;stop-opacity:1;"
- offset="1"
- id="stop2227-5" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2238-7"
- id="linearGradient26986-6"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.62034994,0,0,0.6615617,-49.866678,5.1018165)"
- x1="20.338758"
- y1="19.636894"
- x2="46.092255"
- y2="39.708324" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient2238-7">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop2240-0" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop2242-5" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2180-7"
- id="linearGradient26988-4"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.4813991,0,0,1.1400975,-61.032972,-4.6105736)"
- x1="8.8207808"
- y1="12.53757"
- x2="12.499243"
- y2="24.238262" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient2180-7">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop2182-3" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop2184-7" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2223-5"
- id="linearGradient26990-6"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6513633,0,0,0.6513633,49.389075,5.6726225)"
- x1="35.694206"
- y1="37.333858"
- x2="15.044075"
- y2="5.9588566" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient2223-5">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop2225-2" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop2229-2" />
- </linearGradient>
- <linearGradient
- y2="5.9588566"
- x2="15.044075"
- y1="37.333858"
- x1="35.694206"
- gradientTransform="matrix(0.6513633,0,0,0.6513633,-50.610925,5.6726225)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient27106"
- xlink:href="#linearGradient2223-5"
- inkscape:collect="always" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5048"
- id="linearGradient27240"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
- x1="302.85715"
- y1="366.64789"
- x2="302.85715"
- y2="609.50507" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5060"
- id="radialGradient27242"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
- cx="605.71429"
- cy="486.64789"
- fx="605.71429"
- fy="486.64789"
- r="117.14286" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5060"
- id="radialGradient27244"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
- cx="605.71429"
- cy="486.64789"
- fx="605.71429"
- fy="486.64789"
- r="117.14286" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient259"
- id="radialGradient27246"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.960493,0,0,-1.041132,-51.588305,51.80958)"
- cx="33.966679"
- cy="35.736916"
- fx="33.966679"
- fy="35.736916"
- r="86.708450" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient15662"
- id="radialGradient27250"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.968273,0,0,-1.032767,-48.234752,51.163133)"
- cx="8.1435566"
- cy="7.2678967"
- fx="8.1435566"
- fy="7.2678967"
- r="38.158695" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2224"
- id="linearGradient27252"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(2.1672066,2.0430446)"
- x1="35.996582"
- y1="40.458221"
- x2="33.664921"
- y2="37.770721" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2251"
- id="linearGradient27254"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(2.1672066,1.6680446)"
- x1="33.396004"
- y1="36.921333"
- x2="34.170048"
- y2="38.070381" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2206-8"
- id="linearGradient27256"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.62034994,0,0,0.66330865,-52.866678,3.4079179)"
- x1="25.861118"
- y1="26.133587"
- x2="18.300278"
- y2="19.567596" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2222-9"
- id="radialGradient27258"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1520174,0,0,0.90350734,-65.623679,-5.288468)"
- cx="23.994133"
- cy="32.266911"
- fx="23.994133"
- fy="32.266911"
- r="19.088932" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2238-7"
- id="linearGradient27260"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.62034994,0,0,0.6615617,-52.866678,4.1018165)"
- x1="20.338758"
- y1="19.636894"
- x2="46.092255"
- y2="39.708324" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2180-7"
- id="linearGradient27262"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.4813991,0,0,1.1400975,-64.032972,-5.6105736)"
- x1="8.8207808"
- y1="12.53757"
- x2="12.499243"
- y2="24.238262" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2223-5"
- id="linearGradient27264"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6513633,0,0,0.6513633,-53.610925,4.6726225)"
- x1="35.694206"
- y1="37.333858"
- x2="15.044075"
- y2="5.9588566" />
- <radialGradient
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1,0,0,0.536723,0,16.87306)"
- r="15.644737"
- fy="36.421127"
- fx="24.837126"
- cy="36.421127"
- cx="24.837126"
- id="radialGradient8668"
- xlink:href="#linearGradient8662"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient8662"
- inkscape:collect="always">
- <stop
- id="stop8664"
- offset="0"
- style="stop-color:#000000;stop-opacity:1;" />
- <stop
- id="stop8666"
- offset="1"
- style="stop-color:#000000;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient2591">
- <stop
- style="stop-color:#73d216"
- offset="0"
- id="stop2593" />
- <stop
- style="stop-color:#49bd00;stop-opacity:1;"
- offset="1"
- id="stop2595" />
- </linearGradient>
- <linearGradient
- id="linearGradient2591-7">
- <stop
- style="stop-color:#73d216"
- offset="0"
- id="stop2593-1" />
- <stop
- style="stop-color:#49bd00;stop-opacity:1;"
- offset="1"
- id="stop2595-8" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5048"
- id="linearGradient35425"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
- x1="302.85715"
- y1="366.64789"
- x2="302.85715"
- y2="609.50507" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5060"
- id="radialGradient35427"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
- cx="605.71429"
- cy="486.64789"
- fx="605.71429"
- fy="486.64789"
- r="117.14286" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5060"
- id="radialGradient35429"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
- cx="605.71429"
- cy="486.64789"
- fx="605.71429"
- fy="486.64789"
- r="117.14286" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient259"
- id="radialGradient35431"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.960493,0,0,-1.041132,-51.588305,51.80958)"
- cx="33.966679"
- cy="8.8006353"
- fx="33.966679"
- fy="8.8006353"
- r="86.708450" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient15662"
- id="radialGradient35433"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.968273,0,0,-1.032767,-48.234752,51.163133)"
- cx="8.1435566"
- cy="7.2678967"
- fx="8.1435566"
- fy="7.2678967"
- r="38.158695" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2224"
- id="linearGradient35435"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(2.1672066,2.0430446)"
- x1="35.996582"
- y1="40.458221"
- x2="33.664921"
- y2="37.770721" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2251"
- id="linearGradient35437"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(2.1672066,1.6680446)"
- x1="33.396004"
- y1="36.921333"
- x2="34.170048"
- y2="38.070381" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2206-8"
- id="linearGradient35439"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.62034994,0,0,0.66330865,-52.866678,3.4079179)"
- x1="25.861118"
- y1="26.133587"
- x2="18.300278"
- y2="19.567596" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2222-9"
- id="radialGradient35441"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.1520174,0,0,0.90350734,-65.623679,-5.288468)"
- cx="23.994133"
- cy="32.266911"
- fx="23.994133"
- fy="32.266911"
- r="19.088932" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2238-7"
- id="linearGradient35443"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.62034994,0,0,0.6615617,-52.866678,4.1018165)"
- x1="20.338758"
- y1="19.636894"
- x2="46.092255"
- y2="39.708324" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2180-7"
- id="linearGradient35445"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.4813991,0,0,1.1400975,-64.032972,-5.6105736)"
- x1="8.8207808"
- y1="12.53757"
- x2="12.499243"
- y2="24.238262" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2223-5"
- id="linearGradient35447"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.6513633,0,0,0.6513633,-53.610925,4.6726225)"
- x1="35.694206"
- y1="37.333858"
- x2="15.044075"
- y2="5.9588566" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5075"
- id="linearGradient2306"
- gradientUnits="userSpaceOnUse"
- x1="71.288956"
- y1="124.11652"
- x2="70.826942"
- y2="95"
- gradientTransform="translate(-56.000421,-79.094251)" />
- <linearGradient
- id="linearGradient5075">
- <stop
- style="stop-color:#adb0a8;stop-opacity:1;"
- offset="0"
- id="stop5077" />
- <stop
- style="stop-color:#464744;stop-opacity:1"
- offset="1"
- id="stop5079" />
- </linearGradient>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2691"
- id="radialGradient2314"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.05324342,-0.836238,2.019473,0.128568,-162.9195,100.0768)"
- cx="107.5884"
- cy="83.990814"
- fx="107.5884"
- fy="83.990814"
- r="12.551644" />
- <linearGradient
- id="linearGradient2691">
- <stop
- id="stop2693"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1" />
- <stop
- id="stop2695"
- offset="1"
- style="stop-color:#d3d7cf" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2684"
- id="linearGradient2690"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.128181,0,0,1.128181,-53.99314,-83.36009)"
- x1="70.913956"
- y1="101.74152"
- x2="70.951942"
- y2="88.923729" />
- <linearGradient
- id="linearGradient2684">
- <stop
- id="stop2686"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop2688"
- offset="1"
- style="stop-color:#000000;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- y2="88.923729"
- x2="70.951942"
- y1="101.74152"
- x1="70.913956"
- gradientTransform="matrix(1.128181,0,0,1.128181,-64.993141,-91.360091)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient8168"
- xlink:href="#linearGradient2684"
- inkscape:collect="always" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2684"
- id="linearGradient8252"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.128181,0,0,1.128181,-108.08145,-78.763896)"
- x1="70.913956"
- y1="101.74152"
- x2="70.951942"
- y2="88.923729" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2691"
- id="radialGradient8254"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.05324342,-0.836238,2.019473,0.128568,-206.0078,112.67299)"
- cx="107.5884"
- cy="83.990814"
- fx="107.5884"
- fy="83.990814"
- r="12.551644" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5075"
- id="linearGradient8256"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-99.088729,-66.498056)"
- x1="71.288956"
- y1="124.11652"
- x2="70.826942"
- y2="95" />
- <linearGradient
- id="linearGradient4255">
- <stop
- style="stop-color:#2a5285;stop-opacity:1;"
- offset="0"
- id="stop4257" />
- <stop
- style="stop-color:#9acbff;stop-opacity:1;"
- offset="1"
- id="stop4259" />
- </linearGradient>
- <linearGradient
- id="linearGradient2817">
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop2819" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0.48453608;"
- offset="1"
- id="stop2821" />
- </linearGradient>
- <linearGradient
- id="linearGradient2679">
- <stop
- id="stop2681"
- offset="0"
- style="stop-color:#74a2d6;stop-opacity:1" />
- <stop
- id="stop2683"
- offset="1"
- style="stop-color:#2a5285;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- id="linearGradient2697">
- <stop
- id="stop2699"
- offset="0"
- style="stop-color:#3364a1;stop-opacity:1" />
- <stop
- id="stop2701"
- offset="1"
- style="stop-color:#203f66;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient3081">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop3083" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop3085" />
- </linearGradient>
- <linearGradient
- id="linearGradient10869">
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop10871" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0.48453608;"
- offset="1"
- id="stop10873" />
- </linearGradient>
- <linearGradient
- id="linearGradient10883">
- <stop
- id="stop10885"
- offset="0"
- style="stop-color:#babdb6" />
- <stop
- id="stop10887"
- offset="1"
- style="stop-color:#555753" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2817"
- id="linearGradient11079"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.103262,0,0,1.054917,-163.1228,-76.31138)"
- x1="174.83363"
- y1="84.263489"
- x2="174.74524"
- y2="105.49083" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2679"
- id="radialGradient11081"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(3.562309e-6,-1.07205,1.992104,-1.250658e-6,-175.6121,212.6949)"
- cx="170.2664"
- cy="102.3308"
- fx="170.2664"
- fy="102.3308"
- r="11" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11001"
- id="linearGradient11083"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1,0,0,1.004384,-145.0004,-71.4625)"
- x1="169"
- y1="110.33805"
- x2="169"
- y2="93.204849" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3081"
- id="linearGradient11085"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-4e-4,-0.09426)"
- x1="15.089521"
- y1="15.291994"
- x2="14"
- y2="52.510574" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2817"
- id="linearGradient11087"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.103262,0,0,1.054917,-163.1228,-76.31138)"
- x1="174.83363"
- y1="84.263489"
- x2="174.74524"
- y2="105.49083" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11007"
- id="radialGradient11089"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(3.562309e-6,-1.07205,1.992104,-1.250658e-6,-175.6121,212.6949)"
- cx="169.77171"
- cy="100.20107"
- fx="169.77171"
- fy="100.20107"
- r="11" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2697"
- id="linearGradient11091"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1,0,0,1.004384,-145.0004,-71.4625)"
- x1="169"
- y1="110.33805"
- x2="169"
- y2="93.204849" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3081"
- id="linearGradient11093"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-4e-4,-0.09426)"
- x1="15.089521"
- y1="15.291994"
- x2="14"
- y2="52.510574" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11503-8"
- id="linearGradient17098"
- gradientUnits="userSpaceOnUse"
- x1="31.542158"
- y1="27.633146"
- x2="39.232777"
- y2="40.738911" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient11503-8">
- <stop
- style="stop-color:#ef2929"
- offset="0"
- id="stop11505-6" />
- <stop
- style="stop-color:#cc0000"
- offset="1"
- id="stop11507-7" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3957-4"
- id="linearGradient17100"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.509273,0,0,0.473768,23.78749,24.00915)"
- x1="21.993773"
- y1="33.955299"
- x2="20.917078"
- y2="15.814602" />
- <linearGradient
- id="linearGradient3957-4">
- <stop
- style="stop-color:#fffeff;stop-opacity:0.33333334;"
- offset="0"
- id="stop3959-2" />
- <stop
- style="stop-color:#fffeff;stop-opacity:0.21568628;"
- offset="1"
- id="stop3961-0" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2817-4"
- id="linearGradient3430"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.624525,0,0,1.054917,-436.1019,-76.31138)"
- x1="174.83363"
- y1="84.263489"
- x2="174.74524"
- y2="105.49083" />
- <linearGradient
- id="linearGradient2817-4">
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop2819-6" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0.48453608;"
- offset="1"
- id="stop2821-0" />
- </linearGradient>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2679-0"
- id="radialGradient3427"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(8.905772e-6,-1.07205,4.98026,-1.250658e-6,-584.92577,217.16695)"
- cx="169.77171"
- cy="100.20107"
- fx="169.77171"
- fy="100.20107"
- r="11" />
- <linearGradient
- id="linearGradient2679-0">
- <stop
- id="stop2681-3"
- offset="0"
- style="stop-color:#f7f7f7;stop-opacity:1" />
- <stop
- id="stop2683-9"
- offset="1"
- style="stop-color:#ccd0c7;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2697-8"
- id="linearGradient3424"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.498884,0,0,1.004384,-508.20837,-66.990449)"
- x1="169"
- y1="110.33805"
- x2="169"
- y2="93.204849" />
- <linearGradient
- id="linearGradient2697-8">
- <stop
- id="stop2699-5"
- offset="0"
- style="stop-color:#babdb6" />
- <stop
- id="stop2701-4"
- offset="1"
- style="stop-color:#555753" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3081-5"
- id="linearGradient3421"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(3.000198,0,0,1,-161.15256,4.3777962)"
- x1="15.089521"
- y1="15.291994"
- x2="14"
- y2="52.510574" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient3081-5">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop3083-4" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop3085-4" />
- </linearGradient>
- <linearGradient
- y2="105.49083"
- x2="174.74524"
- y1="84.263489"
- x1="174.83363"
- gradientTransform="matrix(2.624525,0,0,1.054917,-530.24846,-71.839329)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient13292"
- xlink:href="#linearGradient2817-4"
- inkscape:collect="always" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2817-4"
- id="linearGradient13350"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.624525,0,0,1.054917,-530.24846,-71.839329)"
- x1="174.83363"
- y1="84.263489"
- x2="174.74524"
- y2="105.49083" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient13364"
- id="radialGradient13352"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(8.905772e-6,-1.07205,4.98026,-1.250658e-6,-584.92577,217.16695)"
- cx="169.77171"
- cy="100.20107"
- fx="169.77171"
- fy="100.20107"
- r="11" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient13358"
- id="linearGradient13354"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.498884,0,0,1.004384,-508.20837,-66.990449)"
- x1="169"
- y1="110.33805"
- x2="169"
- y2="93.204849" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3081-5"
- id="linearGradient13356"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(3.000198,0,0,1,-161.15256,4.3777962)"
- x1="15.089521"
- y1="15.291994"
- x2="14"
- y2="52.510574" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2817-4"
- id="linearGradient13377"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.624525,0,0,1.054917,-530.24846,-71.839329)"
- x1="174.83363"
- y1="84.263489"
- x2="174.74524"
- y2="105.49083" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient13364"
- id="radialGradient13379"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(8.905772e-6,-1.07205,4.98026,-1.250658e-6,-584.92577,217.16695)"
- cx="169.77171"
- cy="100.20107"
- fx="169.77171"
- fy="100.20107"
- r="11" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient13358"
- id="linearGradient13381"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.498884,0,0,1.004384,-508.20837,-66.990449)"
- x1="169"
- y1="110.33805"
- x2="169"
- y2="93.204849" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3081-5"
- id="linearGradient13383"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(3.000198,0,0,1,-161.15256,4.3777962)"
- x1="15.089521"
- y1="15.291994"
- x2="14"
- y2="52.510574" />
- </defs>
- <sodipodi:namedview
- inkscape:window-y="-8"
- inkscape:window-x="-8"
- inkscape:window-height="838"
- inkscape:window-width="1600"
- inkscape:document-units="px"
- inkscape:grid-bbox="true"
- showgrid="false"
- inkscape:current-layer="g13370"
- inkscape:cy="34.004476"
- inkscape:cx="16.590675"
- inkscape:zoom="1"
- inkscape:pageshadow="2"
- inkscape:pageopacity="0.0"
- borderopacity="0.25490196"
- bordercolor="#666666"
- pagecolor="#ffffff"
- id="base"
- inkscape:showpageshadow="false"
- inkscape:window-maximized="1" />
- <metadata
- id="metadata4">
- <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>
- <dc:subject>
- <rdf:Bag>
- <rdf:li>document</rdf:li>
- <rdf:li>settings</rdf:li>
- <rdf:li>preferences</rdf:li>
- <rdf:li>properties</rdf:li>
- <rdf:li>tweak</rdf:li>
- </rdf:Bag>
- </dc:subject>
- <cc:license
- rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
- <dc:creator>
- <cc:Agent>
- <dc:title>Jakub Steiner</dc:title>
- </cc:Agent>
- </dc:creator>
- <dc:source>http://jimmac.musichall.cz</dc:source>
- </cc:Work>
- <cc:License
- rdf:about="http://creativecommons.org/licenses/publicdomain/">
- <cc:permits
- rdf:resource="http://creativecommons.org/ns#Reproduction" />
- <cc:permits
- rdf:resource="http://creativecommons.org/ns#Distribution" />
- <cc:permits
- rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
- </cc:License>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:groupmode="layer"
- id="layer6"
- inkscape:label="Shadow" />
- <g
- style="display:inline"
- inkscape:groupmode="layer"
- inkscape:label="Base"
- id="layer1" />
- <g
- inkscape:groupmode="layer"
- id="layer5"
- inkscape:label="Text"
- style="display:inline">
- <g
- style="display:inline"
- id="g26971"
- transform="translate(-48.411695,-4.5961942)">
- <g
- id="g27205"
- transform="translate(102.5,0)">
- <g
- id="g35397"
- transform="matrix(1.0365373,0,0,1.0365373,-1.1521053,-1.338541)">
- <g
- style="display:inline"
- id="g5022"
- transform="matrix(0.02165152,0,0,0.01485743,-8.580705,46.281584)">
- <rect
- y="-150.69685"
- x="-1559.2523"
- height="478.35718"
- width="1339.6335"
- id="rect4173"
- style="opacity:0.40206185;color:#000000;fill:url(#linearGradient35425);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible" />
- <path
- sodipodi:nodetypes="cccc"
- id="path5058"
- d="m -219.61876,-150.68038 c 0,0 0,478.33079 0,478.33079 142.874166,0.90045 345.40022,-107.16966 345.40014,-239.196175 0,-132.026537 -159.436816,-239.134595 -345.40014,-239.134615 z"
- style="opacity:0.40206185;color:#000000;fill:url(#radialGradient35427);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
- inkscape:connector-curvature="0" />
- <path
- style="opacity:0.40206185;color:#000000;fill:url(#radialGradient35429);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
- d="m -1559.2523,-150.68038 c 0,0 0,478.33079 0,478.33079 -142.8742,0.90045 -345.4002,-107.16966 -345.4002,-239.196175 0,-132.026537 159.4368,-239.134595 345.4002,-239.134615 z"
- id="path5018"
- sodipodi:nodetypes="cccc"
- inkscape:connector-curvature="0" />
- </g>
- <path
- style="color:#000000;fill:url(#radialGradient35431);fill-opacity:1;fill-rule:nonzero;stroke:#808080;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible"
- d="m -43.835704,48.163134 32.576903,0 c 0.636573,0 1.149049,-0.512476 1.149049,-1.149049 l 0,-31.105315 c -3.168864,-2.905608 -6.491445,-5.9334976 -9.871181,-8.6661296 l -23.854771,0 c -0.636573,0 -1.149048,0.512475 -1.149048,1.149048 l 0,38.6223966 c 0,0.636573 0.512475,1.149049 1.149048,1.149049 z"
- id="rect15391"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="sssccssss" />
- <path
- style="color:#000000;fill:none;stroke:url(#radialGradient35433);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible"
- d="m -43.773203,47.225634 32.47779,0 c 0.08257,0 0.148336,-0.06648 0.149048,-0.149049 l 0.266316,-30.868047 c 0.0068,-0.783664 -8.098317,-8.1134053 -9.428891,-8.103525 l -23.464263,0.1742364 c -0.08257,6.131e-4 -0.149048,0.06648 -0.149048,0.149049 l 0,38.6482866 c 0,0.08257 0.06648,0.149049 0.149048,0.149049 z"
- id="rect15660"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="sssssssss" />
- <g
- style="display:inline"
- transform="translate(-50.963312,3.5961942)"
- id="g2253">
- <rect
- style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible"
- id="rect15686"
- width="22.000004"
- height="1"
- x="15.000002"
- y="9"
- rx="0.15156493"
- ry="0.065390877" />
- <rect
- style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible"
- id="rect15690"
- width="22.000004"
- height="1"
- x="15.000002"
- y="13"
- rx="0.15156493"
- ry="0.065390877" />
- <rect
- style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible"
- id="rect15694"
- width="22.000004"
- height="1"
- x="15.000002"
- y="17"
- rx="0.15156493"
- ry="0.065390877" />
- <rect
- style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible"
- id="rect15698"
- width="22.000004"
- height="1"
- x="15.000002"
- y="21"
- rx="0.15156493"
- ry="0.065390877" />
- <rect
- style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible"
- id="rect15732"
- width="9.9000053"
- height="1"
- x="14.999992"
- y="25"
- rx="0.068204239"
- ry="0.065390877" />
- <rect
- style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible"
- id="rect15736"
- width="22.000004"
- height="1"
- x="14.999992"
- y="29"
- rx="0.15156493"
- ry="0.065390877" />
- <rect
- style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible"
- id="rect15740"
- width="22.000004"
- height="1"
- x="14.999992"
- y="33"
- rx="0.15156493"
- ry="0.065390877" />
- <rect
- style="color:#000000;fill:#9b9b9b;fill-opacity:0.54970757;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible"
- id="rect15744"
- width="15.400014"
- height="1"
- x="14.999992"
- y="37"
- rx="0.10609552"
- ry="0.065390877" />
- <rect
- style="fill:#9c9c9c;fill-opacity:1;fill-rule:evenodd;stroke:none"
- id="rect23058"
- width="1.875"
- height="1.875"
- x="10.437507"
- y="8.5"
- rx="0"
- ry="0" />
- <rect
- ry="0"
- rx="0"
- y="12.4375"
- x="10.437507"
- height="1.875"
- width="1.875"
- id="rect23060"
- style="fill:#9c9c9c;fill-opacity:1;fill-rule:evenodd;stroke:none" />
- <rect
- style="fill:#9c9c9c;fill-opacity:1;fill-rule:evenodd;stroke:none"
- id="rect23062"
- width="1.875"
- height="1.875"
- x="10.437507"
- y="16.4375"
- rx="0"
- ry="0" />
- <rect
- ry="0"
- rx="0"
- y="20.40625"
- x="10.437507"
- height="1.875"
- width="1.875"
- id="rect23064"
- style="fill:#9c9c9c;fill-opacity:1;fill-rule:evenodd;stroke:none" />
- <rect
- style="fill:#9c9c9c;fill-opacity:1;fill-rule:evenodd;stroke:none"
- id="rect23066"
- width="1.875"
- height="1.875"
- x="10.437507"
- y="24.40625"
- rx="0"
- ry="0" />
- <rect
- ry="0"
- rx="0"
- y="28.383726"
- x="10.437507"
- height="1.875"
- width="1.875"
- id="rect23068"
- style="fill:#9c9c9c;fill-opacity:1;fill-rule:evenodd;stroke:none" />
- <rect
- style="fill:#9c9c9c;fill-opacity:1;fill-rule:evenodd;stroke:none"
- id="rect23070"
- width="1.875"
- height="1.875"
- x="10.437507"
- y="32.493786"
- rx="0"
- ry="0" />
- <rect
- ry="0"
- rx="0"
- y="36.47126"
- x="10.437507"
- height="1.875"
- width="1.875"
- id="rect23072"
- style="fill:#9c9c9c;fill-opacity:1;fill-rule:evenodd;stroke:none" />
- </g>
- <g
- style="display:inline"
- id="g22515"
- transform="matrix(1,0,0,-1,-51.588305,51.80958)">
- <path
- style="color:#000000;fill:url(#linearGradient35435);fill-opacity:1;fill-rule:evenodd;stroke:#808080;stroke-width:1.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
- d="m 31.474987,44.634988 c 4.90304,-4.045325 7.776832,-6.894317 10.079906,-8.785106 -3.331029,0.964689 -4.802716,1.485612 -8.911474,1.644622 0,0 -0.355929,6.640484 -1.168432,7.140484 z"
- id="path2210"
- sodipodi:nodetypes="cccc"
- inkscape:connector-curvature="0" />
- <path
- sodipodi:nodetypes="cccc"
- id="path2247"
- d="m 33.389463,42.509778 c 1.369779,-0.683829 4.825996,-2.853572 6.125377,-4.734576 -1.662385,0.469833 -3.058295,0.543813 -5.812819,0.742832 0,0 -0.03655,3.0179 -0.312558,3.991744 z"
- style="opacity:0.57079647;color:#000000;fill:none;stroke:url(#linearGradient35437);stroke-width:0.99999982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
- inkscape:connector-curvature="0" />
- </g>
- </g>
- <g
- transform="translate(25.911695,4.596194)"
- style="display:inline"
- id="g2837" />
- <g
- id="g13343"
- transform="matrix(0.93709486,0,0,0.93709486,-3.9713496,-38.29073)">
- <g
- id="g13370"
- transform="translate(42.685114,42.685114)">
- <path
- inkscape:connector-curvature="0"
- style="opacity:0.26548673;color:#000000;fill:none;stroke:url(#linearGradient13377);stroke-width:1.99999952000000000;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
- d="m -80.142742,17.301159 0,22.153256 20.99618,0 0,-22.153256 -20.99618,0 z"
- id="path2815-8"
- inkscape:r_cx="true"
- inkscape:r_cy="true" />
- <path
- inkscape:connector-curvature="0"
- inkscape:r_cy="true"
- inkscape:r_cx="true"
- style="color:#000000;fill:url(#radialGradient13379);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
- d="m -79.646562,17.877806 0,21 20,0 0,-21 -20,0 z"
- id="path2827-0" />
- <path
- inkscape:connector-curvature="0"
- inkscape:r_cy="true"
- inkscape:r_cx="true"
- id="path2762-9"
- d="m -79.649832,17.880002 0,21.092064 19.99107,0 0,-21.092064 -19.99107,0 z"
- style="color:#000000;fill:none;stroke:url(#linearGradient13381);stroke-width:0.99999952;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" />
- <path
- inkscape:connector-curvature="0"
- inkscape:r_cy="true"
- inkscape:r_cx="true"
- style="opacity:0.76000001;color:#000000;fill:none;stroke:url(#linearGradient13383);stroke-width:0.99999976;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
- d="m -78.647152,18.877806 0,19 18.00118,0 0,-19 -18.00118,0 z"
- id="path2811-8" />
- <path
- inkscape:connector-curvature="0"
- style="opacity:0.5;color:#000000;fill:#f7f7f7;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:block;overflow:visible"
- d="m -78.146562,19.414814 0,10.557242 17,-2.79033 0,-7.8553 -17,0.08839 z"
- id="path2479"
- inkscape:r_cx="true"
- inkscape:r_cy="true"
- sodipodi:nodetypes="ccccc" />
- </g>
- </g>
- </g>
- </g>
- </g>
-</svg>
diff --git a/src/com.gluster.storage.management.gui/plugin.xml b/src/com.gluster.storage.management.gui/plugin.xml
deleted file mode 100644
index 46326351..00000000
--- a/src/com.gluster.storage.management.gui/plugin.xml
+++ /dev/null
@@ -1,1560 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.4"?>
-<plugin>
-
- <extension
- id="application"
- point="org.eclipse.core.runtime.applications">
- <application>
- <run
- class="com.gluster.storage.management.gui.Application">
- </run>
- </application>
- </extension>
- <extension
- point="org.eclipse.ui.perspectives">
- <perspective
- name="Gluster Perspective"
- class="com.gluster.storage.management.gui.Perspective"
- id="com.gluster.storage.management.gui.Perspective">
- </perspective>
- </extension>
- <extension
- point="org.eclipse.ui.views">
- <view
- category="com.gluster.storage.management.gui.category"
- class="com.gluster.storage.management.gui.views.NavigationView"
- id="com.gluster.storage.management.gui.views.NavigationView"
- name="Cluster Navigation Tree"
- restorable="true">
- </view>
- <view
- allowMultiple="false"
- category="com.gluster.storage.management.gui.category"
- class="com.gluster.storage.management.gui.views.DiscoveredServersView"
- icon="icons/tango/16x16/servers.png"
- id="com.gluster.storage.management.gui.views.DiscoveredServersView"
- name="Discovered Servers"
- restorable="true">
- </view>
- <view
- category="com.gluster.storage.management.gui.category"
- class="com.gluster.storage.management.gui.views.DiscoveredServerView"
- icon="icons/tango/16x16/server.png"
- id="com.gluster.storage.management.gui.views.DiscoveredServerView"
- name="Discovered Server"
- restorable="true">
- </view>
- <category
- id="com.gluster.storage.management.gui.category"
- name="Gluster Managament Console">
- </category>
- <view
- allowMultiple="false"
- category="com.gluster.storage.management.gui.category"
- class="com.gluster.storage.management.gui.views.VolumesView"
- icon="icons/tango/16x16/volumes.png"
- id="com.gluster.storage.management.gui.views.VolumesView"
- name="Volumes"
- restorable="true">
- </view>
- <view
- allowMultiple="false"
- category="com.gluster.storage.management.gui.category"
- class="com.gluster.storage.management.gui.views.VolumesSummaryView"
- icon="icons/tango/16x16/gluster_icon.png"
- id="com.gluster.storage.management.gui.views.VolumesSummaryView"
- name="Summary (Volumes)"
- restorable="true">
- </view>
- <view
- allowMultiple="false"
- category="com.gluster.storage.management.gui.category"
- class="com.gluster.storage.management.gui.views.ClusterSummaryView"
- icon="icons/tango/16x16/gluster_icon.png"
- id="com.gluster.storage.management.gui.views.ClusterSummaryView"
- name="Summary (Cluster)"
- restorable="true">
- </view>
- <view
- allowMultiple="false"
- category="com.gluster.storage.management.gui.category"
- class="com.gluster.storage.management.gui.views.VolumeSummaryView"
- icon="icons/tango/16x16/gluster_icon.png"
- id="com.gluster.storage.management.gui.views.VolumeSummaryView"
- name="Summary (Volume)"
- restorable="true">
- </view>
- <view
- allowMultiple="false"
- category="com.gluster.storage.management.gui.category"
- class="com.gluster.storage.management.gui.views.VolumeBricksView"
- icon="icons/tango/16x16/bricks.png"
- id="com.gluster.storage.management.gui.views.VolumeBricksView"
- name="Bricks"
- restorable="true">
- </view>
- <view
- allowMultiple="false"
- category="com.gluster.storage.management.gui.category"
- class="com.gluster.storage.management.gui.views.VolumeOptionsView"
- icon="icons/tango/16x16/volume-options.png"
- id="com.gluster.storage.management.gui.views.VolumeOptionsView"
- name="Volume Options"
- restorable="true">
- </view>
- <view
- allowMultiple="false"
- category="com.gluster.storage.management.gui.category"
- class="com.gluster.storage.management.gui.views.VolumeLogsView"
- icon="icons/tango/16x16/logs.png"
- id="com.gluster.storage.management.gui.views.VolumeLogsView"
- name="Volume Logs"
- restorable="true">
- </view>
- <view
- allowMultiple="false"
- category="com.gluster.storage.management.gui.category"
- class="com.gluster.storage.management.gui.views.GlusterServersSummaryView"
- icon="icons/tango/16x16/gluster_icon.png"
- id="com.gluster.storage.management.gui.views.GlusterServersSummaryView"
- name="Summary (Servers)"
- restorable="true">
- </view>
- <view
- allowMultiple="false"
- category="com.gluster.storage.management.gui.category"
- class="com.gluster.storage.management.gui.views.GlusterServersView"
- icon="icons/tango/16x16/servers.png"
- id="com.gluster.storage.management.gui.views.GlusterServersView"
- name="Servers"
- restorable="true">
- </view>
- <view
- allowMultiple="false"
- category="com.gluster.storage.management.gui.category"
- class="com.gluster.storage.management.gui.views.DisksView"
- icon="icons/tango/16x16/disk.png"
- id="com.gluster.storage.management.gui.views.DisksView"
- name="Disks"
- restorable="true">
- </view>
- <view
- allowMultiple="false"
- category="com.gluster.storage.management.gui.category"
- class="com.gluster.storage.management.gui.views.GlusterServerSummaryView"
- icon="icons/tango/16x16/gluster_icon.png"
- id="com.gluster.storage.management.gui.views.GlusterServerSummaryView"
- name="Summary (Server)"
- restorable="true">
- </view>
- <view
- allowMultiple="false"
- category="com.gluster.storage.management.gui.category"
- class="com.gluster.storage.management.gui.views.GlusterServerDisksView"
- icon="icons/tango/16x16/disk.png"
- id="com.gluster.storage.management.gui.views.GlusterServerDisksView"
- name="Server Disks"
- restorable="true">
- </view>
- <view
- allowMultiple="false"
- category="com.gluster.storage.management.gui.category"
- class="com.gluster.storage.management.gui.views.GlusterServerLogsView"
- icon="icons/tango/16x16/logs.png"
- id="com.gluster.storage.management.gui.views.GlusterServerLogsView"
- name="Server Logs"
- restorable="true">
- </view>
- <view
- allowMultiple="false"
- category="com.gluster.storage.management.gui.category"
- class="com.gluster.storage.management.gui.views.TasksView"
- icon="icons/tango/16x16/running-task.png"
- id="com.gluster.storage.management.gui.views.TasksView"
- name="Tasks"
- restorable="true">
- </view>
- </extension>
- <extension
- point="org.eclipse.ui.commands">
- <category
- name="Gluster Commands"
- id="com.gluster.storage.management.gui.category">
- </category>
- <command
- name="Create Volume"
- description="Create a new Volume"
- categoryId="com.gluster.storage.management.gui.category"
- id="com.gluster.storage.management.gui.commands.CreateVolume">
- </command>
- <command
- categoryId="com.gluster.storage.management.gui.category"
- description="Delete Volume"
- id="com.gluster.storage.management.gui.commands.DeleteVolume"
- name="Delete Volume">
- </command>
- <command
- categoryId="com.gluster.storage.management.gui.category"
- description="Start Volume"
- id="com.gluster.storage.management.gui.commands.StartVolume"
- name="Start Volume">
- </command>
- <command
- categoryId="com.gluster.storage.management.gui.category"
- description="Stop Volume"
- id="com.gluster.storage.management.gui.commands.StopVolume"
- name="Stop Volume">
- </command>
- <command
- categoryId="com.gluster.storage.management.gui.category"
- description="Edit Volume"
- id="com.gluster.storage.management.gui.commands.EditVolume"
- name="Edit Volume">
- </command>
- <command
- categoryId="com.gluster.storage.management.gui.category"
- description="Reset all options of a Volume"
- id="com.gluster.storage.management.gui.commands.ResetVolumeOptions"
- name="Reset Options">
- </command>
- <command
- categoryId="com.gluster.storage.management.gui.category"
- description="Rebalance Volume"
- id="com.gluster.storage.management.gui.commands.RebalanceVolume"
- name="Rebalance Volume">
- </command>
- <command
- categoryId="com.gluster.storage.management.gui.category"
- description="Add Server(s) to Cluster"
- id="com.gluster.storage.management.gui.commands.AddServer"
- name="Add Server(s)">
- </command>
- <command
- categoryId="com.gluster.storage.management.gui.category"
- description="Remove Server(s) from Cluster"
- id="com.gluster.storage.management.gui.commands.RemoveServer"
- name="Remove Server(s)">
- </command>
- <command
- categoryId="com.gluster.storage.management.gui.category"
- description="Migrate Brick"
- id="com.gluster.storage.management.gui.commands.MigrateDisk"
- name="Migrate Brick">
- </command>
- <command
- categoryId="com.gluster.storage.management.gui.category"
- description="Remove Brick"
- id="com.gluster.storage.management.gui.commands.RemoveDisk"
- name="Remove Brick">
- </command>
- <command
- categoryId="com.gluster.storage.management.gui.category"
- description="Add Brick"
- id="com.gluster.storage.management.gui.commands.AddDisk"
- name="Add Brick">
- </command>
- <command
- categoryId="com.gluster.storage.management.gui.category"
- description="Pause Task"
- id="com.gluster.storage.management.gui.commands.Pause"
- name="Pause">
- </command>
- <command
- categoryId="com.gluster.storage.management.gui.category"
- description="Resume Task"
- id="com.gluster.storage.management.gui.commands.Resume"
- name="Resume">
- </command>
- <command
- categoryId="com.gluster.storage.management.gui.category"
- description="Stop Task"
- id="com.gluster.storage.management.gui.commands.Stop"
- name="Stop">
- </command>
- <command
- categoryId="com.gluster.storage.management.gui.category"
- description="Delete Task"
- id="com.gluster.storage.management.gui.commands.Delete"
- name="Delete">
- </command>
- <command
- categoryId="com.gluster.storage.management.gui.category"
- description="Change Password"
- id="com.gluster.storage.management.gui.commands.ChangePassword"
- name="Change Password">
- </command>
- </extension>
- <extension
- point="org.eclipse.ui.bindings">
- <key
- commandId="com.gluster.storage.management.gui.commands.CreateVolume"
- schemeId="com.gluster.storage.management.gui.KeyConfig"
- sequence="CTRL+SHIFT+C">
- </key>
- <key
- commandId="com.gluster.storage.management.gui.commands.DeleteVolume"
- schemeId="com.gluster.storage.management.gui.KeyConfig"
- sequence="CTRL+SHIFT+D">
- </key>
- <key
- commandId="com.gluster.storage.management.gui.commands.StartVolume"
- schemeId="com.gluster.storage.management.gui.KeyConfig"
- sequence="CTRL+SHIFT+S">
- </key>
- <key
- commandId="com.gluster.storage.management.gui.commands.StopVolume"
- schemeId="com.gluster.storage.management.gui.KeyConfig"
- sequence="CTRL+SHIFT+T">
- </key>
- <key
- commandId="com.gluster.storage.management.gui.commands.EditVolume"
- schemeId="com.gluster.storage.management.gui.KeyConfig"
- sequence="CTRL+SHIFT+E">
- </key>
- <key
- commandId="com.gluster.storage.management.gui.commands.RebalanceVolume"
- schemeId="com.gluster.storage.management.gui.KeyConfig"
- sequence="CTRL+SHIFT+B">
- </key>
- <key
- commandId="com.gluster.storage.management.gui.commands.AddServer"
- schemeId="com.gluster.storage.management.gui.KeyConfig"
- sequence="CTRL+SHIFT+A">
- </key>
- <key
- commandId="com.gluster.storage.management.gui.commands.RemoveServer"
- schemeId="com.gluster.storage.management.gui.KeyConfig"
- sequence="CTRL+SHIFT+R">
- </key>
- <key
- commandId="com.gluster.storage.management.gui.commands.MigrateDisk"
- schemeId="com.gluster.storage.management.gui.KeyConfig"
- sequence="CTRL+SHIFT+M">
- </key>
- <key
- commandId="org.eclipse.ui.window.preferences"
- schemeId="com.gluster.storage.management.gui.KeyConfig"
- sequence="CTRL+SHIFT+P">
- </key>
- <key
- commandId="org.eclipse.ui.window.showKeyAssist"
- schemeId="com.gluster.storage.management.gui.KeyConfig"
- sequence="CTRL+SHIFT+L">
- </key>
- <key
- commandId="org.eclipse.ui.navigate.nextTab"
- contextId="org.eclipse.ui.contexts.window"
- schemeId="com.gluster.storage.management.gui.KeyConfig"
- sequence="ALT+ARROW_RIGHT">
- </key>
- <key
- commandId="org.eclipse.ui.navigate.previousTab"
- contextId="org.eclipse.ui.contexts.window"
- schemeId="com.gluster.storage.management.gui.KeyConfig"
- sequence="ALT+ARROW_LEFT">
- </key>
- <scheme
- description="Default Key Bindings Scheme for Gluster Management Console"
- id="com.gluster.storage.management.gui.KeyConfig"
- name="Gluster">
- </scheme>
- <key
- commandId="com.gluster.storage.management.gui.commands.ResetVolumeOptions"
- schemeId="com.gluster.storage.management.gui.KeyConfig"
- sequence="CTRL+SHIFT+O">
- </key>
- </extension>
- <extension
- id="product"
- name="Gluster Management Console"
- point="org.eclipse.core.runtime.products">
- <product
- application="com.gluster.storage.management.gui.application"
- name="Gluster Management Console">
- <property
- name="aboutText"
- value="GlusterFS is an open source clustered storage solution. The software is a powerful and flexible solution that simplifies the task of managing unstructured file data whether you have a few terabytes of storage or multiple petabytes. Gluster Management Console is a powerful GUI management interface for the GlusterFS.">
- </property>
- <property
- name="windowImages"
- value="icons/tango/16x16/gluster_icon.png">
- </property>
- <property
- name="aboutImage"
- value="splash/gluster_about.jpg">
- </property>
- <property
- name="appName"
- value="about">
- </property>
- <property
- name="preferenceCustomization"
- value="preferences.ini">
- </property>
- </product>
- </extension>
- <extension
- point="org.eclipse.ui.actionSets">
- <actionSet
- description="Set of actions that can be performed on multiple Volumes"
- id="com.gluster.storage.management.gui.actionsets.volumes"
- label="Volumes Actions"
- visible="false">
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.DeleteVolumeAction"
- definitionId="com.gluster.storage.management.gui.commands.DeleteVolume"
- icon="icons/tango/32x32/remove-volume.png"
- id="com.gluster.storage.management.gui.actions.DeleteVolumeAction"
- label="&amp;Delete Volume(s)"
- menubarPath="com.gluster.storage.management.gui.actionsets.volumes/volumes"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- toolbarPath="Normal"
- tooltip="Delete Volume(s)">
- </action>
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.StopVolumeAction"
- definitionId="com.gluster.storage.management.gui.commands.StopVolume"
- icon="icons/tango/32x32/stop-volume.png"
- id="com.gluster.storage.management.gui.actions.StopVolumeAction"
- label="S&amp;top Volume(s)"
- menubarPath="com.gluster.storage.management.gui.actionsets.volumes/volumes"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- toolbarPath="Normal"
- tooltip="Stop Volume(s)">
- </action>
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.StartVolumeAction"
- definitionId="com.gluster.storage.management.gui.commands.StartVolume"
- icon="icons/tango/32x32/start-volume.png"
- id="com.gluster.storage.management.gui.actions.StartVolumeAction"
- label="&amp;Start Volume(s)"
- menubarPath="com.gluster.storage.management.gui.actionsets.volumes/volumes"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- toolbarPath="Normal"
- tooltip="Start Volume(s)">
- </action>
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.CreateVolumeAction"
- definitionId="com.gluster.storage.management.gui.commands.CreateVolume"
- icon="icons/tango/32x32/create-volume.png"
- id="com.gluster.storage.management.gui.actions.CreateVolumeAction"
- label="Create &amp;Volume"
- menubarPath="com.gluster.storage.management.gui.actionsets.volumes/volumes"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- 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="&amp;Gluster"
- path="additions">
- <groupMarker
- name="volumes">
- </groupMarker>
- </menu>
- </actionSet>
- <actionSet
- description="Set of actions that can be performed on a single volume"
- id="com.gluster.storage.management.gui.actionsets.volume"
- label="Volume Actions"
- visible="false">
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.MigrateBrickAction"
- definitionId="com.gluster.storage.management.gui.commands.MigrateDisk"
- icon="icons/tango/32x32/replace-brick.png"
- id="com.gluster.storage.management.gui.actions.MigrateDiskAction"
- label="&amp;Migrate Brick"
- menubarPath="com.gluster.storage.management.gui.menu.glusterserver/glusterserver"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- toolbarPath="Normal"
- tooltip="Migrate Brick">
- <enablement>
- <objectClass
- name="com.gluster.storage.management.core.model.Disk">
- </objectClass>
- </enablement>
- </action>
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.DeleteVolumeAction"
- definitionId="com.gluster.storage.management.gui.commands.DeleteVolume"
- icon="icons/tango/32x32/remove-volume.png"
- id="com.gluster.storage.management.gui.actions.DeleteVolumeAction"
- label="&amp;Delete Volume"
- menubarPath="com.gluster.storage.management.gui.menu.volume/volume"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- toolbarPath="Normal"
- tooltip="Delete Volume">
- </action>
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.DownloadVolumeLogsAction"
- definitionId="com.gluster.storage.management.gui.commands.DownloadVolumeLogs"
- icon="icons/tango/32x32/download-log.png"
- id="com.gluster.storage.management.gui.actions.DownloadVolumeLogsAction"
- label="Download &amp;Logs"
- menubarPath="com.gluster.storage.management.gui.menu.volume/volume"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- toolbarPath="Normal"
- tooltip="Download all logs of the volume">
- </action>
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.ResetVolumeOptionsAction"
- definitionId="com.gluster.storage.management.gui.commands.ResetVolumeOptions"
- icon="icons/tango/32x32/reset-volume-option.png"
- id="com.gluster.storage.management.gui.actions.ResetVolumeOptionsAction"
- label="Reset &amp;Options"
- menubarPath="com.gluster.storage.management.gui.menu.volume/volume"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- toolbarPath="Normal"
- tooltip="Reset all options of the volume">
- </action>
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.RebalanceVolumeAction"
- definitionId="com.gluster.storage.management.gui.commands.RebalanceVolume"
- icon="icons/tango/32x32/volume-rebalance.png"
- id="com.gluster.storage.management.gui.actions.RebalanceVolumeAction"
- label="&amp;Rebalance Volume"
- menubarPath="com.gluster.storage.management.gui.menu.volume/volume"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- toolbarPath="Normal"
- tooltip="Rebalance Volume">
- </action>
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.StopVolumeAction"
- definitionId="com.gluster.storage.management.gui.commands.StopVolume"
- icon="icons/tango/32x32/stop-volume.png"
- id="com.gluster.storage.management.gui.actions.StopVolumeAction"
- label="S&amp;top Volume"
- menubarPath="com.gluster.storage.management.gui.menu.volume/volume"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- toolbarPath="Normal"
- tooltip="Stop Volume">
- </action>
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.StartVolumeAction"
- definitionId="com.gluster.storage.management.gui.commands.StartVolume"
- icon="icons/tango/32x32/start-volume.png"
- id="com.gluster.storage.management.gui.actions.StartVolumeAction"
- label="&amp;Start Volume"
- menubarPath="com.gluster.storage.management.gui.menu.volume/volume"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- toolbarPath="Normal"
- tooltip="Start Volume">
- </action>
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.RemoveBrickAction"
- definitionId="com.gluster.storage.management.gui.commands.RemoveDisk"
- icon="icons/tango/32x32/remove-brick.png"
- id="com.gluster.storage.management.gui.actions.RemoveDiskAction"
- label="Remove Brick"
- menubarPath="com.gluster.storage.management.gui.menu.volume/volume"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- toolbarPath="Normal"
- tooltip="Remove Brick from Volume">
- </action>
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.AddBrickAction"
- definitionId="com.gluster.storage.management.gui.commands.AddDisk"
- icon="icons/tango/32x32/add-brick.png"
- id="com.gluster.storage.management.gui.actions.AddDiskAction"
- label="&amp;Add Brick"
- menubarPath="com.gluster.storage.management.gui.menu.volume/volume"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- toolbarPath="Normal"
- tooltip="Add Brick to Volume">
- </action>
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.CreateVolumeAction"
- definitionId="com.gluster.storage.management.gui.commands.CreateVolume"
- icon="icons/tango/32x32/create-volume.png"
- id="com.gluster.storage.management.gui.actions.CreateVolumeAction"
- label="Create &amp;Volume"
- menubarPath="com.gluster.storage.management.gui.menu.volume/volume"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- 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="&amp;Gluster"
- path="additions">
- <groupMarker
- name="volume">
- </groupMarker>
- </menu>
- </actionSet>
- <actionSet
- description="Set of actions that can be performed on multiple Gluster Servers"
- id="com.gluster.storage.management.gui.actionsets.glusterservers"
- label="Gluster Servers Actions"
- visible="false">
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.RemoveServerAction"
- definitionId="com.gluster.storage.management.gui.commands.RemoveServer"
- icon="icons/tango/32x32/remove-server.png"
- id="com.gluster.storage.management.gui.actions.RemoveServerAction"
- label="&amp;Remove Server(s)"
- menubarPath="com.gluster.storage.management.gui.menu.servers/servers"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- toolbarPath="Normal"
- tooltip="Remove Server(s)">
- </action>
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.CreateVolumeAction"
- definitionId="com.gluster.storage.management.gui.commands.CreateVolume"
- icon="icons/tango/32x32/create-volume.png"
- id="com.gluster.storage.management.gui.actions.CreateVolumeAction"
- label="Create &amp;Volume"
- menubarPath="com.gluster.storage.management.gui.menu.servers/servers"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- 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="&amp;Gluster"
- path="additions">
- <groupMarker
- name="servers">
- </groupMarker>
- </menu>
- </actionSet>
- <actionSet
- description="Set of actions that can be performed in the &quot;Gluster Server&quot; contextt; context"
- id="com.gluster.storage.management.gui.actionsets.glusterserver"
- label="Gluster Server Actions"
- visible="false">
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.RemoveServerAction"
- definitionId="com.gluster.storage.management.gui.commands.RemoveServer"
- icon="icons/tango/32x32/remove-server.png"
- id="com.gluster.storage.management.gui.actions.RemoveServerAction"
- label="&amp;Remove Server(s)"
- menubarPath="com.gluster.storage.management.gui.menu.glusterserver/glusterserver"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- toolbarPath="Normal"
- tooltip="Remove Server">
- </action>
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.CreateVolumeAction"
- definitionId="com.gluster.storage.management.gui.commands.CreateVolume"
- icon="icons/tango/32x32/create-volume.png"
- id="com.gluster.storage.management.gui.actions.CreateVolumeAction"
- label="Create &amp;Volume"
- menubarPath="com.gluster.storage.management.gui.menu.glusterserver/glusterserver"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- 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="&amp;Gluster"
- path="additions">
- <groupMarker
- name="glusterserver">
- </groupMarker>
- </menu>
- </actionSet>
- <actionSet
- description="Set of actions that can be performed on multiple Discovered Servers"
- id="com.gluster.storage.management.gui.actionsets.serversdiscovered"
- label="Discovered Servers Actions"
- visible="false">
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.AddServerAction"
- definitionId="com.gluster.storage.management.gui.commands.AddServer"
- icon="icons/tango/32x32/add-server.png"
- id="com.gluster.storage.management.gui.actions.AddServerAction"
- label="&amp;Add Server(s)"
- menubarPath="com.gluster.storage.management.gui.menu.discoveredservers/discoveredservers"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- toolbarPath="Normal"
- tooltip="Add Server(s) to Cluster">
- </action>
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.CreateVolumeAction"
- definitionId="com.gluster.storage.management.gui.commands.CreateVolume"
- icon="icons/tango/32x32/create-volume.png"
- id="com.gluster.storage.management.gui.actions.CreateVolumeAction"
- label="Create &amp;Volume"
- menubarPath="com.gluster.storage.management.gui.menu.discoveredservers/discoveredservers"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- 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="&amp;Gluster"
- path="additions">
- <groupMarker
- name="discoveredservers">
- </groupMarker>
- </menu>
- </actionSet>
- <actionSet
- description="Set of actions that can be performed on single Discovered Server"
- id="com.gluster.storage.management.gui.actionsets.serverdiscovered"
- label="Discovered Server Actions"
- visible="false">
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.AddServerAction"
- definitionId="com.gluster.storage.management.gui.commands.AddServer"
- icon="icons/tango/32x32/add-server.png"
- id="com.gluster.storage.management.gui.actions.AddServerAction"
- label="&amp;Add Server(s)"
- menubarPath="com.gluster.storage.management.gui.menu.discoveredserver/discoveredserver"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- toolbarPath="Normal"
- tooltip="Add Server(s) to Cluster">
- </action>
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.CreateVolumeAction"
- definitionId="com.gluster.storage.management.gui.commands.CreateVolume"
- icon="icons/tango/32x32/create-volume.png"
- id="com.gluster.storage.management.gui.actions.CreateVolumeAction"
- label="Create &amp;Volume"
- menubarPath="com.gluster.storage.management.gui.menu.discoveredserver/discoveredserver"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- 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="&amp;Gluster"
- path="additions">
- <groupMarker
- name="discoveredserver">
- </groupMarker>
- </menu>
- </actionSet>
- <actionSet
- description="Set of actions that can be performed from &quot;Cluster&quot; context"
- id="com.gluster.storage.management.gui.actionsets.task"
- label="Task Action Set"
- visible="false">
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.ClearTaskAction"
- definitionId="com.gluster.storage.management.gui.commands.Clear"
- icon="icons/tango/32x32/clear-task.png"
- id="com.gluster.storage.management.gui.actions.Clear"
- label="&amp;Clear Task"
- menubarPath="com.gluster.storage.management.gui.menu.task/task"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- toolbarPath="Normal"
- tooltip="To clear selected task from task list">
- </action>
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.CommitTaskAction"
- definitionId="com.gluster.storage.management.gui.commands.Commit"
- icon="icons/tango/32x32/commit-task.png"
- id="com.gluster.storage.management.gui.actions.Commit"
- label="&amp;Commit Task"
- menubarPath="com.gluster.storage.management.gui.menu.task/task"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- toolbarPath="Normal"
- tooltip="To Commit the selected task">
- </action>
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.StopTaskAction"
- definitionId="com.gluster.storage.management.gui.commands.Stop"
- icon="icons/tango/32x32/stop.png"
- id="com.gluster.storage.management.gui.actions.Stop"
- label="&amp;Stop Task"
- menubarPath="com.gluster.storage.management.gui.menu.task/task"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- toolbarPath="Normal"
- tooltip="To Stop the selected task">
- </action>
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.ResumeTaskAction"
- definitionId="com.gluster.storage.management.gui.commands.Pause"
- icon="icons/tango/32x32/start.png"
- id="com.gluster.storage.management.gui.actions.Resume"
- label="&amp;Resume Task"
- menubarPath="com.gluster.storage.management.gui.menu.task/task"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- toolbarPath="Normal"
- tooltip="To Resume the selected task">
- </action>
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.PauseTaskAction"
- definitionId="com.gluster.storage.management.gui.commands.Pause"
- icon="icons/tango/32x32/pause.png"
- id="com.gluster.storage.management.gui.actions.Pause"
- label="&amp;Pause Task"
- menubarPath="com.gluster.storage.management.gui.menu.task/task"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- toolbarPath="Normal"
- tooltip="To Pause the selected task">
- </action>
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.CreateVolumeAction"
- definitionId="com.gluster.storage.management.gui.commands.CreateVolume"
- icon="icons/tango/32x32/create-volume.png"
- id="com.gluster.storage.management.gui.actions.CreateVolumeAction"
- label="Create &amp;Volume"
- menubarPath="com.gluster.storage.management.gui.menu.task/task"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- toolbarPath="Normal"
- tooltip="Create a new Volume">
- </action>
- <menu
- id="com.gluster.storage.management.gui.menu.task"
- label="&amp;Gluster">
- <groupMarker
- name="task">
- </groupMarker>
- </menu>
- </actionSet>
- <actionSet
- description="Set of actions that can be performed at Cluster context"
- id="com.gluster.storage.management.gui.actionsets.gluster"
- label="Gluster Actions"
- visible="false">
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.CreateVolumeAction"
- definitionId="com.gluster.storage.management.gui.commands.CreateVolume"
- icon="icons/tango/32x32/create-volume.png"
- id="com.gluster.storage.management.gui.actions.CreateVolumeAction"
- label="Create &amp;Volume"
- menubarPath="com.gluster.storage.management.gui.menu.gluster/gluster"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- 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="&amp;Gluster"
- path="additions">
- <groupMarker
- name="gluster">
- </groupMarker>
- </menu>
- </actionSet>
- <actionSet
- description="Set of Actions in &quot;Edit&quot; menu"
- id="com.gluster.storage.management.gui.actionsets.edit"
- label="Edit Action Set"
- visible="true">
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.RefreshDataAction"
- definitionId="org.eclipse.ui.window.preferences"
- icon="icons/tango/32x32/view-refresh.png"
- id="com.gluster.storage.management.gui.actions.RefreshDataAction"
- label="&amp;Refresh"
- menubarPath="com.gluster.storage.management.gui.menu.edit/edit"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- toolbarPath="Normal"
- tooltip="Refresh data from Gluster Management Gateway">
- </action>
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.PreferencesAction"
- definitionId="org.eclipse.ui.window.preferences"
- icon="icons/tango/32x32/settings.png"
- id="com.gluster.storage.management.gui.actions.PreferencesAction"
- label="&amp;Settings"
- menubarPath="com.gluster.storage.management.gui.menu.edit/edit"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- toolbarPath="Normal"
- tooltip="Settings">
- </action>
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.ChangePasswordAction"
- definitionId="com.gluster.storage.management.gui.commands.ChangePassword"
- id="com.gluster.storage.management.gui.actions.ChangePasswordAction"
- label="&amp;Change Password"
- menubarPath="com.gluster.storage.management.gui.menu.edit/edit"
- mode="FORCE_TEXT"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- tooltip="Change password">
- </action>
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.ExportSshKeysAction"
- definitionId="com.gluster.storage.management.gui.commands.ExportSshKeys"
- id="com.gluster.storage.management.gui.actions.ExportSshKeysAction"
- label="&amp;Export Keys"
- menubarPath="com.gluster.storage.management.gui.menu.edit/edit"
- mode="FORCE_TEXT"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- tooltip="Export SSH keys">
- </action>
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.ImportSshKeysAction"
- definitionId="com.gluster.storage.management.gui.commands.ImportSshKeys"
- id="com.gluster.storage.management.gui.actions.ImportSshKeysAction"
- label="&amp;Import Keys"
- menubarPath="com.gluster.storage.management.gui.menu.edit/edit"
- mode="FORCE_TEXT"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- tooltip="Import SSH keys">
- </action>
- <menu
- id="com.gluster.storage.management.gui.menu.edit"
- label="&amp;Edit"
- path="additions">
- <groupMarker
- name="edit">
- </groupMarker>
- </menu>
- </actionSet>
- </extension>
- <extension
- point="org.eclipse.ui.perspectiveExtensions">
- <perspectiveExtension
- targetID="*">
- <view
- closeable="false"
- id="com.gluster.storage.management.gui.views.NavigationView"
- minimized="false"
- moveable="false"
- ratio="0.30f"
- relationship="left"
- relative="org.eclipse.ui.editorss"
- showTitle="false"
- standalone="true"
- visible="true">
- </view>
- <view
- closeable="false"
- id="com.gluster.storage.management.gui.views.ClusterSummaryView"
- minimized="false"
- moveable="false"
- ratio="0.30f"
- relationship="right"
- relative="com.gluster.storage.management.gui.views.navigator.NavigationView"
- showTitle="true"
- standalone="false"
- visible="false">
- </view>
- <view
- closeable="false"
- id="com.gluster.storage.management.gui.views.details.DetailsView"
- minimized="false"
- moveable="false"
- ratio="0.70f"
- relationship="right"
- relative="com.gluster.storage.management.gui.views.navigator.NavigationView"
- showTitle="false"
- standalone="false"
- visible="false">
- </view>
- <view
- closeable="true"
- id="org.eclipse.ui.views.ProgressView"
- minimized="false"
- moveable="false"
- ratio="0.80f"
- relationship="bottom"
- relative="com.gluster.storage.management.gui.views.ClusterSummaryView"
- showTitle="true"
- standalone="true"
- visible="false">
- </view>
- <view
- closeable="false"
- id="com.gluster.storage.management.gui.views.DiscoveredServersView"
- minimized="false"
- moveable="false"
- ratio="0.30f"
- relationship="stack"
- relative="com.gluster.storage.management.gui.views.ClusterSummaryView"
- showTitle="true"
- standalone="false"
- visible="false">
- </view>
- <view
- closeable="false"
- id="com.gluster.storage.management.gui.views.DiscoveredServerView"
- minimized="false"
- moveable="false"
- ratio="0.30f"
- relationship="right"
- relative="com.gluster.storage.management.gui.views.navigator.NavigationView"
- showTitle="true"
- standalone="false"
- visible="false">
- </view>
- <view
- closeable="false"
- id="com.gluster.storage.management.gui.views.VolumesSummaryView"
- minimized="false"
- moveable="false"
- ratio="0.30f"
- relationship="stack"
- relative="com.gluster.storage.management.gui.views.ClusterSummaryView"
- showTitle="true"
- standalone="false"
- visible="false">
- </view>
- <view
- closeable="false"
- id="com.gluster.storage.management.gui.views.VolumesView"
- minimized="false"
- moveable="false"
- ratio="0.30f"
- relationship="stack"
- relative="com.gluster.storage.management.gui.views.VolumesSummaryView"
- showTitle="true"
- standalone="false"
- visible="false">
- </view>
- <view
- closeable="false"
- id="com.gluster.storage.management.gui.views.VolumeSummaryView"
- minimized="false"
- moveable="false"
- ratio="0.30f"
- relationship="stack"
- relative="com.gluster.storage.management.gui.views.ClusterSummaryView"
- showTitle="true"
- standalone="false"
- visible="false">
- </view>
- <view
- closeable="false"
- id="com.gluster.storage.management.gui.views.VolumeBricksView"
- minimized="false"
- moveable="false"
- ratio="0.30f"
- relationship="stack"
- relative="com.gluster.storage.management.gui.views.ClusterSummaryView"
- showTitle="true"
- standalone="false"
- visible="false">
- </view>
- <view
- closeable="false"
- id="com.gluster.storage.management.gui.views.VolumeOptionsView"
- minimized="false"
- moveable="false"
- ratio="0.30f"
- relationship="stack"
- relative="com.gluster.storage.management.gui.views.ClusterSummaryView"
- showTitle="true"
- standalone="false"
- visible="false">
- </view>
- <view
- closeable="false"
- id="com.gluster.storage.management.gui.views.VolumeLogsView"
- minimized="false"
- moveable="false"
- ratio="0.30f"
- relationship="stack"
- relative="com.gluster.storage.management.gui.views.ClusterSummaryView"
- showTitle="true"
- standalone="false"
- visible="false">
- </view>
- <view
- closeable="false"
- id="com.gluster.storage.management.gui.views.GlusterServersSummaryView"
- minimized="false"
- moveable="false"
- ratio="0.30f"
- relationship="stack"
- relative="com.gluster.storage.management.gui.views.ClusterSummaryView"
- showTitle="true"
- standalone="false"
- visible="false">
- </view>
- <view
- closeable="false"
- id="com.gluster.storage.management.gui.views.GlusterServersView"
- minimized="false"
- moveable="false"
- ratio="0.30f"
- relationship="stack"
- relative="com.gluster.storage.management.gui.views.ClusterSummaryView"
- showTitle="true"
- standalone="false"
- visible="false">
- </view>
- <view
- closeable="false"
- id="com.gluster.storage.management.gui.views.DisksView"
- minimized="false"
- moveable="false"
- ratio="0.30f"
- relationship="stack"
- relative="com.gluster.storage.management.gui.views.ClusterSummaryView"
- showTitle="true"
- standalone="false"
- visible="false">
- </view>
- <view
- closeable="false"
- id="com.gluster.storage.management.gui.views.GlusterServerSummaryView"
- minimized="false"
- moveable="false"
- ratio="0.30f"
- relationship="stack"
- relative="com.gluster.storage.management.gui.views.ClusterSummaryView"
- showTitle="true"
- standalone="false"
- visible="false">
- </view>
- <view
- closeable="false"
- id="com.gluster.storage.management.gui.views.GlusterServerDisksView"
- minimized="false"
- moveable="false"
- ratio="0.30f"
- relationship="stack"
- relative="com.gluster.storage.management.gui.views.ClusterSummaryView"
- showTitle="true"
- standalone="false"
- visible="false">
- </view>
- <view
- closeable="false"
- id="com.gluster.storage.management.gui.views.GlusterServerLogsView"
- minimized="false"
- moveable="false"
- ratio="0.30f"
- relationship="stack"
- relative="com.gluster.storage.management.gui.views.ClusterSummaryView"
- showTitle="true"
- standalone="false"
- visible="false">
- </view>
- <view
- closeable="false"
- id="com.gluster.storage.management.gui.views.TasksView"
- minimized="false"
- moveable="false"
- ratio="0.30f"
- relationship="stack"
- relative="com.gluster.storage.management.gui.views.ClusterSummaryView"
- showTitle="true"
- standalone="false"
- visible="false">
- </view>
- </perspectiveExtension>
- </extension>
- <extension
- point="org.eclipse.ui.decorators">
- <decorator
- adaptable="false"
- class="com.gluster.storage.management.gui.views.NavigationTreeLabelDecorator"
- id="com.gluster.storage.management.gui.views.navigator.decorator"
- label="Navigation Tree Decorator"
- lightweight="true"
- location="BOTTOM_LEFT"
- state="true">
- </decorator>
- </extension>
- <extension
- point="org.eclipse.ui.preferencePages">
- <page
- class="com.gluster.storage.management.gui.preferences.GlusterPreferencePage"
- id="com.gluster.storage.management.gui.preferences.GlusterPreferencePage"
- name="Gluster">
- </page>
- <page
- category="com.gluster.storage.management.gui.preferences.GlusterPreferencePage"
- class="com.gluster.storage.management.gui.preferences.AlertsPreferencePage"
- id="com.gluster.storage.management.gui.preferences.AlertsPreferencePage"
- name="Alerts">
- </page>
- <page
- category="com.gluster.storage.management.gui.preferences.GlusterPreferencePage"
- class="com.gluster.storage.management.gui.preferences.ChartsPreferencePage"
- id="com.gluster.storage.management.gui.preferences.ChartsPreferencePage"
- name="Charts">
- </page>
- </extension>
- <extension
- point="org.eclipse.core.runtime.preferences">
- <initializer
- class="com.gluster.storage.management.gui.preferences.PreferenceInitializer">
- </initializer>
- </extension>
- <extension
- point="org.eclipse.ui.popupMenus">
- <objectContribution
- id="gluster.context.menu.glusterserver"
- objectClass="com.gluster.storage.management.core.model.GlusterServer">
- <action
- class="com.gluster.storage.management.gui.actions.RemoveServerAction"
- definitionId="com.gluster.storage.management.gui.commands.RemoveServer"
- enablesFor="+"
- id="com.gluster.storage.management.gui.actions.RemoveServerAction"
- label="&amp;Remove Server"
- menubarPath="additions">
- </action>
- </objectContribution>
- <objectContribution
- id="gluster.context.menu.volume"
- objectClass="com.gluster.storage.management.core.model.Volume">
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.MigrateBrickAction"
- definitionId="com.gluster.storage.management.gui.commands.MigrateDisk"
- enablesFor="1"
- id="com.gluster.storage.management.gui.actions.MigrateDiskAction"
- label="&amp;Migrate Disk"
- menubarPath="additions"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- toolbarPath="Normal"
- tooltip="Migrate Disk">
- </action>
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.DeleteVolumeAction"
- definitionId="com.gluster.storage.management.gui.commands.DeleteVolume"
- enablesFor="1"
- id="com.gluster.storage.management.gui.actions.DeleteVolumeAction"
- label="&amp;Delete Volume"
- menubarPath="additions"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- toolbarPath="Normal"
- tooltip="Delete Volume">
- </action>
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.RebalanceVolumeAction"
- definitionId="com.gluster.storage.management.gui.commands.RebalanceVolume"
- enablesFor="1"
- id="com.gluster.storage.management.gui.actions.RebalanceVolumeAction"
- label="&amp;Rebalance Volume"
- menubarPath="additions"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- toolbarPath="Normal"
- tooltip="Rebalance Volume">
- </action>
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.StopVolumeAction"
- definitionId="com.gluster.storage.management.gui.commands.StopVolume"
- enablesFor="+"
- id="com.gluster.storage.management.gui.actions.StopVolumeAction"
- label="S&amp;top Volume"
- menubarPath="additions"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- toolbarPath="Normal"
- tooltip="Stop Volume">
- </action>
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.StartVolumeAction"
- definitionId="com.gluster.storage.management.gui.commands.StartVolume"
- enablesFor="+"
- id="com.gluster.storage.management.gui.actions.StartVolumeAction"
- label="&amp;Start Volume"
- menubarPath="additions"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- toolbarPath="Normal"
- tooltip="Start Volume">
- </action>
- </objectContribution>
- <objectContribution
- id="gluster.context.menu.server"
- objectClass="com.gluster.storage.management.core.model.Server">
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.AddServerAction"
- definitionId="com.gluster.storage.management.gui.commands.AddServer"
- enablesFor="+"
- id="com.gluster.storage.management.gui.actions.AddServerAction"
- label="&amp;Add Server(s)"
- menubarPath="additions"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- toolbarPath="Normal"
- tooltip="Add Server(s) to Cluster">
- </action>
- <visibility>
- <not>
- <objectClass
- name="com.gluster.storage.management.core.model.GlusterServer">
- </objectClass>
- </not>
- </visibility>
- </objectContribution>
- <objectContribution
- id="gluster.context.menu.entityGroup"
- objectClass="com.gluster.storage.management.core.model.EntityGroup">
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.CreateVolumeAction"
- definitionId="com.gluster.storage.management.gui.commands.CreateVolume"
- id="com.gluster.storage.management.gui.actions.CreateVolumeAction"
- label="&amp;Create Volume"
- menubarPath="additions"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- toolbarPath="Normal"
- tooltip="Create a new Volume">
- </action>
- <action
- allowLabelUpdate="false"
- class="com.gluster.storage.management.gui.actions.AddServerAction"
- definitionId="com.gluster.storage.management.gui.commands.AddServer"
- id="com.gluster.storage.management.gui.actions.AddServerAction"
- label="&amp;Add Server(s)"
- menubarPath="additions"
- pulldown="false"
- retarget="false"
- state="false"
- style="push"
- toolbarPath="Normal"
- tooltip="Add Server(s) to Cluster">
- </action>
- </objectContribution>
- </extension>
-
-</plugin>
diff --git a/src/com.gluster.storage.management.gui/preferences.ini b/src/com.gluster.storage.management.gui/preferences.ini
deleted file mode 100644
index 24389288..00000000
--- a/src/com.gluster.storage.management.gui/preferences.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-org.eclipse.ui/KEY_CONFIGURATION_ID = com.gluster.storage.management.gui.KeyConfig
-org.eclipse.help.base/help_home=/com.gluster.storage.management.console.help/html/help_home.html \ No newline at end of file
diff --git a/src/com.gluster.storage.management.gui/splash.bmp b/src/com.gluster.storage.management.gui/splash.bmp
deleted file mode 100644
index 059c28f9..00000000
--- a/src/com.gluster.storage.management.gui/splash.bmp
+++ /dev/null
Binary files differ
diff --git a/src/com.gluster.storage.management.gui/splash/gluster_about.jpg b/src/com.gluster.storage.management.gui/splash/gluster_about.jpg
deleted file mode 100644
index 242fa560..00000000
--- a/src/com.gluster.storage.management.gui/splash/gluster_about.jpg
+++ /dev/null
Binary files differ
diff --git a/src/com.gluster.storage.management.gui/splash/splash-dialog.bmp b/src/com.gluster.storage.management.gui/splash/splash-dialog.bmp
deleted file mode 100644
index 2de2897f..00000000
--- a/src/com.gluster.storage.management.gui/splash/splash-dialog.bmp
+++ /dev/null
Binary files differ
diff --git a/src/com.gluster.storage.management.gui/splash/splash-dialog.png b/src/com.gluster.storage.management.gui/splash/splash-dialog.png
deleted file mode 100644
index 789eafb0..00000000
--- a/src/com.gluster.storage.management.gui/splash/splash-dialog.png
+++ /dev/null
Binary files differ
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ICommandIds.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ICommandIds.java
deleted file mode 100644
index d9cb434c..00000000
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/ICommandIds.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
- * 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;
-
-/**
- * Interface defining the application's command IDs.
- * Key bindings can be defined for specific commands.
- * To associate an action with a command, use IAction.setActionDefinitionId(commandId).
- *
- * @see org.eclipse.jface.action.IAction#setActionDefinitionId(String)
- */
-public interface ICommandIds {
-
- public static final String CMD_OPEN = "com.gluster.storage.management.gui.open";
- public static final String CMD_OPEN_MESSAGE = "com.gluster.storage.management.gui.openMessage";
-
-}
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
deleted file mode 100644
index 7778f9be..00000000
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AddServerAction.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*******************************************************************************
- * 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.actions;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import org.eclipse.jface.action.IAction;
-import org.eclipse.swt.custom.BusyIndicator;
-import org.eclipse.swt.widgets.Display;
-
-import com.gluster.storage.management.client.GlusterServersClient;
-import com.gluster.storage.management.core.constants.CoreConstants;
-import com.gluster.storage.management.core.model.Server;
-import com.gluster.storage.management.gui.GlusterDataModelManager;
-import com.gluster.storage.management.gui.dialogs.ServerAdditionDialog;
-import com.gluster.storage.management.gui.utils.GUIHelper;
-
-public class AddServerAction extends AbstractActionDelegate {
- private GUIHelper guiHelper = GUIHelper.getInstance();
-
- @Override
- protected void performAction(final IAction action) {
- final Runnable addServerThread = new Runnable() {
- @Override
- public void run() {
- GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance();
- GlusterServersClient glusterServersClient = new GlusterServersClient();
-
- Set<Server> selectedServers = GUIHelper.getInstance().getSelectedEntities(getWindow(), Server.class);
- Set<Server> successServers = new HashSet<Server>();
- Set<Server> partSuccessServers = new HashSet<Server>();
- String errMsg = "";
- String partErrMsg = "";
-
- if (selectedServers.isEmpty()) {
- addServerManually();
- } else {
- for (Server server : selectedServers) {
- guiHelper.setStatusMessage("Adding server [" + server.getName() + "]...");
-
- try {
- glusterServersClient.addServer(server.getName());
- modelManager.addGlusterServer(glusterServersClient.getGlusterServer(server.getName()));
- successServers.add(server);
- } catch (Exception e) {
- if (!errMsg.isEmpty()) {
- errMsg += CoreConstants.NEWLINE;
- }
- errMsg += "Server " + server.getName() + ". Error: [" + e.getMessage() + "]";
- }
- }
-
- guiHelper.clearStatusMessage();
- showStatusMessage(action.getDescription(), selectedServers, successServers, partSuccessServers,
- errMsg, partErrMsg);
- }
- }
-
- private void addServerManually() {
- try {
- // To open a dialog for server addition
- ServerAdditionDialog dialog = new ServerAdditionDialog(getShell());
- dialog.open();
- } catch (Exception e) {
- logger.error("Error in Manual server addition", e);
- showErrorDialog("Add server", "Add server failed! [" + e.getMessage() + "]");
- }
- }
- };
-
- BusyIndicator.showWhile(Display.getDefault(), new Runnable() {
- @Override
- public void run() {
- Display.getDefault().asyncExec(addServerThread);
- }
- });
- }
-
- private void showStatusMessage(String dialogTitle, Set<Server> selectedServers, Set<Server> successServers,
- Set<Server> partSuccessServers, String errMsg, String partErrMsg) {
- if (successServers.size() == selectedServers.size()) {
- if (selectedServers.size() == 1) {
- showInfoDialog(dialogTitle, "Server [" + selectedServers.iterator().next() + "] added successfully!");
- } else {
- showInfoDialog(dialogTitle, "Following servers added successfully!" + CoreConstants.NEWLINE
- + selectedServers);
- }
- return;
- }
-
- String finalMsg = "";
- if (successServers.size() == 0 && partSuccessServers.size() == 0) {
- finalMsg = "Server Addition Failed! Error(s):" + CoreConstants.NEWLINE + errMsg;
- } else {
- finalMsg = (successServers.isEmpty() ? "" : "Following servers added successfully : "
- + CoreConstants.NEWLINE + successServers + CoreConstants.NEWLINE)
- + (partSuccessServers.isEmpty() ? "" : "Following servers were added to cluster, but with some errors: "
- + CoreConstants.NEWLINE + partErrMsg + CoreConstants.NEWLINE)
- + (errMsg.isEmpty() ? "" : CoreConstants.NEWLINE
- + "Following errors occurred on other selected servers: " + CoreConstants.NEWLINE + errMsg);
- }
- showErrorDialog(dialogTitle, finalMsg);
- }
-
- @Override
- public void dispose() {
- System.out.println("Disposing [" + this.getClass().getSimpleName() + "]");
- }
-}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ChangePasswordAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ChangePasswordAction.java
deleted file mode 100644
index c7001dda..00000000
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ChangePasswordAction.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.gluster.storage.management.gui.actions;
-
-import org.eclipse.jface.action.IAction;
-
-import com.gluster.storage.management.gui.dialogs.ChangePasswordDialog;
-
-public class ChangePasswordAction extends AbstractActionDelegate {
-
- @Override
- protected void performAction(IAction action) {
- try {
- // To open a dialog for change password
- ChangePasswordDialog dialog = new ChangePasswordDialog(getShell());
- dialog.open();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- @Override
- public void dispose() {
- }
-}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ClearTaskAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ClearTaskAction.java
deleted file mode 100644
index 2c9baf59..00000000
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ClearTaskAction.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.gluster.storage.management.gui.actions;
-
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.viewers.ISelection;
-
-import com.gluster.storage.management.client.TasksClient;
-import com.gluster.storage.management.core.model.Status;
-import com.gluster.storage.management.core.model.TaskInfo;
-import com.gluster.storage.management.gui.GlusterDataModelManager;
-
-public class ClearTaskAction extends AbstractActionDelegate {
- private TaskInfo taskInfo;
- private GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance();
-
- @Override
- protected void performAction(final IAction action) {
- final String actionDesc = action.getDescription();
-
- try {
- new TasksClient().deleteTask(taskInfo.getName()); // taskId
- modelManager.removeTask(taskInfo);
- action.setEnabled(false); // TODO disable other task buttons
- } catch (Exception e) {
- showErrorDialog(actionDesc,
- "Task [" + taskInfo.getName() + "] could not be cleared! Error: [" + e.getMessage() + "]");
- }
- }
-
- @Override
- public void selectionChanged(IAction action, ISelection selection) {
- super.selectionChanged(action, selection);
- action.setEnabled(false);
- if (selectedEntity instanceof TaskInfo) {
- taskInfo = (TaskInfo) selectedEntity;
- action.setEnabled(taskInfo.getStatus().getCode() == Status.STATUS_CODE_SUCCESS
- || taskInfo.getStatus().getCode() == Status.STATUS_CODE_FAILURE);
- } else {
- action.setEnabled(false);
- }
- }
-
- @Override
- public void dispose() {
-
- }
-}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/DeleteVolumeAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/DeleteVolumeAction.java
deleted file mode 100644
index fa686c72..00000000
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/DeleteVolumeAction.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*******************************************************************************
- * 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.actions;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.viewers.ISelection;
-
-import com.gluster.storage.management.client.VolumesClient;
-import com.gluster.storage.management.core.model.Volume;
-import com.gluster.storage.management.core.model.Volume.VOLUME_STATUS;
-import com.gluster.storage.management.core.utils.StringUtil;
-import com.gluster.storage.management.gui.GlusterDataModelManager;
-import com.gluster.storage.management.gui.IImageKeys;
-import com.gluster.storage.management.gui.utils.GUIHelper;
-
-public class DeleteVolumeAction extends AbstractActionDelegate {
- private GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance();
- private List<Volume> volumes = new ArrayList<Volume>();
- private List<String> selectedVolumeNames = new ArrayList<String>();
- private List<String> onlineVolumeNames = new ArrayList<String>();
-
- @Override
- protected void performAction(final IAction action) {
- final String actionDesc = action.getDescription();
- VolumesClient vc = new VolumesClient();
-
- collectVolumeNames();
- String warningMessage;
- if (onlineVolumeNames.size() > 0) { // There are some online volumes, get confirmation to stop and delete all
- // the volumes
- warningMessage = "Following volume(s) [" + StringUtil.collectionToString(onlineVolumeNames, ", ")
- + "] are online, \nAre you sure to continue?";
- } else {
- warningMessage = "Are you sure to delete the following volume(s) ["
- + StringUtil.collectionToString(selectedVolumeNames, ", ") + "] ?";
- }
-
- Integer deleteOption = new MessageDialog(getShell(), "Delete Volume", GUIHelper.getInstance().getImage(
- IImageKeys.VOLUME_16x16), warningMessage, MessageDialog.QUESTION, new String[] { "Cancel",
- "Delete volume and data", "Delete volume, keep data" }, -1).open();
- if (deleteOption <= 0) { // By Cancel button(0) or Escape key(-1)
- return;
- }
-
- boolean confirmDelete = (deleteOption == 1) ? true : false;
- List<String> deletedVolumes = new ArrayList<String>();
- List<String> failedVolumes = new ArrayList<String>();
- String errorMessage = "";
-
- for (Volume volume : volumes) {
- try {
- if (volume.getStatus() == VOLUME_STATUS.ONLINE) { // stop if online volume
- vc.stopVolume(volume.getName());
- }
- vc.deleteVolume(volume, confirmDelete);
- modelManager.deleteVolume(volume);
- deletedVolumes.add(volume.getName());
- } catch (Exception e) {
- // there is a possibility that the error was in post-delete operation, which means
- // volume was deleted, but some other error happened. check if this is the case.
- if (vc.volumeExists(volume.getName())) {
- errorMessage += "\nVolume [" + volume.getName() + "] could not be deleted! Error: ["
- + e.getMessage() + "]";
- failedVolumes.add(volume.getName());
- } else {
- errorMessage += "\nVolume deleted, but following error(s) occured: [" + e.getMessage() + "]";
- modelManager.deleteVolume(volume);
- deletedVolumes.add(volume.getName());
- }
- }
- }
-
- // Display the success or failure info
- if (deletedVolumes.size() == 0) { // No volume(s) deleted successfully
- showErrorDialog(actionDesc, "Following colume(s) [" + StringUtil.collectionToString(failedVolumes, ", ")
- + "] could not be delete! " + "\nError: [" + errorMessage + "]");
- } else {
- String info = "Following volumes [" + StringUtil.collectionToString(deletedVolumes, ", ")
- + "] are deleted successfully!";
- if (errorMessage != "") {
- info += "\n\nFollowing volumes [" + StringUtil.collectionToString(failedVolumes, ", ")
- + "] are failed to delete! [" + errorMessage + "]";
- }
- showInfoDialog(actionDesc, info);
- }
- }
-
- private void collectVolumeNames() {
- selectedVolumeNames.clear();
- onlineVolumeNames.clear();
- for (Volume volume : volumes) {
- selectedVolumeNames.add(volume.getName());
- if (volume.getStatus() == VOLUME_STATUS.ONLINE) {
- onlineVolumeNames.add(volume.getName());
- }
- }
- }
-
- @Override
- public void dispose() {
- System.out.println("Disposing [" + this.getClass().getSimpleName() + "]");
- }
-
- @Override
- public void selectionChanged(IAction action, ISelection selection) {
- Set<Volume> selectedVolumes = GUIHelper.getInstance().getSelectedEntities(getWindow(), Volume.class);
- volumes.clear();
- if (selectedVolumes == null || selectedVolumes.isEmpty()) {
- super.selectionChanged(action, selection);
- if (selectedEntity instanceof Volume) {
- volumes.add((Volume) selectedEntity);
- }
- } else {
- volumes.addAll(selectedVolumes); //TODO reverse the collection to maintain the selected order
- }
-
- action.setEnabled( (volumes.size() > 0) );
- }
-}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/DownloadVolumeLogsAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/DownloadVolumeLogsAction.java
deleted file mode 100644
index 226e4d00..00000000
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/DownloadVolumeLogsAction.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*******************************************************************************
- * 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.actions;
-
-import org.eclipse.jface.action.IAction;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.BusyIndicator;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.FileDialog;
-
-import com.gluster.storage.management.client.VolumesClient;
-import com.gluster.storage.management.core.model.Volume;
-import com.gluster.storage.management.gui.utils.GUIHelper;
-
-/**
- *
- */
-public class DownloadVolumeLogsAction extends AbstractActionDelegate {
- private GUIHelper guiHelper = GUIHelper.getInstance();
-
- @Override
- public void dispose() {
- }
-
- @Override
- protected void performAction(IAction action) {
- final VolumesClient client = new VolumesClient();
- final Runnable downloadLogsThread = new Runnable() {
-
- @Override
- public void run() {
- Volume volume = guiHelper.getSelectedEntity(getWindow(), Volume.class);
-
- FileDialog dialog = new FileDialog(getShell(), SWT.SAVE);
- dialog.setFilterNames(new String[] {"GZipped Tar (*.tar.gz)"});
- dialog.setFilterExtensions(new String[] {"*.tar.gz"});
- String filePath = dialog.open();
-
- if(filePath == null) {
- return;
- }
-
- String title = "Download Volume Logs [" + volume.getName() + "]";
- try {
- client.downloadLogs(volume.getName(), filePath);
- showInfoDialog(title, "Volume logs downloaded successfully to [" + filePath + "]");
- } catch(Exception e) {
- showErrorDialog(title, e.getMessage());
- }
- }
- };
-
- BusyIndicator.showWhile(Display.getDefault(), new Runnable() {
-
- @Override
- public void run() {
- Display.getDefault().asyncExec(downloadLogsThread);
- }
- });
- }
-}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ExportSshKeysAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ExportSshKeysAction.java
deleted file mode 100644
index 86f44d8e..00000000
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ExportSshKeysAction.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
- * ExportSshKeysAction.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.actions;
-
-import org.eclipse.jface.action.IAction;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.BusyIndicator;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.FileDialog;
-
-import com.gluster.storage.management.client.KeysClient;
-
-/**
- * @author root
- *
- */
-public class ExportSshKeysAction extends AbstractActionDelegate {
-
- @Override
- protected void performAction(IAction action) {
- final KeysClient client = new KeysClient();
- final Runnable exportKeysThread = new Runnable() {
-
- @Override
- public void run() {
- FileDialog dialog = new FileDialog(getShell(), SWT.SAVE);
- dialog.setFilterNames(new String[] {"Tar (*.tar)"});
- dialog.setFilterExtensions(new String[] {"*.tar"});
- String filePath = dialog.open();
-
- if(filePath == null) {
- return;
- }
-
- String title = "Export SSH Keys";
- try {
- client.exportSshKeys(filePath);
- showInfoDialog(title, "SSH keys exported successfully to [" + filePath + "]");
- } catch(Exception e) {
- showErrorDialog(title, e.getMessage());
- }
- }
- };
-
- BusyIndicator.showWhile(Display.getDefault(), new Runnable() {
-
- @Override
- public void run() {
- Display.getDefault().asyncExec(exportKeysThread);
- }
- });
- }
-
-
- @Override
- public void dispose() {
- }
-
-}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/IActionConstants.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/IActionConstants.java
deleted file mode 100644
index c5e8958f..00000000
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/IActionConstants.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * 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.actions;
-
-public interface IActionConstants {
- public static final String ACTION_SET_CLUSTER = "com.gluster.storage.management.gui.actionsets.gluster";
- public static final String ACTION_SET_VOLUMES = "com.gluster.storage.management.gui.actionsets.volumes";
- public static final String ACTION_SET_VOLUME = "com.gluster.storage.management.gui.actionsets.volume";
- public static final String ACTION_SET_DISKS = "com.gluster.storage.management.gui.actionsets.disks";
- public static final String ACTION_SET_DISK = "com.gluster.storage.management.gui.actionsets.disk";
- public static final String ACTION_SET_GLUSTER_SERVERS = "com.gluster.storage.management.gui.actionsets.glusterservers";
- public static final String ACTION_SET_GLUSTER_SERVER = "com.gluster.storage.management.gui.actionsets.glusterserver";
- public static final String ACTION_SET_DISCOVERED_SERVERS = "com.gluster.storage.management.gui.actionsets.serversdiscovered";
- public static final String ACTION_SET_DISCOVERED_SERVER = "com.gluster.storage.management.gui.actionsets.serverdiscovered";
- public static final String ACTION_SET_TASK = "com.gluster.storage.management.gui.actionsets.task";
- public static final String ACTION_SET_EDIT = "com.gluster.storage.management.gui.actionsets.edit";
-
- public static final String COMMAND_CREATE_VOLUME = "com.gluster.storage.management.gui.commands.CreateVolume";
- public static final String COMMAND_ADD_SERVER = "com.gluster.storage.management.gui.commands.AddServer";
-}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ImportSshKeysAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ImportSshKeysAction.java
deleted file mode 100644
index a166f509..00000000
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ImportSshKeysAction.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.gluster.storage.management.gui.actions;
-
-import org.eclipse.jface.action.IAction;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.FileDialog;
-
-import com.gluster.storage.management.client.KeysClient;
-
-public class ImportSshKeysAction extends AbstractActionDelegate {
-
- @Override
- protected void performAction(IAction action) {
- final KeysClient client = new KeysClient();
-
- Display.getDefault().asyncExec(new Runnable() {
-
- @Override
- public void run() {
- FileDialog dialog = new FileDialog(getShell(), SWT.OPEN);
- dialog.setText("Open");
- dialog.setFilterNames(new String[] { "ssh-keys (*.tar)" });
- dialog.setFilterExtensions(new String[] { "*.tar" });
-
- String selectedFile = dialog.open();
- if (selectedFile == null) {
- return;
- }
-
- String title = "Import SSH Keys";
- try {
- client.importSshKeys(selectedFile);
- showInfoDialog(title, "SSH keys imported successfully!");
- } catch (Exception e) {
- showErrorDialog(title, e.getMessage());
- }
- }
- });
- }
-
- @Override
- public void dispose() {
- }
-}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RebalanceVolumeAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RebalanceVolumeAction.java
deleted file mode 100644
index 41b74082..00000000
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RebalanceVolumeAction.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*******************************************************************************
- * 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.actions;
-
-import java.net.URI;
-
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.viewers.ISelection;
-
-import com.gluster.storage.management.client.TasksClient;
-import com.gluster.storage.management.client.VolumesClient;
-import com.gluster.storage.management.core.model.TaskInfo;
-import com.gluster.storage.management.core.model.Volume;
-import com.gluster.storage.management.gui.GlusterDataModelManager;
-import com.gluster.storage.management.gui.utils.GUIHelper;
-
-public class RebalanceVolumeAction extends AbstractActionDelegate {
- private Volume volume;
- private GUIHelper guiHelper = GUIHelper.getInstance();
-
- @Override
- protected void performAction(final IAction action) {
- final String actionDesc = action.getDescription();
- try {
- URI uri = new VolumesClient().rebalanceStart(volume.getName(), false, false, false);
- // Add the task to model
- TasksClient taskClient = new TasksClient();
- TaskInfo taskInfo = taskClient.getTaskInfo(uri);
- if (taskInfo != null && taskInfo instanceof TaskInfo) {
- GlusterDataModelManager.getInstance().getModel().getCluster().addTaskInfo(taskInfo);
- }
- showInfoDialog(actionDesc, "Volume [" + volume.getName() + "] rebalance started successfully!");
- } catch (Exception e) {
- showErrorDialog(actionDesc, "Volume rebalance could not be started on [" + volume.getName() + "]! Error: ["
- + e.getMessage() + "]");
- }
- }
-
- @Override
- public void selectionChanged(IAction action, ISelection selection) {
- super.selectionChanged(action, selection);
-
- Volume selectedVolume = guiHelper.getSelectedEntity(getWindow(), Volume.class);
- if (selectedVolume != null) {
- volume = (Volume) selectedVolume;
- action.setEnabled(true);
- } else {
- action.setEnabled(false);
- }
- }
-
- @Override
- public void dispose() {
- System.out.println("Disposing [" + this.getClass().getSimpleName() + "]");
- }
-}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RefreshDataAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RefreshDataAction.java
deleted file mode 100644
index 6bcbc066..00000000
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/RefreshDataAction.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*******************************************************************************
- * 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.actions;
-
-import org.eclipse.jface.action.IAction;
-
-import com.gluster.storage.management.gui.jobs.DataSyncJob;
-
-/**
- *
- */
-public class RefreshDataAction extends AbstractActionDelegate {
- /* (non-Javadoc)
- * @see org.eclipse.ui.IWorkbenchWindowActionDelegate#dispose()
- */
- @Override
- public void dispose() {
- }
-
- /* (non-Javadoc)
- * @see com.gluster.storage.management.gui.actions.AbstractActionDelegate#performAction(org.eclipse.jface.action.IAction)
- */
- @Override
- protected void performAction(IAction action) {
- new DataSyncJob("Cluster Data Sync").schedule();
- }
-}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ResumeTaskAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ResumeTaskAction.java
deleted file mode 100644
index d5cfe2c5..00000000
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ResumeTaskAction.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.gluster.storage.management.gui.actions;
-
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.viewers.ISelection;
-
-import com.gluster.storage.management.client.TasksClient;
-import com.gluster.storage.management.core.model.Status;
-import com.gluster.storage.management.core.model.TaskInfo;
-import com.gluster.storage.management.core.model.TaskStatus;
-import com.gluster.storage.management.gui.GlusterDataModelManager;
-
-public class ResumeTaskAction extends AbstractActionDelegate {
- private TaskInfo taskInfo;
- private GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance();
-
- @Override
- protected void performAction(final IAction action) {
- final String actionDesc = action.getDescription();
-
- try {
- new TasksClient().resumeTask(taskInfo.getName());
- taskInfo.setStatus(new TaskStatus(new Status(Status.STATUS_CODE_RUNNING, "Resumed")));
- modelManager.updateTask(taskInfo);
- } catch (Exception e) {
- showErrorDialog(actionDesc,
- "Task [" + taskInfo.getDescription() + "] could not be Resumed! Error: [" + e.getMessage() + "]");
- }
- }
-
- @Override
- public void selectionChanged(IAction action, ISelection selection) {
- super.selectionChanged(action, selection);
- action.setEnabled(false);
- if (selectedEntity instanceof TaskInfo) {
- taskInfo = (TaskInfo) selectedEntity;
- action.setEnabled(taskInfo.getStatus().getCode() == Status.STATUS_CODE_PAUSE);
- }
- }
-
- @Override
- public void dispose() {
-
- }
-
-}
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
deleted file mode 100644
index add769dd..00000000
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ServerAdditionAction.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.gluster.storage.management.gui.actions;
-
-import org.eclipse.jface.action.IAction;
-
-import com.gluster.storage.management.gui.dialogs.ServerAdditionDialog;
-import com.gluster.storage.management.gui.utils.GlusterLogger;
-
-public class ServerAdditionAction extends AbstractActionDelegate {
- private static final GlusterLogger logger = GlusterLogger.getInstance();
- @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) {
- logger.error("Error in Manual server addition", e);
- e.printStackTrace();
- }
- }
-
-}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StartVolumeAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StartVolumeAction.java
deleted file mode 100644
index b52952af..00000000
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StartVolumeAction.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*******************************************************************************
- * 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.actions;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.viewers.ISelection;
-
-import com.gluster.storage.management.client.VolumesClient;
-import com.gluster.storage.management.core.model.Volume;
-import com.gluster.storage.management.core.model.Volume.VOLUME_STATUS;
-import com.gluster.storage.management.core.utils.StringUtil;
-import com.gluster.storage.management.gui.GlusterDataModelManager;
-import com.gluster.storage.management.gui.utils.GUIHelper;
-
-public class StartVolumeAction extends AbstractActionDelegate {
- //private Volume volume;
- private GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance();
- private List<Volume> volumes = new ArrayList<Volume>();
- private List<String> selectedVolumeNames = new ArrayList<String>();
- private List<String> offlineVolumeNames = new ArrayList<String>();
-
- @Override
- protected void performAction(IAction action) {
- final String actionDesc = action.getDescription();
- VolumesClient vc = new VolumesClient();
-
- collectVolumeNames();
-
- if (offlineVolumeNames.size() == 0) {
- String errorMessage;
- if (selectedVolumeNames.size() == 1) {
- errorMessage = "Volume [" + StringUtil.collectionToString(selectedVolumeNames, ", ") + "] is already online!";
- } else {
- errorMessage = "Volumes [" + StringUtil.collectionToString(selectedVolumeNames, ", ") + "] are already online!";
- }
- showWarningDialog(actionDesc, errorMessage);
- return; // Volume already online. Don't do anything.
- }
-
- List<String> startedVolumes = new ArrayList<String>();
- List<String> failedVolumes = new ArrayList<String>();
- String errorMessage = "";
-
- for (Volume volume : volumes) {
- if (volume.getStatus() == VOLUME_STATUS.ONLINE) {
- continue; // skip if online volume
- }
- try {
- vc.startVolume(volume.getName());
- modelManager.updateVolumeStatus(volume, VOLUME_STATUS.ONLINE);
- startedVolumes.add(volume.getName());
- }catch (Exception e) {
- failedVolumes.add(volume.getName());
- errorMessage += e.getMessage();
- }
- }
-
- // Display the success or failure info
- if (startedVolumes.size() == 0) { // No volume(s) started successfully
- showErrorDialog(actionDesc, "Following volume(s) [" + StringUtil.collectionToString(failedVolumes, ", ")
- + "] could not be start! " + "\nError: [" + errorMessage + "]");
- } else {
- String info = "Following volume(s) [" + StringUtil.collectionToString(startedVolumes, ", ")
- + "] are started successfully!";
- if (errorMessage != "") {
- info += "\n\nFollowing volume(s) [" + StringUtil.collectionToString(failedVolumes, ", ")
- + "] are failed to start! [" + errorMessage + "]";
- }
- showInfoDialog(actionDesc, info);
- }
- }
-
- private void collectVolumeNames() {
- selectedVolumeNames.clear();
- offlineVolumeNames.clear();
- for (Volume volume : volumes) {
- selectedVolumeNames.add(volume.getName());
- if (volume.getStatus() == VOLUME_STATUS.OFFLINE) {
- offlineVolumeNames.add(volume.getName());
- }
- }
- }
-
- @Override
- public void dispose() {
-
- }
-
- @Override
- public void selectionChanged(IAction action, ISelection selection) {
- Set<Volume> selectedVolumes = GUIHelper.getInstance().getSelectedEntities(getWindow(), Volume.class);
- volumes.clear();
- if (selectedVolumes == null || selectedVolumes.isEmpty()) {
- super.selectionChanged(action, selection);
- if (selectedEntity instanceof Volume) {
- volumes.add((Volume) selectedEntity);
- }
- } else {
- volumes.addAll(selectedVolumes); //TODO reverse the collection to maintain the selected order
- }
-
- action.setEnabled(false);
- // To enable the action
- for (Volume volume : volumes) {
- if (volume.getStatus() == VOLUME_STATUS.OFFLINE) {
- action.setEnabled(true);
- break;// If find an online volume, enable the action
- }
- }
- }
-}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StopTaskAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StopTaskAction.java
deleted file mode 100644
index 19030712..00000000
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StopTaskAction.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.gluster.storage.management.gui.actions;
-
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.viewers.ISelection;
-
-import com.gluster.storage.management.client.TasksClient;
-import com.gluster.storage.management.core.model.Status;
-import com.gluster.storage.management.core.model.TaskInfo;
-import com.gluster.storage.management.gui.GlusterDataModelManager;
-
-public class StopTaskAction extends AbstractActionDelegate {
- private TaskInfo taskInfo;
- private GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance();
-
- @Override
- protected void performAction(final IAction action) {
- final String actionDesc = action.getDescription();
-
- try {
- new TasksClient().stopTask(taskInfo.getName());
- // On successful stop clear from the task list
- modelManager.removeTask(taskInfo);
- action.setEnabled(false); // TODO disable other task buttons
- } catch (Exception e) {
- showErrorDialog(actionDesc,
- "Task [" + taskInfo.getDescription() + "] could not be Stopped! Error: [" + e.getMessage() + "]");
- }
- }
-
- @Override
- public void selectionChanged(IAction action, ISelection selection) {
- super.selectionChanged(action, selection);
- action.setEnabled(false);
- if (selectedEntity instanceof TaskInfo) {
- taskInfo = (TaskInfo) selectedEntity;
- action.setEnabled(taskInfo.getStopSupported()
- && (taskInfo.getStatus().getCode() == Status.STATUS_CODE_PAUSE
- || taskInfo.getStatus().getCode() == Status.STATUS_CODE_RUNNING));
- }
- }
-
- @Override
- public void dispose() {
- }
-
-}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StopVolumeAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StopVolumeAction.java
deleted file mode 100644
index f2d23490..00000000
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/StopVolumeAction.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*******************************************************************************
- * 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.actions;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.viewers.ISelection;
-
-import com.gluster.storage.management.client.VolumesClient;
-import com.gluster.storage.management.core.model.Volume;
-import com.gluster.storage.management.core.model.Volume.VOLUME_STATUS;
-import com.gluster.storage.management.core.utils.StringUtil;
-import com.gluster.storage.management.gui.GlusterDataModelManager;
-import com.gluster.storage.management.gui.IImageKeys;
-import com.gluster.storage.management.gui.utils.GUIHelper;
-
-public class StopVolumeAction extends AbstractActionDelegate {
- private GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance();
- private List<Volume> volumes = new ArrayList<Volume>();
- private List<String> selectedVolumeNames = new ArrayList<String>();
- private List<String> onlineVolumeNames = new ArrayList<String>();
-
- @Override
- protected void performAction(final IAction action) {
- final String actionDesc = action.getDescription();
- VolumesClient vc = new VolumesClient();
-
- collectVolumeNames();
-
- if (onlineVolumeNames.size() == 0) {
- String errorMessage;
- if (selectedVolumeNames.size() == 1) {
- errorMessage = "Volume [" + StringUtil.collectionToString(selectedVolumeNames, ", ")
- + "] is already offline!";
- } else {
- errorMessage = "Volumes [" + StringUtil.collectionToString(selectedVolumeNames, ", ")
- + "] are already offline!";
- }
- showWarningDialog(actionDesc, errorMessage);
- return; // Volume already offline. Don't do anything.
- }
-
- Integer userAction = new MessageDialog(getShell(), "Stop Volume", GUIHelper.getInstance().getImage(
- IImageKeys.VOLUME_16x16), "Are you sure you want to stop the following volume(s)?\n" + "["
- + StringUtil.collectionToString(onlineVolumeNames, ", ") + "]", MessageDialog.QUESTION, new String[] {
- "No", "Yes" }, -1).open();
-
- if (userAction <= 0) { // user select cancel or pressed escape key
- return;
- }
-
- List<String> stoppedVolumes = new ArrayList<String>();
- List<String> failedVolumes = new ArrayList<String>();
- String errorMessage = "";
-
- for (Volume volume : volumes) {
- if (volume.getStatus() == VOLUME_STATUS.OFFLINE) {
- continue; // skip if offline volume
- }
- try {
- vc.stopVolume(volume.getName());
- modelManager.updateVolumeStatus(volume, VOLUME_STATUS.OFFLINE);
- stoppedVolumes.add(volume.getName());
- } catch (Exception e) {
- failedVolumes.add(volume.getName());
- errorMessage += e.getMessage();
- }
- }
-
- // Display the success or failure info
- if (stoppedVolumes.size() == 0) { // No volume(s) stopped successfully
- showErrorDialog(actionDesc, "Following volume(s) [" + StringUtil.collectionToString(failedVolumes, ", ")
- + "] could not be stopped! " + "\nError: [" + errorMessage + "]");
- } else {
- String info = "Following volume(s) [" + StringUtil.collectionToString(stoppedVolumes, ", ")
- + "] are stopped successfully!";
- if (errorMessage != "") {
- info += "\n\nFollowing volume(s) [" + StringUtil.collectionToString(failedVolumes, ", ")
- + "] are failed to stop! [" + errorMessage + "]";
- }
- showInfoDialog(actionDesc, info);
- }
- }
-
- private void collectVolumeNames() {
- selectedVolumeNames.clear();
- onlineVolumeNames.clear();
- for (Volume volume : volumes) {
- selectedVolumeNames.add(volume.getName());
- if (volume.getStatus() == VOLUME_STATUS.ONLINE) {
- onlineVolumeNames.add(volume.getName());
- }
- }
- }
-
- @Override
- public void dispose() {
- }
-
- /*
- * (non-Javadoc)
- *
- * @see
- * com.gluster.storage.management.gui.actions.AbstractActionDelegate#selectionChanged(org.eclipse.jface.action.IAction
- * , org.eclipse.jface.viewers.ISelection)
- */
- @Override
- public void selectionChanged(IAction action, ISelection selection) {
-
- Set<Volume> selectedVolumes = GUIHelper.getInstance().getSelectedEntities(getWindow(), Volume.class);
- volumes.clear();
- if (selectedVolumes == null || selectedVolumes.isEmpty()) {
- super.selectionChanged(action, selection);
- if (selectedEntity instanceof Volume) {
- volumes.add((Volume) selectedEntity);
- }
- } else {
- volumes.addAll(selectedVolumes); //TODO reverse the collection to maintain the selected order
- }
-
- action.setEnabled(false);
- // To enable the action
- for (Volume volume : volumes) {
- if (volume.getStatus() == VOLUME_STATUS.ONLINE) {
- action.setEnabled(true);
- break;// If find an online volume, enable the action
- }
- }
- }
-}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumeWizard.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumeWizard.java
deleted file mode 100644
index c5cbcc16..00000000
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/CreateVolumeWizard.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*******************************************************************************
- * 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.jface.dialogs.MessageDialog;
-import org.eclipse.jface.wizard.Wizard;
-
-import com.gluster.storage.management.client.VolumesClient;
-import com.gluster.storage.management.core.model.Volume;
-import com.gluster.storage.management.core.model.Volume.VOLUME_STATUS;
-import com.gluster.storage.management.gui.GlusterDataModelManager;
-
-public class CreateVolumeWizard extends Wizard {
- private static final String title = "Gluster Management Console - Create Volume";
- private CreateVolumePage1 page;
-
- public CreateVolumeWizard() {
- setWindowTitle(title);
- setHelpAvailable(false); // TODO: Introduce wizard help
- }
-
- @Override
- public void addPages() {
- page = new CreateVolumePage1();
- addPage(page);
- }
-
- @Override
- public boolean performFinish() {
- Volume newVolume = page.getVolume();
- VolumesClient volumesClient = new VolumesClient();
-
- try {
- volumesClient.createVolume(newVolume);
- handleSuccess(newVolume, volumesClient);
- } catch(Exception e) {
- String errMsg = e.getMessage();
- // the error could be in to post-volume-create processing. check if this is the case.
- if (volumesClient.volumeExists(newVolume.getName())) {
- handlePartSuccess(newVolume, volumesClient, errMsg);
- } else {
- MessageDialog.openError(getShell(), title, "Volume creation failed! Error: " + errMsg);
- }
- }
-
- return true;
- }
-
- public void handleSuccess(Volume newVolume, VolumesClient volumesClient) {
- String message = "Volume created successfully!";
- newVolume.setStatus(VOLUME_STATUS.OFFLINE);
- boolean warning = false;
- if (page.startVolumeAfterCreation()) {
- try {
- volumesClient.startVolume(newVolume.getName());
- newVolume.setStatus(VOLUME_STATUS.ONLINE);
- message = "Volume created and started successfully!";
- } catch(Exception e) {
- message = "Volume created successfuly, but couldn't be started. Error: " + e.getMessage();
- warning = true;
- }
- }
-
- // update the model
- GlusterDataModelManager.getInstance().addVolume(newVolume);
- if (warning) {
- MessageDialog.openWarning(getShell(), title, message);
- } else {
- MessageDialog.openInformation(getShell(), title, message);
- }
- }
-
- public void handlePartSuccess(Volume newVolume, VolumesClient volumesClient, String errMsg) {
- // volume exists. error was in post-volume-create
- newVolume.setStatus(VOLUME_STATUS.OFFLINE);
- boolean error = false;
- String message1 = null;
- if (page.startVolumeAfterCreation()) {
- if (MessageDialog.openConfirm(getShell(), title,
- "Volume created, but following error(s) occured: " + errMsg
- + "\n\nDo you still want to start the volume [" + newVolume.getName() + "]?")) {
- try {
- volumesClient.startVolume(newVolume.getName());
- newVolume.setStatus(VOLUME_STATUS.ONLINE);
- message1 = "Volume [" + newVolume.getName() + "] started successfully!"; // Only start operation
- } catch(Exception e1) {
- message1 = "Volume couldn't be started. Error: " + e1.getMessage();
- error = true;
- }
- }
-
- if (error) {
- MessageDialog.openWarning(getShell(), title, message1);
- } else {
- MessageDialog.openInformation(getShell(), title, message1);
- }
- } else { // Start volume is not checked
- MessageDialog.openWarning(getShell(), title,
- "Volume created, but following error(s) occured: " + errMsg);
- }
- GlusterDataModelManager.getInstance().addVolume(newVolume);
- }
-}
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
deleted file mode 100644
index 5fce27e4..00000000
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/InitializeDiskTypeSelection.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*******************************************************************************
- *
- * InitializeDiskTypeSelection.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 java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.swt.SWT;
-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.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-
-import com.gluster.storage.management.core.constants.GlusterConstants;
-import com.gluster.storage.management.gui.utils.GUIHelper;
-
-public class InitializeDiskTypeSelection extends Dialog {
-
- private Combo formatTypeCombo = null;
- private final GUIHelper guiHelper = GUIHelper.getInstance();
- private Composite initializeDiskTypeComposite;
- private Composite composite;
- private String fsType;
-
- public InitializeDiskTypeSelection(Shell parentShell) {
- super(parentShell);
- // TODO Auto-generated constructor stub
- }
-
- @Override
- protected void configureShell(Shell newShell) {
- super.configureShell(newShell);
-
- newShell.setText("Gluster Management Console - Select FS Type");
- addEscapeListener(newShell);
- }
-
- private void addEscapeListener(Shell shell) {
- shell.addTraverseListener(new TraverseListener() {
-
- @Override
- public void keyTraversed(TraverseEvent e) {
- if (e.keyCode == SWT.ESC) {
- cancelPressed();
- }
- }
- });
- }
-
- @Override
- protected Control createDialogArea(Composite parent) {
- // Makes sure that child composites inherit the same background
- parent.setBackgroundMode(SWT.INHERIT_FORCE);
-
- composite = (Composite) super.createDialogArea(parent);
- configureDialogLayout(composite);
- createComposite(composite);
- return composite;
- }
-
- private void configureDialogLayout(Composite composite) {
- GridLayout layout = (GridLayout) composite.getLayout();
- layout.numColumns = 3;
- layout.marginLeft = 20;
- layout.marginRight = 20;
- layout.marginTop = 20;
- layout.horizontalSpacing = 20;
- layout.verticalSpacing = 20;
- }
-
- private void createComposite(Composite composite) {
- initializeDiskTypeComposite = new Composite(composite, SWT.NONE);
- GridLayout layout = new GridLayout(3, false);
- initializeDiskTypeComposite.setLayout(layout);
-
- createLabel(initializeDiskTypeComposite, "Format disk using ");
- createFormatTypeCombo(initializeDiskTypeComposite);
- createLabel(initializeDiskTypeComposite, " file system");
- }
-
- private void createLabel(Composite composite, String labelText) {
- Label formatTypeLabel = new Label(composite, SWT.NONE);
- formatTypeLabel.setText(labelText);
- formatTypeLabel.setLayoutData(new GridData(GridData.END, GridData.CENTER, false, false));
- }
-
- private void createFormatTypeCombo(Composite composite) {
- List<String> fsType = new ArrayList<String>();
- fsType.add(GlusterConstants.FSTYPE_DEFAULT);
- fsType.add(GlusterConstants.FSTYPE_EXT_3);
- fsType.add(GlusterConstants.FSTYPE_EXT_4);
- fsType.add(GlusterConstants.FSTYPE_XFS);
- formatTypeCombo = new Combo(composite, SWT.READ_ONLY);
- formatTypeCombo.setItems(fsType.toArray(new String[0]));
- formatTypeCombo.select(0);
- }
-
- @Override
- protected void okPressed() {
- fsType = formatTypeCombo.getText();
- super.okPressed();
- }
-
- @Override
- public void cancelPressed() {
- super.cancelPressed();
- }
-
- /**
- * Overriding to make sure that the dialog is centered in screen
- */
- @Override
- protected void initializeBounds() {
- super.initializeBounds();
-
- guiHelper.centerShellInScreen(getShell());
- }
-
- public String getFSType() {
- return fsType.trim();
- }
-
-}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateBrickWizard.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateBrickWizard.java
deleted file mode 100644
index 055cb769..00000000
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/MigrateBrickWizard.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*******************************************************************************
- * 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 java.net.URI;
-
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.wizard.Wizard;
-
-import com.gluster.storage.management.client.TasksClient;
-import com.gluster.storage.management.client.VolumesClient;
-import com.gluster.storage.management.core.model.Brick;
-import com.gluster.storage.management.core.model.Cluster;
-import com.gluster.storage.management.core.model.TaskInfo;
-import com.gluster.storage.management.core.model.TaskStatus;
-import com.gluster.storage.management.core.model.Volume;
-import com.gluster.storage.management.gui.GlusterDataModelManager;
-
-public class MigrateBrickWizard extends Wizard {
- private Volume volume;
- private Brick brick;
- private MigrateBrickPage1 page;
- private GlusterDataModelManager modelManager = GlusterDataModelManager.getInstance();
- private Cluster cluster = modelManager.getModel().getCluster();
-
- public MigrateBrickWizard(Volume volume, Brick brick) {
- setWindowTitle("Gluster Management Console - Migrate Brick [" + volume.getName() + "]");
- this.volume = volume;
- this.brick = brick;
- setHelpAvailable(false); // TODO: Introduce wizard help
- }
-
- @Override
- public void addPages() {
- page = new MigrateBrickPage1(volume, brick);
- addPage(page);
- }
-
- @Override
- public boolean performFinish() {
-
- String sourceDir = page.getSourceBrickDir();
- String targetDir = page.getTargetBrickDir();
- Boolean autoCommit = page.getAutoCommitSelection();
- VolumesClient volumesClient = new VolumesClient();
- String dialogTitle = "Brick migration";
-
- try {
- URI uri = volumesClient.startMigration(volume.getName(), sourceDir, targetDir, autoCommit);
-
- // To get the object
- TasksClient taskClient = new TasksClient();
- TaskInfo taskInfo = taskClient.getTaskInfo(uri);
- if (taskInfo != null && taskInfo instanceof TaskInfo) {
- cluster.addTaskInfo(taskInfo);
- modelManager.refreshVolumeData(cluster.getVolume(taskInfo.getReference()));
-
- // If auto commit selected and migration operation complete immediately,
- if (taskInfo.getStatus().getCode() == TaskStatus.STATUS_CODE_SUCCESS) {
-
- String volumeName = taskInfo.getReference();
- Volume oldVolume = cluster.getVolume(volumeName);
- Volume newVolume = (new VolumesClient()).getVolume(volumeName);
-
- modelManager.volumeChanged(oldVolume, newVolume);
-
- MessageDialog.openInformation(getShell(), dialogTitle, "Brick migration completed successfully");
- return true;
- }
- }
- MessageDialog.openInformation(getShell(), dialogTitle, "Brick migration started successfully");
-
- } catch (Exception e) {
- MessageDialog.openError(getShell(), dialogTitle, "Brick Migration failed! [" + e.getMessage() + "]");
- }
- return true;
- }
-}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/DisksView.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/DisksView.java
deleted file mode 100644
index 7a19afc0..00000000
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/DisksView.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.gluster.storage.management.gui.views;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.part.ViewPart;
-
-import com.gluster.storage.management.core.model.Disk;
-import com.gluster.storage.management.core.model.EntityGroup;
-import com.gluster.storage.management.core.model.GlusterServer;
-import com.gluster.storage.management.gui.utils.GUIHelper;
-import com.gluster.storage.management.gui.views.pages.DisksPage;
-
-public class DisksView extends ViewPart {
- public static final String ID = DisksView.class.getName();
- private static final GUIHelper guiHelper = GUIHelper.getInstance();
- private EntityGroup<GlusterServer> servers;
- private DisksPage page;
-
- @SuppressWarnings("unchecked")
- @Override
- public void createPartControl(Composite parent) {
- if (servers == null) {
- servers = (EntityGroup<GlusterServer>)guiHelper.getSelectedEntity(getSite(), EntityGroup.class);
- }
-
- page = new DisksPage(parent, SWT.NONE, getSite(), getAllDisks(servers));
- //page.layout(); // IMP: lays out the form properly
- }
-
- private List<Disk> getAllDisks(EntityGroup<GlusterServer> servers) {
- List<Disk> disks = new ArrayList<Disk>();
- for(GlusterServer server : (List<GlusterServer>)servers.getEntities()) {
- disks.addAll(server.getDisks());
- }
- return disks;
- }
-
- @Override
- public void setFocus() {
- page.setFocus();
- }
-} \ No newline at end of file
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServerLogsView.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServerLogsView.java
deleted file mode 100644
index 84568ca6..00000000
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServerLogsView.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- * GlusterServerLogsView.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.views;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.part.ViewPart;
-
-import com.gluster.storage.management.core.model.GlusterServer;
-import com.gluster.storage.management.gui.utils.GUIHelper;
-import com.gluster.storage.management.gui.views.pages.ServerLogsPage;
-
-public class GlusterServerLogsView extends ViewPart {
- public static final String ID = GlusterServerLogsView.class.getName();
- private static final GUIHelper guiHelper = GUIHelper.getInstance();
- private GlusterServer server;
- private ServerLogsPage page;
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
- */
- @Override
- public void createPartControl(Composite parent) {
- if (server == null) {
- server = (GlusterServer) guiHelper.getSelectedEntity(getSite(), GlusterServer.class);
- }
-
- page = new ServerLogsPage(parent, SWT.NONE, server);
-
- parent.layout(); // IMP: lays out the form properly
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
- */
- @Override
- public void setFocus() {
- page.setFocus();
- }
-}
-
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/TasksView.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/TasksView.java
deleted file mode 100644
index 06342bf8..00000000
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/TasksView.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.gluster.storage.management.gui.views;
-
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.part.ViewPart;
-
-import com.gluster.storage.management.core.model.TaskInfo;
-import com.gluster.storage.management.gui.GlusterDataModelManager;
-import com.gluster.storage.management.gui.views.pages.TasksPage;
-
-public class TasksView extends ViewPart {
-
- public static final String ID = TasksView.class.getName();
- private TasksPage page;
-
-
- public TasksView() {
- // TODO Auto-generated constructor stub
- }
-
- @Override
- public void createPartControl(Composite parent) {
- page = new TasksPage(getSite(), parent, SWT.NONE, getAllTasks());
- page.layout(); // IMP: lays out the form properly
- }
-
-
- private List<TaskInfo> getAllTasks() {
- return GlusterDataModelManager.getInstance().getModel().getCluster().getTaskInfoList();
- }
-
- @Override
- public void setFocus() {
- page.setFocus();
- }
-
-}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/ViewsManager.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/ViewsManager.java
deleted file mode 100644
index 2b33308e..00000000
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/ViewsManager.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * ViewsManager.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.views;
-
-import com.gluster.storage.management.core.model.Entity;
-
-/**
- * Whenever the current selection/action demands opening different set of views, the views manager is used to open
- * appropriate views.
- */
-public interface ViewsManager {
- /**
- * Updates the views for given entity. This typically means that user is working with the given entity, and hence
- * the views related to that entity should be made visible, and other un-related views should be hidden.
- *
- * @param entity
- * The entity for which views are to be updated
- */
- public void updateViews(Entity entity);
-} \ No newline at end of file
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeBricksView.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeBricksView.java
deleted file mode 100644
index 01930baa..00000000
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeBricksView.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.gluster.storage.management.gui.views;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.part.ViewPart;
-
-import com.gluster.storage.management.core.model.Volume;
-import com.gluster.storage.management.gui.utils.GUIHelper;
-import com.gluster.storage.management.gui.views.pages.BricksPage;
-
-public class VolumeBricksView extends ViewPart {
- public static final String ID = VolumeBricksView.class.getName();
- private static final GUIHelper guiHelper = GUIHelper.getInstance();
- private BricksPage page;
- private Volume volume;
-
- @Override
- public void createPartControl(Composite parent) {
- if (volume == null) {
- volume = (Volume) guiHelper.getSelectedEntity(getSite(), Volume.class);
- }
-
- createPage(parent);
- }
-
- /**
- * @param parent
- */
- private void createPage(Composite parent) {
- page = new BricksPage(parent, SWT.NONE, getSite(), volume.getBricks());
- parent.layout(); // IMP: lays out the form properly
- }
-
- @Override
- public void setFocus() {
- page.setFocus();
- }
-}
-
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeLogsView.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeLogsView.java
deleted file mode 100644
index 89c343d7..00000000
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeLogsView.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.gluster.storage.management.gui.views;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.part.ViewPart;
-
-import com.gluster.storage.management.core.model.Volume;
-import com.gluster.storage.management.gui.utils.GUIHelper;
-import com.gluster.storage.management.gui.views.pages.VolumeLogsPage;
-
-public class VolumeLogsView extends ViewPart {
- VolumeLogsPage logsPage;
- public static final String ID = VolumeLogsView.class.getName();
- private static final GUIHelper guiHelper = GUIHelper.getInstance();
- private Volume volume;
-
- @Override
- public void createPartControl(Composite parent) {
- if (volume == null) {
- volume = (Volume) guiHelper.getSelectedEntity(getSite(), Volume.class);
- }
-
- createPage(parent);
- }
-
- private void createPage(Composite parent) {
- logsPage = new VolumeLogsPage(parent, SWT.NONE, volume);
- parent.layout(); // IMP: lays out the form properly
- }
-
- @Override
- public void setFocus() {
- logsPage.setFocus();
- }
-} \ No newline at end of file
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeOptionsView.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeOptionsView.java
deleted file mode 100644
index 0780cf6a..00000000
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/VolumeOptionsView.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.gluster.storage.management.gui.views;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.part.ViewPart;
-
-import com.gluster.storage.management.core.model.Volume;
-import com.gluster.storage.management.gui.utils.GUIHelper;
-import com.gluster.storage.management.gui.views.pages.VolumeOptionsPage;
-
-public class VolumeOptionsView extends ViewPart {
- public static final String ID = VolumeOptionsView.class.getName();
- private static final GUIHelper guiHelper = GUIHelper.getInstance();
- private VolumeOptionsPage page;
- private Volume volume;
-
- @Override
- public void createPartControl(Composite parent) {
- if (volume == null) {
- volume = (Volume) guiHelper.getSelectedEntity(getSite(), Volume.class);
- }
-
- createPage(parent);
- }
-
- private void createPage(Composite parent) {
- page = new VolumeOptionsPage(parent, SWT.NONE, volume);
- parent.layout(); // IMP: lays out the form properly
- }
-
- @Override
- public void setFocus() {
- page.setFocus();
- }
-}
-
diff --git a/src/com.gluster.storage.management.gui/src/test.xml b/src/com.gluster.storage.management.gui/src/test.xml
deleted file mode 100644
index 12bbf745..00000000
--- a/src/com.gluster.storage.management.gui/src/test.xml
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
diff --git a/src/com.gluster.storage.management.releng/build.properties b/src/com.gluster.storage.management.releng/build.properties
deleted file mode 100644
index 64f93a9f..00000000
--- a/src/com.gluster.storage.management.releng/build.properties
+++ /dev/null
@@ -1 +0,0 @@
-bin.includes = feature.xml
diff --git a/src/com.gluster.storage.management.releng/com.gluster.storage.management.client.cquery b/src/com.gluster.storage.management.releng/com.gluster.storage.management.client.cquery
deleted file mode 100644
index 7bb4b868..00000000
--- a/src/com.gluster.storage.management.releng/com.gluster.storage.management.client.cquery
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<cq:componentQuery xmlns:cq="http://www.eclipse.org/buckminster/CQuery-1.0" resourceMap="glustermc.rmap">
- <cq:rootRequest name="com.gluster.storage.management.core" componentType="osgi.bundle"/>
-</cq:componentQuery>
diff --git a/src/com.gluster.storage.management.releng/com.gluster.storage.management.core.cquery b/src/com.gluster.storage.management.releng/com.gluster.storage.management.core.cquery
deleted file mode 100644
index a97d350d..00000000
--- a/src/com.gluster.storage.management.releng/com.gluster.storage.management.core.cquery
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<cq:componentQuery xmlns:cq="http://www.eclipse.org/buckminster/CQuery-1.0" resourceMap="glustermc.rmap">
- <cq:rootRequest name="com.gluster.storage.management.client" componentType="osgi.bundle"/>
-</cq:componentQuery>
diff --git a/src/com.gluster.storage.management.releng/com.gluster.storage.management.gateway.cquery b/src/com.gluster.storage.management.releng/com.gluster.storage.management.gateway.cquery
deleted file mode 100644
index 1f663cbe..00000000
--- a/src/com.gluster.storage.management.releng/com.gluster.storage.management.gateway.cquery
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<cq:componentQuery xmlns:cq="http://www.eclipse.org/buckminster/CQuery-1.0" resourceMap="glustermc.rmap">
- <cq:rootRequest name="com.gluster.storage.management.gateway" componentType="unknown"/>
-</cq:componentQuery>
diff --git a/src/com.gluster.storage.management.releng/com.gluster.storage.management.gui.feature.webstart.cquery b/src/com.gluster.storage.management.releng/com.gluster.storage.management.gui.feature.webstart.cquery
deleted file mode 100644
index 4d5dc425..00000000
--- a/src/com.gluster.storage.management.releng/com.gluster.storage.management.gui.feature.webstart.cquery
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<cq:componentQuery xmlns:cq="http://www.eclipse.org/buckminster/CQuery-1.0" resourceMap="glustermc.rmap">
- <cq:rootRequest name="com.gluster.storage.management.gui.feature.webstart" componentType="eclipse.feature"/>
-</cq:componentQuery>
diff --git a/src/com.gluster.storage.management.releng/feature.xml b/src/com.gluster.storage.management.releng/feature.xml
deleted file mode 100644
index 22a0938f..00000000
--- a/src/com.gluster.storage.management.releng/feature.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<feature
- id="com.gluster.storage.management.releng"
- label="Releng"
- version="1.0.0"
- provider-name="Gluster Inc.">
-
- <description url="http://www.example.com/description">
- [Enter Feature Description here.]
- </description>
-
- <copyright url="http://www.example.com/copyright">
- [Enter Copyright Description here.]
- </copyright>
-
- <license url="http://www.example.com/license">
- [Enter License Description here.]
- </license>
-
-</feature>
diff --git a/src/com.gluster.storage.management.releng/gluster-management-console.target b/src/com.gluster.storage.management.releng/gluster-management-console.target
deleted file mode 100644
index 03c45b7c..00000000
--- a/src/com.gluster.storage.management.releng/gluster-management-console.target
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?pde version="3.6"?>
-
-<target includeMode="feature" name="Gluster Storage Platform Target">
-<locations>
-<location path="target/com.gluster.storage.management.gui.target/rcp.sdk.helios.SR1" type="Directory"/>
-<location path="target/com.gluster.storage.management.gui.target/richclientgui.rcptoolbox" type="Directory"/>
-<location path="target/com.gluster.storage.management.gui.target/birt.charts.helios" type="Directory"/>
-<location path="target/com.gluster.storage.management.gui.target/delta.pack.helios" type="Directory"/>
-<location path="target/com.gluster.storage.management.gui.target/org.eclipse.help" type="Directory"/>
-</locations>
-<targetJRE path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
-</target>
diff --git a/src/com.gluster.storage.management.releng/glustermc.rmap b/src/com.gluster.storage.management.releng/glustermc.rmap
deleted file mode 100644
index 73df2b06..00000000
--- a/src/com.gluster.storage.management.releng/glustermc.rmap
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<rm:rmap xmlns:bc="http://www.eclipse.org/buckminster/Common-1.0" xmlns:rm="http://www.eclipse.org/buckminster/RMap-1.0">
- <rm:locator searchPathRef="glustermc"/>
- <rm:searchPath name="glustermc">
- <rm:provider componentTypes="osgi.bundle,eclipse.feature,unknown" readerType="local">
- <rm:uri format="file:///{0}/src/{1}/">
- <bc:propertyRef key="workspace.root"/>
- <bc:propertyRef key="buckminster.component"/>
- </rm:uri>
- </rm:provider>
- </rm:searchPath>
-</rm:rmap>
diff --git a/src/com.gluster.storage.management.releng/glustermc_build.properties b/src/com.gluster.storage.management.releng/glustermc_build.properties
deleted file mode 100644
index d50782d8..00000000
--- a/src/com.gluster.storage.management.releng/glustermc_build.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-# Buckminster build properties file for Gluster Management Console
-
-# Where all the output should go
-#buckminster.output.root=/tmp/buckminster/glustermc
-# Where the temp files should go
-#buckminster.temp.root=/tmp/buckminster
-# How .qualifier in versions should be replaced
-qualifier.replacement.*=generator:lastRevision
-
-# Do not include source
-cbi.include.source=false
-
-# Sets the Java compiler compliance level
-org.eclipse.buckminster.core.jdt.compliancelevel=1.6
diff --git a/src/com.gluster.storage.management.client/.classpath b/src/org.gluster.storage.management.client/.classpath
index b90a101e..9e3c9ce6 100644
--- a/src/com.gluster.storage.management.client/.classpath
+++ b/src/org.gluster.storage.management.client/.classpath
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry exported="true" kind="lib" path="lib/jersey-1.5/jersey-multipart-1.5.jar"/>
- <classpathentry exported="true" kind="lib" path="keystore/"/>
- <classpathentry exported="true" kind="lib" path="lib/jersey-1.5/jersey-client-1.5.jar" sourcepath="/home/selvam/sources/jersey/jersey-client-1.5-sources.jar"/>
+ <classpathentry exported="true" kind="lib" path="lib/jersey-1.5/jersey-client-1.5.jar" sourcepath="/data/downloads/sun/jersey/sources/jersey-client-1.5-sources.jar"/>
<classpathentry exported="true" kind="lib" path="lib/jersey-1.5/jersey-core-1.5.jar" sourcepath="/home/selvam/sources/jersey/jersey-core-1.5-sources.jar"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry excluding="keystore/" kind="src" path="src"/>
- <classpathentry combineaccessrules="false" kind="src" path="/com.gluster.storage.management.core"/>
+ <classpathentry kind="src" path="keystore"/>
+ <classpathentry combineaccessrules="false" kind="src" path="/org.gluster.storage.management.core"/>
<classpathentry kind="output" path="bin"/>
</classpath>
diff --git a/src/com.gluster.storage.management.core/.project b/src/org.gluster.storage.management.client/.project
index 6c8fbb5c..e8da4675 100644
--- a/src/com.gluster.storage.management.core/.project
+++ b/src/org.gluster.storage.management.client/.project
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
- <name>com.gluster.storage.management.core</name>
+ <name>org.gluster.storage.management.client</name>
<comment></comment>
<projects>
</projects>
@@ -20,9 +20,15 @@
<arguments>
</arguments>
</buildCommand>
+ <buildCommand>
+ <name>com.instantiations.assist.eclipse.coverage.instrumentationBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>com.instantiations.assist.eclipse.coverage.codeCoverageNature</nature>
</natures>
</projectDescription>
diff --git a/src/com.gluster.storage.management.client/.settings/org.eclipse.jdt.core.prefs b/src/org.gluster.storage.management.client/.settings/org.eclipse.jdt.core.prefs
index f8b5cc38..f8b5cc38 100644
--- a/src/com.gluster.storage.management.client/.settings/org.eclipse.jdt.core.prefs
+++ b/src/org.gluster.storage.management.client/.settings/org.eclipse.jdt.core.prefs
diff --git a/src/com.gluster.storage.management.client/META-INF/MANIFEST.MF b/src/org.gluster.storage.management.client/META-INF/MANIFEST.MF
index 7958d8cd..0b7ada61 100644
--- a/src/com.gluster.storage.management.client/META-INF/MANIFEST.MF
+++ b/src/org.gluster.storage.management.client/META-INF/MANIFEST.MF
@@ -1,14 +1,14 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Gluster Storage Platform Client
-Bundle-SymbolicName: com.gluster.storage.management.client
-Bundle-Version: 1.0.0
-Bundle-Vendor: GLUSTER
+Bundle-SymbolicName: org.gluster.storage.management.client
+Bundle-Version: 1.0.0.qualifier
+Bundle-Vendor: Gluster
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
-Require-Bundle: com.gluster.storage.management.core;bundle-version="1.0.0",
+Require-Bundle: org.gluster.storage.management.core;bundle-version="1.0.0",
org.eclipse.equinox.common;bundle-version="3.6.0"
-Export-Package: com.gluster.storage.management.client,
- com.gluster.storage.management.client.constants
+Export-Package: org.gluster.storage.management.client,
+ org.gluster.storage.management.client.constants
Bundle-ClassPath: .,
lib/jersey-1.5/jersey-client-1.5.jar,
lib/jersey-1.5/jersey-core-1.5.jar,
diff --git a/src/org.gluster.storage.management.client/build.properties b/src/org.gluster.storage.management.client/build.properties
new file mode 100644
index 00000000..fe37f4ee
--- /dev/null
+++ b/src/org.gluster.storage.management.client/build.properties
@@ -0,0 +1,27 @@
+###############################################################################
+# Copyright (c) 2006-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 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see
+# <http://www.gnu.org/licenses/>.
+###############################################################################
+source.. = src/,\
+ keystore/
+output.. = bin/
+bin.includes = .,\
+ META-INF/,\
+ lib/,\
+ keystore/,\
+ lib/jersey-1.5/jersey-multipart-1.5.jar
+src.includes = lib/
diff --git a/src/com.gluster.storage.management.client/keystore/gmc-trusted.keystore b/src/org.gluster.storage.management.client/keystore/gmc-trusted.keystore
index 5517b6e5..5517b6e5 100644
--- a/src/com.gluster.storage.management.client/keystore/gmc-trusted.keystore
+++ b/src/org.gluster.storage.management.client/keystore/gmc-trusted.keystore
Binary files differ
diff --git a/src/org.gluster.storage.management.client/lib/jersey-1.5/Jersey-LICENSE.txt b/src/org.gluster.storage.management.client/lib/jersey-1.5/Jersey-LICENSE.txt
new file mode 100644
index 00000000..d24fbfdb
--- /dev/null
+++ b/src/org.gluster.storage.management.client/lib/jersey-1.5/Jersey-LICENSE.txt
@@ -0,0 +1,135 @@
+The GNU General Public License (GPL) Version 2, June 1991
+
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too.
+
+When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.
+
+For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
+
+We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.
+
+Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.
+
+Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.
+
+The precise terms and conditions for copying, distribution and modification follow.
+
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.
+
+1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
+
+3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
+
+If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.
+
+4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
+
+5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.
+
+6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.
+
+7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
+
+This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
+
+8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.
+
+9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.
+
+10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
+
+NO WARRANTY
+
+11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+
+How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
+
+ One line to give the program's name and a brief idea of what it does.
+
+ Copyright (C)
+
+ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
+
+ This program 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ signature of Ty Coon, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License.
+
+
+"CLASSPATH" EXCEPTION TO THE GPL VERSION 2
+
+Certain source files distributed by Oracle are subject to the following clarification and special exception to the GPL Version 2, but only where Oracle has expressly included in the particular source file's header the words "Oracle designates this particular file as subject to the "Classpath" exception as provided by Oracle in the License file that accompanied this code."
+
+Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License Version 2 cover the whole combination.
+
+As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.
diff --git a/src/org.gluster.storage.management.client/lib/jersey-1.5/Jersey-third-party-license-readme.txt b/src/org.gluster.storage.management.client/lib/jersey-1.5/Jersey-third-party-license-readme.txt
new file mode 100644
index 00000000..b3acf520
--- /dev/null
+++ b/src/org.gluster.storage.management.client/lib/jersey-1.5/Jersey-third-party-license-readme.txt
@@ -0,0 +1,188 @@
+
+DO NOT TRANSLATE OR LOCALIZE.
+
+%% The following software may be included in this product: ASM
+ Use of any of this software is governed by the terms of the license below:
+
+Copyright (c) 2000-2005 INRIA, France Telecom
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holders nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGE.
+
+
+%% The following software may be included in this product: Jettison
+ Use of any of this software is governed by the terms of the license below:
+
+
+Copyright 2006 Envoi Solutions LLC
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+--------------------------------------------------------------------------
+
+Apache License
+Version 2.0, January 2004
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ 2. You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ 4. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+APPENDIX: How to apply the Apache License to your work
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
+
+
+
+%% The following software may be included in this product: Jackson
+ Use of any of this software is governed by the terms of the license below:
+
+
+Jackson is dual-licensed under two alternative popular Open Source licenses: Apache (AL 2.0) and Gnu Lesser GPL (LGPL 2.1). You choose one or the other, as necessary (if you want to redistribute the code ¿ for use, you do not need license), and abide by the license rules as defined by the respective license agreement (and only that one).
+
+--------------------------------------------------------------------------
+
+Apache License
+Version 2.0, January 2004
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ 2. You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+ 4. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+APPENDIX: How to apply the Apache License to your work
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
+
+
diff --git a/src/com.gluster.storage.management.client/lib/jersey-1.5/jersey-client-1.5.jar b/src/org.gluster.storage.management.client/lib/jersey-1.5/jersey-client-1.5.jar
index 62f790fa..62f790fa 100644
--- a/src/com.gluster.storage.management.client/lib/jersey-1.5/jersey-client-1.5.jar
+++ b/src/org.gluster.storage.management.client/lib/jersey-1.5/jersey-client-1.5.jar
Binary files differ
diff --git a/src/com.gluster.storage.management.client/lib/jersey-1.5/jersey-core-1.5.jar b/src/org.gluster.storage.management.client/lib/jersey-1.5/jersey-core-1.5.jar
index 92b38466..92b38466 100644
--- a/src/com.gluster.storage.management.client/lib/jersey-1.5/jersey-core-1.5.jar
+++ b/src/org.gluster.storage.management.client/lib/jersey-1.5/jersey-core-1.5.jar
Binary files differ
diff --git a/src/com.gluster.storage.management.client/lib/jersey-1.5/jersey-multipart-1.5.jar b/src/org.gluster.storage.management.client/lib/jersey-1.5/jersey-multipart-1.5.jar
index 1c134f05..1c134f05 100644
--- a/src/com.gluster.storage.management.client/lib/jersey-1.5/jersey-multipart-1.5.jar
+++ b/src/org.gluster.storage.management.client/lib/jersey-1.5/jersey-multipart-1.5.jar
Binary files differ
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java b/src/org.gluster.storage.management.client/src/org/gluster/storage/management/client/AbstractClient.java
index 716d3b65..c433c3f4 100644
--- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java
+++ b/src/org.gluster.storage.management.client/src/org/gluster/storage/management/client/AbstractClient.java
@@ -1,424 +1,447 @@
-package com.gluster.storage.management.client;
-
-import static com.gluster.storage.management.client.constants.ClientConstants.ALGORITHM_SUNX509;
-import static com.gluster.storage.management.client.constants.ClientConstants.KEYSTORE_TYPE_JKS;
-import static com.gluster.storage.management.client.constants.ClientConstants.PROTOCOL_TLS;
-import static com.gluster.storage.management.client.constants.ClientConstants.TRUSTED_KEYSTORE;
-import static com.gluster.storage.management.client.constants.ClientConstants.TRUSTED_KEYSTORE_ACCESS;
-
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.ConnectException;
-import java.net.URI;
-import java.security.KeyStore;
-
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.KeyManagerFactory;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLSession;
-import javax.net.ssl.TrustManagerFactory;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.core.Response;
-
-import com.gluster.storage.management.client.utils.ClientUtil;
-import com.gluster.storage.management.core.exceptions.GlusterRuntimeException;
-import com.sun.jersey.api.client.Client;
-import com.sun.jersey.api.client.ClientResponse;
-import com.sun.jersey.api.client.UniformInterfaceException;
-import com.sun.jersey.api.client.WebResource;
-import com.sun.jersey.api.client.WebResource.Builder;
-import com.sun.jersey.api.client.config.DefaultClientConfig;
-import com.sun.jersey.api.representation.Form;
-import com.sun.jersey.client.urlconnection.HTTPSProperties;
-import com.sun.jersey.core.util.MultivaluedMapImpl;
-import com.sun.jersey.multipart.FormDataMultiPart;
-
-public abstract class AbstractClient {
- private static final String HTTP_HEADER_AUTH = "Authorization";
- protected static final MultivaluedMap<String, String> NO_PARAMS = new MultivaluedMapImpl();
- protected static String clusterName;
- protected static String securityToken;
- protected WebResource resource;
- private String authHeader;
- private Client client;
-
- /**
- * This constructor will work only after the data model manager has been initialized.
- */
- public AbstractClient() {
- this(securityToken, clusterName);
- }
-
- /**
- * This constructor will work only after the data model manager has been initialized.
- */
- public AbstractClient(String clusterName) {
- this(securityToken, clusterName);
- }
-
- public AbstractClient(String securityToken, String clusterName) {
- AbstractClient.clusterName = clusterName;
- setSecurityToken(securityToken);
-
- createClient();
-
- // this must be after setting clusterName as sub-classes may refer to cluster name in the getResourcePath method
- resource = client.resource(ClientUtil.getServerBaseURI()).path(getResourcePath());
- }
-
- private void createClient() {
- SSLContext context = initializeSSLContext();
- DefaultClientConfig config = createClientConfig(context);
- client = Client.create(config);
- }
-
- private DefaultClientConfig createClientConfig(SSLContext context) {
- DefaultClientConfig config = new DefaultClientConfig();
- config.getProperties().put(HTTPSProperties.PROPERTY_HTTPS_PROPERTIES,
- new HTTPSProperties(createHostnameVerifier(), context));
- return config;
- }
-
- private HostnameVerifier createHostnameVerifier() {
- HostnameVerifier hostnameVerifier = new HostnameVerifier() {
- @Override
- public boolean verify(String arg0, SSLSession arg1) {
- return true;
- }
- };
- return hostnameVerifier;
- }
-
- private SSLContext initializeSSLContext() {
- SSLContext context = null;
- try {
- context = SSLContext.getInstance(PROTOCOL_TLS);
-
- KeyStore keyStore = KeyStore.getInstance(KEYSTORE_TYPE_JKS);
- keyStore.load(loadResource(TRUSTED_KEYSTORE), TRUSTED_KEYSTORE_ACCESS.toCharArray());
-
- KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(ALGORITHM_SUNX509);
- keyManagerFactory.init(keyStore, TRUSTED_KEYSTORE_ACCESS.toCharArray());
-
- TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(ALGORITHM_SUNX509);
- trustManagerFactory.init(keyStore);
-
- context.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null);
- } catch (Exception e) {
- throw new GlusterRuntimeException(
- "Couldn't initialize SSL Context with Gluster Management Gateway! Error: " + e, e);
- }
- return context;
- }
-
- private InputStream loadResource(String resourcePath) {
- return this.getClass().getClassLoader().getResourceAsStream(resourcePath);
- }
-
- /**
- * Fetches the given resource by dispatching a GET request
- *
- * @param res
- * Resource to be fetched
- * @param queryParams
- * Query parameters to be sent for the GET request
- * @param responseClass
- * Expected class of the response
- * @return Object of responseClass received as a result of the GET request
- */
- private <T> T fetchResource(WebResource res, MultivaluedMap<String, String> queryParams, Class<T> responseClass) {
- try {
- return res.queryParams(queryParams).header(HTTP_HEADER_AUTH, authHeader).accept(MediaType.APPLICATION_XML)
- .get(responseClass);
- } catch (Exception e1) {
- throw createGlusterException(e1);
- }
- }
-
- private GlusterRuntimeException createGlusterException(Exception e) {
- if (e instanceof GlusterRuntimeException) {
- return (GlusterRuntimeException) e;
- }
-
- if (e instanceof UniformInterfaceException) {
- UniformInterfaceException uie = (UniformInterfaceException) e;
- if ((uie.getResponse().getStatus() == Response.Status.UNAUTHORIZED.getStatusCode())) {
- // authentication failed. clear security token.
- setSecurityToken(null);
- return new GlusterRuntimeException("Invalid credentials!");
- } else {
- return new GlusterRuntimeException("[" + uie.getResponse().getStatus() + "]["
- + uie.getResponse().getEntity(String.class) + "]");
- }
- } else {
- Throwable cause = e.getCause();
- if (cause != null && cause instanceof ConnectException) {
- return new GlusterRuntimeException("Couldn't connect to Gluster Management Gateway!");
- }
-
- return new GlusterRuntimeException("Exception in REST communication! [" + e.getMessage() + "]", e);
- }
- }
-
- protected void downloadResource(WebResource res, String filePath) {
- ClientResponse response = null;
- try {
- response = res.header(HTTP_HEADER_AUTH, authHeader).accept(MediaType.APPLICATION_OCTET_STREAM)
- .get(ClientResponse.class);
- if (response.getStatus() >= 300) {
- throw new GlusterRuntimeException(response.getEntity(String.class));
- }
- } catch (Exception e1) {
- throw createGlusterException(e1);
- }
-
- try {
- if (!response.hasEntity()) {
- throw new GlusterRuntimeException("No entity in response!");
- }
-
- InputStream inputStream = response.getEntityInputStream();
- FileOutputStream outputStream = new FileOutputStream(filePath);
-
- int c;
- while ((c = inputStream.read()) != -1) {
- outputStream.write(c);
- }
- inputStream.close();
- outputStream.close();
- } catch (IOException e) {
- throw new GlusterRuntimeException("Error while downloading resource [" + res.getURI().getPath() + "]", e);
- }
- }
-
- public void uploadResource(WebResource res, FormDataMultiPart form) {
- try {
- res.header(HTTP_HEADER_AUTH, authHeader).type(MediaType.MULTIPART_FORM_DATA_TYPE).post(String.class, form);
- } catch (Exception e) {
- throw new GlusterRuntimeException("Error while importing resource [" + e.getMessage() + "]", e);
- }
- }
-
- /**
- * Fetches the default resource (the one returned by {@link AbstractClient#getResourcePath()}) by dispatching a GET
- * request on the resource
- *
- * @param queryParams
- * Query parameters to be sent for the GET request
- * @param responseClass
- * Expected class of the response
- * @return Object of responseClass received as a result of the GET request
- */
- protected <T> T fetchResource(MultivaluedMap<String, String> queryParams, Class<T> responseClass) {
- return fetchResource(resource, queryParams, responseClass);
- }
-
- /**
- * Fetches the default resource (the one returned by {@link AbstractClient#getResourcePath()}) by dispatching a GET
- * request on the resource
- *
- * @param responseClass
- * Expected class of the response
- * @return Object of responseClass received as a result of the GET request
- */
- protected <T> T fetchResource(Class<T> responseClass) {
- return fetchResource(resource, NO_PARAMS, responseClass);
- }
-
- /**
- * Fetches the resource whose name is arrived at by appending the "subResourceName" parameter to the default
- * resource (the one returned by {@link AbstractClient#getResourcePath()})
- *
- * @param subResourceName
- * Name of the sub-resource
- * @param responseClass
- * Expected class of the response
- * @return Object of responseClass received as a result of the GET request on the sub-resource
- */
- protected <T> T fetchSubResource(String subResourceName, Class<T> responseClass) {
- return fetchResource(resource.path(subResourceName), NO_PARAMS, responseClass);
- }
-
- protected void downloadSubResource(String subResourceName, String filePath) {
- downloadResource(resource.path(subResourceName), filePath);
- }
-
- /**
- * Fetches the resource whose name is arrived at by appending the "subResourceName" parameter to the default
- * resource (the one returned by {@link AbstractClient#getResourcePath()})
- *
- * @param subResourceName
- * Name of the sub-resource
- * @param queryParams
- * Query parameters to be sent for the GET request
- * @param responseClass
- * Expected class of the response
- * @return Object of responseClass received as a result of the GET request on the sub-resource
- */
- protected <T> T fetchSubResource(String subResourceName, MultivaluedMap<String, String> queryParams,
- Class<T> responseClass) {
- return fetchResource(resource.path(subResourceName), queryParams, responseClass);
- }
-
- private void postRequest(WebResource resource, Form form) {
- try {
- prepareFormRequestBuilder(resource).post(form);
- } catch (UniformInterfaceException e) {
- throw new GlusterRuntimeException(e.getResponse().getEntity(String.class));
- }
- }
-
- /**
- * Submits given object to the resource and returns the object received as response
- *
- * @param responseClass
- * Class of the object expected as response
- * @param requestObject
- * the Object to be submitted
- * @return Object of given class received as response
- */
- 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);
- }
-
- /**
- * Submits given Form using POST method to the resource and returns the object received as response
- *
- * @param form
- * Form to be submitted
- */
- protected void postRequest(Form form) {
- postRequest(resource, form);
- }
-
- /**
- * Submits given Form using POST method to the given sub-resource and returns the object received as response
- *
- * @param subResourceName
- * Name of the sub-resource to which the request is to be posted
- * @param form
- * Form to be submitted
- */
- protected void postRequest(String subResourceName, Form form) {
- postRequest(resource.path(subResourceName), form);
- }
-
- private ClientResponse putRequest(WebResource resource, Form form) {
- try {
- ClientResponse response = prepareFormRequestBuilder(resource).put(ClientResponse.class, form);
- if ((response.getStatus() == Response.Status.UNAUTHORIZED.getStatusCode())) {
- // authentication failed. clear security token.
- setSecurityToken(null);
- throw new GlusterRuntimeException("Invalid credentials!");
- }
- if (response.getStatus() >= 300) {
- throw new GlusterRuntimeException(response.getEntity(String.class));
- }
- return response;
- } catch (Exception e) {
- throw createGlusterException(e);
- }
- }
-
- public Builder prepareFormRequestBuilder(WebResource resource) {
- return resource.type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).header(HTTP_HEADER_AUTH, authHeader)
- .accept(MediaType.APPLICATION_XML);
- }
-
- /**
- * Submits given Form using PUT method to the given sub-resource and returns the object received as response
- *
- * @param subResourceName
- * Name of the sub-resource to which the request is to be posted
- * @param form
- * Form to be submitted
- */
- protected void putRequest(String subResourceName, Form form) {
- putRequest(resource.path(subResourceName), form);
- }
-
- protected URI putRequestURI(String subResourceName, Form form) {
- ClientResponse response = putRequest(resource.path(subResourceName), form);
- return response.getLocation();
- }
-
- /**
- * Submits given Form using PUT method to the given sub-resource and returns the object received as response
- *
- * @param form
- * Form to be submitted
- */
- protected void putRequest(Form form) {
- putRequest(resource, form);
- }
-
- /**
- * Submits given Form using PUT method to the given sub-resource and returns the object received as response
- *
- * @param subResourceName
- * Name of the sub-resource to which the request is to be posted
- */
- protected void putRequest(String subResourceName) {
- try {
- prepareFormRequestBuilder(resource.path(subResourceName)).put();
- } catch (UniformInterfaceException e) {
- throw new GlusterRuntimeException(e.getResponse().getEntity(String.class));
- }
- }
-
- private void deleteResource(WebResource resource, MultivaluedMap<String, String> queryParams) {
- try {
- resource.queryParams(queryParams).header(HTTP_HEADER_AUTH, authHeader).delete();
- } catch (UniformInterfaceException e) {
- throw new GlusterRuntimeException(e.getResponse().getEntity(String.class));
- }
- }
-
- protected void deleteResource(MultivaluedMap<String, String> queryParams) {
- deleteResource(resource, queryParams);
- }
-
- protected void deleteSubResource(String subResourceName, MultivaluedMap<String, String> queryParams) {
- deleteResource(resource.path(subResourceName), queryParams);
- }
-
- protected void deleteSubResource(String subResourceName) {
- try {
- resource.path(subResourceName).header(HTTP_HEADER_AUTH, authHeader).delete();
- } catch (UniformInterfaceException e) {
- throw new GlusterRuntimeException(e.getResponse().getEntity(String.class));
- }
- }
-
- public abstract String getResourcePath();
-
- /**
- * @return the securityToken
- */
- protected String getSecurityToken() {
- return securityToken;
- }
-
- /**
- * @param securityToken
- * the securityToken to set
- */
- protected void setSecurityToken(String securityToken) {
- AbstractClient.securityToken = securityToken;
- authHeader = "Basic " + securityToken;
- }
-
- /**
- * @param uri
- * The URI to be fetched using GET API
- * @param responseClass
- * Expected type of response object
- * @return Object of the given class
- */
- protected <T> T fetchResource(URI uri, Class<T> responseClass) {
- return fetchResource(client.resource(uri), NO_PARAMS, responseClass);
- }
-}
+/*******************************************************************************
+ * Copyright (c) 2006-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 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *******************************************************************************/
+package org.gluster.storage.management.client;
+
+import static org.gluster.storage.management.client.constants.ClientConstants.ALGORITHM_SUNX509;
+import static org.gluster.storage.management.client.constants.ClientConstants.KEYSTORE_TYPE_JKS;
+import static org.gluster.storage.management.client.constants.ClientConstants.PROTOCOL_TLS;
+import static org.gluster.storage.management.client.constants.ClientConstants.TRUSTED_KEYSTORE;
+import static org.gluster.storage.management.client.constants.ClientConstants.TRUSTED_KEYSTORE_ACCESS;
+
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.ConnectException;
+import java.net.URI;
+import java.security.KeyStore;
+
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.KeyManagerFactory;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSession;
+import javax.net.ssl.TrustManagerFactory;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.Response;
+
+import org.gluster.storage.management.client.utils.ClientUtil;
+import org.gluster.storage.management.core.exceptions.GlusterRuntimeException;
+
+import com.sun.jersey.api.client.Client;
+import com.sun.jersey.api.client.ClientResponse;
+import com.sun.jersey.api.client.UniformInterfaceException;
+import com.sun.jersey.api.client.WebResource;
+import com.sun.jersey.api.client.WebResource.Builder;
+import com.sun.jersey.api.client.config.DefaultClientConfig;
+import com.sun.jersey.api.representation.Form;
+import com.sun.jersey.client.urlconnection.HTTPSProperties;
+import com.sun.jersey.core.util.MultivaluedMapImpl;
+import com.sun.jersey.multipart.FormDataMultiPart;
+
+public abstract class AbstractClient {
+ private static final String HTTP_HEADER_AUTH = "Authorization";
+ protected static final MultivaluedMap<String, String> NO_PARAMS = new MultivaluedMapImpl();
+ protected static String clusterName;
+ protected static String securityToken;
+ protected WebResource resource;
+ private String authHeader;
+ private Client client;
+
+ /**
+ * This constructor will work only after the data model manager has been initialized.
+ */
+ public AbstractClient() {
+ this(securityToken, clusterName);
+ }
+
+ /**
+ * This constructor will work only after the data model manager has been initialized.
+ */
+ public AbstractClient(String clusterName) {
+ this(securityToken, clusterName);
+ }
+
+ public AbstractClient(String securityToken, String clusterName) {
+ AbstractClient.clusterName = clusterName;
+ setSecurityToken(securityToken);
+
+ createClient();
+
+ // this must be after setting clusterName as sub-classes may refer to cluster name in the getResourcePath method
+ resource = client.resource(ClientUtil.getServerBaseURI()).path(getResourcePath());
+ }
+
+ private void createClient() {
+ SSLContext context = initializeSSLContext();
+ DefaultClientConfig config = createClientConfig(context);
+ client = Client.create(config);
+ }
+
+ private DefaultClientConfig createClientConfig(SSLContext context) {
+ DefaultClientConfig config = new DefaultClientConfig();
+ config.getProperties().put(HTTPSProperties.PROPERTY_HTTPS_PROPERTIES,
+ new HTTPSProperties(createHostnameVerifier(), context));
+ return config;
+ }
+
+ private HostnameVerifier createHostnameVerifier() {
+ HostnameVerifier hostnameVerifier = new HostnameVerifier() {
+ @Override
+ public boolean verify(String arg0, SSLSession arg1) {
+ return true;
+ }
+ };
+ return hostnameVerifier;
+ }
+
+ private SSLContext initializeSSLContext() {
+ SSLContext context = null;
+ try {
+ context = SSLContext.getInstance(PROTOCOL_TLS);
+
+ KeyStore keyStore = KeyStore.getInstance(KEYSTORE_TYPE_JKS);
+ keyStore.load(loadResource(TRUSTED_KEYSTORE), TRUSTED_KEYSTORE_ACCESS.toCharArray());
+
+ KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(ALGORITHM_SUNX509);
+ keyManagerFactory.init(keyStore, TRUSTED_KEYSTORE_ACCESS.toCharArray());
+
+ TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(ALGORITHM_SUNX509);
+ trustManagerFactory.init(keyStore);
+
+ context.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null);
+ } catch (Exception e) {
+ throw new GlusterRuntimeException(
+ "Couldn't initialize SSL Context with Gluster Management Gateway! Error: " + e, e);
+ }
+ return context;
+ }
+
+ private InputStream loadResource(String resourcePath) {
+ return this.getClass().getClassLoader().getResourceAsStream(resourcePath);
+ }
+
+ /**
+ * Fetches the given resource by dispatching a GET request
+ *
+ * @param res
+ * Resource to be fetched
+ * @param queryParams
+ * Query parameters to be sent for the GET request
+ * @param responseClass
+ * Expected class of the response
+ * @return Object of responseClass received as a result of the GET request
+ */
+ private <T> T fetchResource(WebResource res, MultivaluedMap<String, String> queryParams, Class<T> responseClass) {
+ try {
+ return res.queryParams(queryParams).header(HTTP_HEADER_AUTH, authHeader).accept(MediaType.APPLICATION_XML)
+ .get(responseClass);
+ } catch (Exception e1) {
+ throw createGlusterException(e1);
+ }
+ }
+
+ private GlusterRuntimeException createGlusterException(Exception e) {
+ if (e instanceof GlusterRuntimeException) {
+ return (GlusterRuntimeException) e;
+ }
+
+ if (e instanceof UniformInterfaceException) {
+ UniformInterfaceException uie = (UniformInterfaceException) e;
+ if ((uie.getResponse().getStatus() == Response.Status.UNAUTHORIZED.getStatusCode())) {
+ // authentication failed. clear security token.
+ setSecurityToken(null);
+ return new GlusterRuntimeException("Invalid credentials!");
+ } else {
+ return new GlusterRuntimeException("[" + uie.getResponse().getStatus() + "]["
+ + uie.getResponse().getEntity(String.class) + "]");
+ }
+ } else {
+ Throwable cause = e.getCause();
+ if (cause != null && cause instanceof ConnectException) {
+ return new GlusterRuntimeException("Couldn't connect to Gluster Management Gateway!");
+ }
+
+ return new GlusterRuntimeException("Exception in REST communication! [" + e.getMessage() + "]", e);
+ }
+ }
+
+ protected void downloadResource(WebResource res, String filePath) {
+ ClientResponse response = null;
+ try {
+ response = res.header(HTTP_HEADER_AUTH, authHeader).accept(MediaType.APPLICATION_OCTET_STREAM)
+ .get(ClientResponse.class);
+ checkResponseStatus(response);
+ } catch (Exception e1) {
+ throw createGlusterException(e1);
+ }
+
+ try {
+ if (!response.hasEntity()) {
+ throw new GlusterRuntimeException("No entity in response!");
+ }
+
+ InputStream inputStream = response.getEntityInputStream();
+ FileOutputStream outputStream = new FileOutputStream(filePath);
+
+ int c;
+ while ((c = inputStream.read()) != -1) {
+ outputStream.write(c);
+ }
+ inputStream.close();
+ outputStream.close();
+ } catch (IOException e) {
+ throw new GlusterRuntimeException("Error while downloading resource [" + res.getURI().getPath() + "]", e);
+ }
+ }
+
+ public void uploadResource(WebResource res, FormDataMultiPart form) {
+ try {
+ res.header(HTTP_HEADER_AUTH, authHeader).type(MediaType.MULTIPART_FORM_DATA_TYPE).post(String.class, form);
+ } catch (Exception e) {
+ throw createGlusterException(e);
+ }
+ }
+
+ /**
+ * Fetches the default resource (the one returned by {@link AbstractClient#getResourcePath()}) by dispatching a GET
+ * request on the resource
+ *
+ * @param queryParams
+ * Query parameters to be sent for the GET request
+ * @param responseClass
+ * Expected class of the response
+ * @return Object of responseClass received as a result of the GET request
+ */
+ protected <T> T fetchResource(MultivaluedMap<String, String> queryParams, Class<T> responseClass) {
+ return fetchResource(resource, queryParams, responseClass);
+ }
+
+ /**
+ * Fetches the default resource (the one returned by {@link AbstractClient#getResourcePath()}) by dispatching a GET
+ * request on the resource
+ *
+ * @param responseClass
+ * Expected class of the response
+ * @return Object of responseClass received as a result of the GET request
+ */
+ protected <T> T fetchResource(Class<T> responseClass) {
+ return fetchResource(resource, NO_PARAMS, responseClass);
+ }
+
+ /**
+ * Fetches the resource whose name is arrived at by appending the "subResourceName" parameter to the default
+ * resource (the one returned by {@link AbstractClient#getResourcePath()})
+ *
+ * @param subResourceName
+ * Name of the sub-resource
+ * @param responseClass
+ * Expected class of the response
+ * @return Object of responseClass received as a result of the GET request on the sub-resource
+ */
+ protected <T> T fetchSubResource(String subResourceName, Class<T> responseClass) {
+ return fetchResource(resource.path(subResourceName), NO_PARAMS, responseClass);
+ }
+
+ protected void downloadSubResource(String subResourceName, String filePath) {
+ downloadResource(resource.path(subResourceName), filePath);
+ }
+
+ /**
+ * Fetches the resource whose name is arrived at by appending the "subResourceName" parameter to the default
+ * resource (the one returned by {@link AbstractClient#getResourcePath()})
+ *
+ * @param subResourceName
+ * Name of the sub-resource
+ * @param queryParams
+ * Query parameters to be sent for the GET request
+ * @param responseClass
+ * Expected class of the response
+ * @return Object of responseClass received as a result of the GET request on the sub-resource
+ */
+ protected <T> T fetchSubResource(String subResourceName, MultivaluedMap<String, String> queryParams,
+ Class<T> responseClass) {
+ return fetchResource(resource.path(subResourceName), queryParams, responseClass);
+ }
+
+ private ClientResponse postRequest(WebResource resource, Form form) {
+ try {
+ ClientResponse response = prepareFormRequestBuilder(resource).post(ClientResponse.class, form);
+ checkResponseStatus(response);
+ return response;
+ } catch (UniformInterfaceException e) {
+ throw new GlusterRuntimeException(e.getResponse().getEntity(String.class));
+ }
+ }
+
+ /**
+ * Submits given object to the resource and returns the object received as response
+ *
+ * @param responseClass
+ * Class of the object expected as response
+ * @param requestObject
+ * the Object to be submitted
+ * @return Object of given class received as response
+ */
+ 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);
+ }
+
+ /**
+ * Submits given Form using POST method to the resource and returns the object received as response
+ *
+ * @param form
+ * Form to be submitted
+ */
+ protected URI postRequest(Form form) {
+ return postRequest(resource, form).getLocation();
+ }
+
+ /**
+ * Submits given Form using POST method to the given sub-resource and returns the object received as response
+ *
+ * @param subResourceName
+ * Name of the sub-resource to which the request is to be posted
+ * @param form
+ * Form to be submitted
+ */
+ protected void postRequest(String subResourceName, Form form) {
+ postRequest(resource.path(subResourceName), form);
+ }
+
+ private ClientResponse putRequest(WebResource resource, Form form) {
+ try {
+ ClientResponse response = prepareFormRequestBuilder(resource).put(ClientResponse.class, form);
+ checkResponseStatus(response);
+ return response;
+ } catch (Exception e) {
+ throw createGlusterException(e);
+ }
+ }
+
+ private void checkResponseStatus(ClientResponse response) {
+ if ((response.getStatus() == Response.Status.UNAUTHORIZED.getStatusCode())) {
+ // authentication failed. clear security token.
+ setSecurityToken(null);
+ throw new GlusterRuntimeException("Invalid credentials!");
+ }
+ if (response.getStatus() >= 300) {
+ throw new GlusterRuntimeException(response.getEntity(String.class));
+ }
+ }
+
+ public Builder prepareFormRequestBuilder(WebResource resource) {
+ return resource.type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).header(HTTP_HEADER_AUTH, authHeader)
+ .accept(MediaType.APPLICATION_XML);
+ }
+
+ /**
+ * Submits given Form using PUT method to the given sub-resource and returns the object received as response
+ *
+ * @param subResourceName
+ * Name of the sub-resource to which the request is to be posted
+ * @param form
+ * Form to be submitted
+ */
+ protected void putRequest(String subResourceName, Form form) {
+ putRequest(resource.path(subResourceName), form);
+ }
+
+ protected URI putRequestURI(String subResourceName, Form form) {
+ ClientResponse response = putRequest(resource.path(subResourceName), form);
+ return response.getLocation();
+ }
+
+ /**
+ * Submits given Form using PUT method to the given sub-resource and returns the object received as response
+ *
+ * @param form
+ * Form to be submitted
+ */
+ protected void putRequest(Form form) {
+ putRequest(resource, form);
+ }
+
+ /**
+ * Submits given Form using PUT method to the given sub-resource and returns the object received as response
+ *
+ * @param subResourceName
+ * Name of the sub-resource to which the request is to be posted
+ */
+ protected void putRequest(String subResourceName) {
+ try {
+ prepareFormRequestBuilder(resource.path(subResourceName)).put();
+ } catch (UniformInterfaceException e) {
+ throw new GlusterRuntimeException(e.getResponse().getEntity(String.class));
+ }
+ }
+
+ private void deleteResource(WebResource resource, MultivaluedMap<String, String> queryParams) {
+ try {
+ resource.queryParams(queryParams).header(HTTP_HEADER_AUTH, authHeader).delete();
+ } catch (UniformInterfaceException e) {
+ throw new GlusterRuntimeException(e.getResponse().getEntity(String.class));
+ }
+ }
+
+ protected void deleteResource(MultivaluedMap<String, String> queryParams) {
+ deleteResource(resource, queryParams);
+ }
+
+ protected void deleteSubResource(String subResourceName, MultivaluedMap<String, String> queryParams) {
+ deleteResource(resource.path(subResourceName), queryParams);
+ }
+
+ protected void deleteSubResource(String subResourceName) {
+ try {
+ resource.path(subResourceName).header(HTTP_HEADER_AUTH, authHeader).delete();
+ } catch (UniformInterfaceException e) {
+ throw new GlusterRuntimeException(e.getResponse().getEntity(String.class));
+ }
+ }
+
+ public abstract String getResourcePath();
+
+ /**
+ * @return the securityToken
+ */
+ protected String getSecurityToken() {
+ return securityToken;
+ }
+
+ /**
+ * @param securityToken
+ * the securityToken to set
+ */
+ protected void setSecurityToken(String securityToken) {
+ AbstractClient.securityToken = securityToken;
+ authHeader = "Basic " + securityToken;
+ }
+
+ /**
+ * @param uri
+ * The URI to be fetched using GET API
+ * @param responseClass
+ * Expected type of response object
+ * @return Object of the given class
+ */
+ protected <T> T fetchResource(URI uri, Class<T> responseClass) {
+ return fetchResource(client.resource(uri), NO_PARAMS, responseClass);
+ }
+}
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/ClustersClient.java b/src/org.gluster.storage.management.client/src/org/gluster/storage/management/client/ClustersClient.java
index d6bf962a..fc012dc3 100644
--- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/ClustersClient.java
+++ b/src/org.gluster.storage.management.client/src/org/gluster/storage/management/client/ClustersClient.java
@@ -1,30 +1,31 @@
/*******************************************************************************
- * Copyright (c) 2011 Gluster, Inc. <http://www.gluster.com>
+ * Copyright (c) 2006-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
+ * Gluster Management Console is free software; you can redistribute
+ * it and/or modify it under the terms of the GNU 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see
* <http://www.gnu.org/licenses/>.
*******************************************************************************/
-package com.gluster.storage.management.client;
+package org.gluster.storage.management.client;
-import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_CLUSTER_NAME;
-import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_SERVER_NAME;
-import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_PATH_CLUSTERS;
+import static org.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_CLUSTER_NAME;
+import static org.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_SERVER_NAME;
+import static org.gluster.storage.management.core.constants.RESTConstants.RESOURCE_PATH_CLUSTERS;
import java.util.List;
-import com.gluster.storage.management.core.response.ClusterNameListResponse;
+import org.gluster.storage.management.core.response.ClusterNameListResponse;
+
import com.sun.jersey.api.representation.Form;
/**
@@ -41,7 +42,7 @@ public class ClustersClient extends AbstractClient {
}
/* (non-Javadoc)
- * @see com.gluster.storage.management.client.AbstractClient#getResourcePath()
+ * @see org.gluster.storage.management.client.AbstractClient#getResourcePath()
*/
@Override
public String getResourcePath() {
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/DiscoveredServersClient.java b/src/org.gluster.storage.management.client/src/org/gluster/storage/management/client/DiscoveredServersClient.java
index e1b8f234..44c93b72 100644
--- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/DiscoveredServersClient.java
+++ b/src/org.gluster.storage.management.client/src/org/gluster/storage/management/client/DiscoveredServersClient.java
@@ -1,34 +1,35 @@
/*******************************************************************************
- * Copyright (c) 2011 Gluster, Inc. <http://www.gluster.com>
+ * Copyright (c) 2006-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
+ * Gluster Management Console is free software; you can redistribute
+ * it and/or modify it under the terms of the GNU 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see
* <http://www.gnu.org/licenses/>.
*******************************************************************************/
-package com.gluster.storage.management.client;
+package org.gluster.storage.management.client;
-import static com.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_DETAILS;
-import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_PATH_DISCOVERED_SERVERS;
+import static org.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_DETAILS;
+import static org.gluster.storage.management.core.constants.RESTConstants.RESOURCE_PATH_DISCOVERED_SERVERS;
import java.util.List;
import javax.ws.rs.core.MultivaluedMap;
-import com.gluster.storage.management.core.model.Server;
-import com.gluster.storage.management.core.response.ServerListResponse;
-import com.gluster.storage.management.core.response.ServerNameListResponse;
-import com.gluster.storage.management.core.utils.GlusterCoreUtil;
+import org.gluster.storage.management.core.model.Server;
+import org.gluster.storage.management.core.response.ServerListResponse;
+import org.gluster.storage.management.core.response.ServerNameListResponse;
+import org.gluster.storage.management.core.utils.GlusterCoreUtil;
+
import com.sun.jersey.core.util.MultivaluedMapImpl;
public class DiscoveredServersClient extends AbstractClient {
@@ -46,8 +47,7 @@ public class DiscoveredServersClient extends AbstractClient {
return RESOURCE_PATH_DISCOVERED_SERVERS;
}
- @SuppressWarnings("rawtypes")
- private Object getDiscoveredServers(Boolean details, Class responseClass) {
+ private <T> T getDiscoveredServers(Boolean details, Class<T> responseClass) {
MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();
queryParams.putSingle(QUERY_PARAM_DETAILS, details.toString());
return fetchResource(queryParams, responseClass);
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java b/src/org.gluster.storage.management.client/src/org/gluster/storage/management/client/GlusterServersClient.java
index 85c7d383..4827c1d5 100644
--- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java
+++ b/src/org.gluster.storage.management.client/src/org/gluster/storage/management/client/GlusterServersClient.java
@@ -1,36 +1,39 @@
/*******************************************************************************
-* Copyright (c) 2011 Gluster, Inc. <http://www.gluster.com>
+ * Copyright (c) 2006-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
+ * Gluster Management Console is free software; you can redistribute
+ * it and/or modify it under the terms of the GNU 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see
* <http://www.gnu.org/licenses/>.
*******************************************************************************/
-package com.gluster.storage.management.client;
+package org.gluster.storage.management.client;
-import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_PATH_CLUSTERS;
-import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_SERVERS;
+import static org.gluster.storage.management.core.constants.RESTConstants.QUERY_PARAM_DETAILS;
+import static org.gluster.storage.management.core.constants.RESTConstants.RESOURCE_PATH_CLUSTERS;
+import static org.gluster.storage.management.core.constants.RESTConstants.RESOURCE_SERVERS;
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.ServerStats;
-import com.gluster.storage.management.core.response.GlusterServerListResponse;
-import com.gluster.storage.management.core.utils.GlusterCoreUtil;
+import org.gluster.storage.management.core.constants.RESTConstants;
+import org.gluster.storage.management.core.model.GlusterServer;
+import org.gluster.storage.management.core.model.ServerStats;
+import org.gluster.storage.management.core.response.FsTypeListResponse;
+import org.gluster.storage.management.core.response.GlusterServerListResponse;
+import org.gluster.storage.management.core.utils.GlusterCoreUtil;
+
import com.sun.jersey.api.representation.Form;
import com.sun.jersey.core.util.MultivaluedMapImpl;
@@ -54,7 +57,9 @@ public class GlusterServersClient extends AbstractClient {
}
public List<GlusterServer> getServers() {
- List<GlusterServer> servers = ((GlusterServerListResponse) fetchResource(GlusterServerListResponse.class)).getServers();
+ MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();
+ queryParams.putSingle(QUERY_PARAM_DETAILS, "true");
+ List<GlusterServer> servers = ((GlusterServerListResponse) fetchResource(queryParams, GlusterServerListResponse.class)).getServers();
for(GlusterServer server : servers) {
GlusterCoreUtil.updateServerNameOnDevices(server);
}
@@ -67,15 +72,22 @@ public class GlusterServersClient extends AbstractClient {
return server;
}
- public void addServer(String serverName) {
+ public URI addServer(String serverName) {
Form form = new Form();
form.add(RESTConstants.FORM_PARAM_SERVER_NAME, serverName);
- postRequest(form);
+ return postRequest(form);
}
- public URI initializeDisk(String serverName, String diskName, String fsType) {
+ public List<String> getFSTypes(String serverName) {
+ FsTypeListResponse fsTypeListResponse = ((FsTypeListResponse) fetchSubResource(serverName + "/" + RESTConstants.RESOURCE_FSTYPES,
+ FsTypeListResponse.class));
+ return fsTypeListResponse.getFsTypes();
+ }
+
+ public URI initializeDisk(String serverName, String diskName, String fsType, String mountPoint) {
Form form = new Form();
form.add(RESTConstants.FORM_PARAM_FSTYPE, fsType);
+ form.add(RESTConstants.FORM_PARAM_MOUNTPOINT, mountPoint);
return putRequestURI(serverName + "/" + RESTConstants.RESOURCE_DISKS + "/" + diskName, form);
}
@@ -118,4 +130,10 @@ public class GlusterServersClient extends AbstractClient {
queryParams.add(RESTConstants.QUERY_PARAM_PERIOD, period);
return fetchSubResource(RESTConstants.RESOURCE_STATISTICS, queryParams, ServerStats.class);
}
+
+ public GlusterServer getGlusterServer(URI uri) {
+ GlusterServer server = fetchResource(uri, GlusterServer.class);
+ GlusterCoreUtil.updateServerNameOnDevices(server);
+ return server;
+ }
}
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/KeysClient.java b/src/org.gluster.storage.management.client/src/org/gluster/storage/management/client/KeysClient.java
index 51fda466..feb24241 100644
--- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/KeysClient.java
+++ b/src/org.gluster.storage.management.client/src/org/gluster/storage/management/client/KeysClient.java
@@ -1,31 +1,30 @@
-/**
- * KeysClient.java
- *
- * Copyright (c) 2011 Gluster, Inc. <http://www.gluster.com>
+/*******************************************************************************
+ * Copyright (c) 2006-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 free software; you can redistribute
+ * it and/or modify it under the terms of the GNU 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.
+ * 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 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
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see
* <http://www.gnu.org/licenses/>.
- */
-package com.gluster.storage.management.client;
+ *******************************************************************************/
+package org.gluster.storage.management.client;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import javax.ws.rs.core.MediaType;
-import com.gluster.storage.management.core.constants.RESTConstants;
+import org.gluster.storage.management.core.constants.RESTConstants;
+
import com.sun.jersey.multipart.FormDataMultiPart;
public class KeysClient extends AbstractClient {
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/TasksClient.java b/src/org.gluster.storage.management.client/src/org/gluster/storage/management/client/TasksClient.java
index 46077371..d8005cfc 100644
--- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/TasksClient.java
+++ b/src/org.gluster.storage.management.client/src/org/gluster/storage/management/client/TasksClient.java
@@ -1,33 +1,32 @@
-/**
- * tasksClient.java
- *
- * Copyright (c) 2011 Gluster, Inc. <http://www.gluster.com>
+/*******************************************************************************
+ * Copyright (c) 2006-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 free software; you can redistribute
+ * it and/or modify it under the terms of the GNU 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.
+ * 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 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
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see
* <http://www.gnu.org/licenses/>.
- */
-package com.gluster.storage.management.client;
+ *******************************************************************************/
+package org.gluster.storage.management.client;
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.TaskInfo;
-import com.gluster.storage.management.core.response.TaskInfoListResponse;
+import org.gluster.storage.management.core.constants.RESTConstants;
+import org.gluster.storage.management.core.model.TaskInfo;
+import org.gluster.storage.management.core.response.TaskInfoListResponse;
+
import com.sun.jersey.api.representation.Form;
import com.sun.jersey.core.util.MultivaluedMapImpl;
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/UsersClient.java b/src/org.gluster.storage.management.client/src/org/gluster/storage/management/client/UsersClient.java
index 6722708b..cc82a5e8 100644
--- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/UsersClient.java
+++ b/src/org.gluster.storage.management.client/src/org/gluster/storage/management/client/UsersClient.java
@@ -1,33 +1,35 @@
/*******************************************************************************
- * Copyright (c) 2011 Gluster, Inc. <http://www.gluster.com>
+ * Copyright (c) 2006-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
+ * Gluster Management Console is free software; you can redistribute
+ * it and/or modify it under the terms of the GNU 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see
* <http://www.gnu.org/licenses/>.
*******************************************************************************/
-package com.gluster.storage.management.client;
+package org.gluster.storage.management.client;
+
+import static org.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_NEW_PASSWORD;
+import static org.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_OLD_PASSWORD;
+
+import org.gluster.storage.management.core.constants.RESTConstants;
+import org.gluster.storage.management.core.exceptions.GlusterRuntimeException;
+import org.gluster.storage.management.core.model.Status;
-import com.gluster.storage.management.core.model.Status;
import com.sun.jersey.api.representation.Form;
import com.sun.jersey.core.util.Base64;
public class UsersClient extends AbstractClient {
- private static final String RESOURCE_NAME = "users";
- private static final String FORM_PARAM_OLD_PASSWORD = "oldpassword";
- private static final String FORM_PARAM_NEW_PASSWORD = "newpassword";
-
private String generateSecurityToken(String user, String password) {
return new String(Base64.encode(user + ":" + password));
}
@@ -42,7 +44,11 @@ public class UsersClient extends AbstractClient {
}
public void changePassword(String user, String oldPassword, String newPassword) {
- setSecurityToken(generateSecurityToken(user, oldPassword));
+ String oldSecurityToken = getSecurityToken();
+ String newSecurityToken = generateSecurityToken(user, oldPassword);
+ if(!oldSecurityToken.equals(newSecurityToken)) {
+ throw new GlusterRuntimeException("Invalid old password!");
+ }
Form form = new Form();
form.add(FORM_PARAM_OLD_PASSWORD, oldPassword);
@@ -72,17 +78,17 @@ public class UsersClient extends AbstractClient {
/*
* (non-Javadoc)
*
- * @see com.gluster.storage.management.client.AbstractClient#getResourceName()
+ * @see org.gluster.storage.management.client.AbstractClient#getResourceName()
*/
@Override
public String getResourcePath() {
- return RESOURCE_NAME;
+ return RESTConstants.RESOURCE_USERS;
}
/*
* (non-Javadoc)
*
- * @see com.gluster.storage.management.client.AbstractClient#getSecurityToken()
+ * @see org.gluster.storage.management.client.AbstractClient#getSecurityToken()
*/
@Override
public String getSecurityToken() {
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java b/src/org.gluster.storage.management.client/src/org/gluster/storage/management/client/VolumesClient.java
index fb254d26..442f61f6 100644
--- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/VolumesClient.java
+++ b/src/org.gluster.storage.management.client/src/org/gluster/storage/management/client/VolumesClient.java
@@ -1,35 +1,32 @@
-/**
- * VolumesClient.java
- *
- * Copyright (c) 2011 Gluster, Inc. <http://www.gluster.com>
+/*******************************************************************************
+ * Copyright (c) 2006-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 free software; you can redistribute
+ * it and/or modify it under the terms of the GNU 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.
+ * 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 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
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see
* <http://www.gnu.org/licenses/>.
- */
-package com.gluster.storage.management.client;
+ *******************************************************************************/
+package org.gluster.storage.management.client;
-import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_ACCESS_PROTOCOLS;
-import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_BRICKS;
-import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_CIFS_ENABLE;
-import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_CIFS_USERS;
-import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_REPLICA_COUNT;
-import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_STRIPE_COUNT;
-import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_TRANSPORT_TYPE;
-import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_VOLUME_NAME;
-import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_VOLUME_OPTIONS;
-import static com.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_VOLUME_TYPE;
+import static org.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_ACCESS_PROTOCOLS;
+import static org.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_BRICKS;
+import static org.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_CIFS_USERS;
+import static org.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_REPLICA_COUNT;
+import static org.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_STRIPE_COUNT;
+import static org.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_TRANSPORT_TYPE;
+import static org.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_VOLUME_NAME;
+import static org.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_VOLUME_OPTIONS;
+import static org.gluster.storage.management.core.constants.RESTConstants.FORM_PARAM_VOLUME_TYPE;
import java.net.URI;
import java.util.Date;
@@ -38,19 +35,20 @@ import java.util.Set;
import javax.ws.rs.core.MultivaluedMap;
-import com.gluster.storage.management.core.constants.CoreConstants;
-import com.gluster.storage.management.core.constants.GlusterConstants;
-import com.gluster.storage.management.core.constants.RESTConstants;
-import com.gluster.storage.management.core.model.Brick;
-import com.gluster.storage.management.core.model.Volume;
-import com.gluster.storage.management.core.model.VolumeLogMessage;
-import com.gluster.storage.management.core.model.VolumeOptionInfo;
-import com.gluster.storage.management.core.response.LogMessageListResponse;
-import com.gluster.storage.management.core.response.VolumeListResponse;
-import com.gluster.storage.management.core.response.VolumeOptionInfoListResponse;
-import com.gluster.storage.management.core.utils.DateUtil;
-import com.gluster.storage.management.core.utils.GlusterCoreUtil;
-import com.gluster.storage.management.core.utils.StringUtil;
+import org.gluster.storage.management.core.constants.CoreConstants;
+import org.gluster.storage.management.core.constants.GlusterConstants;
+import org.gluster.storage.management.core.constants.RESTConstants;
+import org.gluster.storage.management.core.model.Brick;
+import org.gluster.storage.management.core.model.Volume;
+import org.gluster.storage.management.core.model.VolumeLogMessage;
+import org.gluster.storage.management.core.model.VolumeOptionInfo;
+import org.gluster.storage.management.core.response.LogMessageListResponse;
+import org.gluster.storage.management.core.response.VolumeListResponse;
+import org.gluster.storage.management.core.response.VolumeOptionInfoListResponse;
+import org.gluster.storage.management.core.utils.DateUtil;
+import org.gluster.storage.management.core.utils.GlusterCoreUtil;
+import org.gluster.storage.management.core.utils.StringUtil;
+
import com.sun.jersey.api.representation.Form;
import com.sun.jersey.core.util.MultivaluedMapImpl;
@@ -82,28 +80,31 @@ public class VolumesClient extends AbstractClient {
form.add(FORM_PARAM_BRICKS, StringUtil.collectionToString(volume.getBricks(), ","));
form.add(FORM_PARAM_ACCESS_PROTOCOLS, StringUtil.collectionToString(volume.getNASProtocols(), ","));
form.add(FORM_PARAM_VOLUME_OPTIONS, StringUtil.collectionToString(volume.getOptions().getOptions(), ","));
- form.add(FORM_PARAM_CIFS_USERS, StringUtil.collectionToString(volume.getCifsUsers(), ","));
+ if (volume.isCifsEnable()) {
+ form.add(FORM_PARAM_CIFS_USERS, StringUtil.collectionToString(volume.getCifsUsers(), ","));
+ }
postRequest(form);
}
- private void performOperation(String volumeName, String operation) {
+ private void performOperation(String volumeName, String operation, Boolean force) {
Form form = new Form();
form.add(RESTConstants.FORM_PARAM_OPERATION, operation);
+ form.add(RESTConstants.FORM_PARAM_FORCE, force);
putRequest(volumeName, form);
}
- public void startVolume(String volumeName) {
- performOperation(volumeName, RESTConstants.TASK_START);
+ public void startVolume(String volumeName, Boolean forceStart) {
+ performOperation(volumeName, RESTConstants.TASK_START, forceStart);
}
- public void stopVolume(String volumeName) {
- performOperation(volumeName, RESTConstants.TASK_STOP);
+ public void stopVolume(String volumeName, Boolean forceStop) {
+ performOperation(volumeName, RESTConstants.TASK_STOP, forceStop);
}
public void setCifsConfig(String volumeName, Boolean isCifsEnabled, String cifsUsers) {
Form form = new Form();
- form.add(RESTConstants.FORM_PARAM_OPERATION, RESTConstants.TASK_CIFS_CONFIG);
+ form.add(RESTConstants.FORM_PARAM_OPERATION, RESTConstants.FORM_PARAM_CIFS_CONFIG);
form.add(RESTConstants.FORM_PARAM_CIFS_ENABLE, isCifsEnabled);
form.add(RESTConstants.FORM_PARAM_CIFS_USERS, cifsUsers);
putRequest(volumeName, form);
@@ -139,12 +140,12 @@ public class VolumesClient extends AbstractClient {
return (Volume)fetchSubResource(volumeName, Volume.class);
}
- public void deleteVolume(Volume volume, boolean deleteOption) {
+ public void deleteVolume(String volumeName, boolean deleteOption) {
MultivaluedMap<String, String> queryParams = prepareDeleteVolumeQueryParams(deleteOption);
- deleteSubResource(volume.getName(), queryParams);
+ deleteSubResource(volumeName, queryParams);
}
- public List<VolumeOptionInfo> getVolumeOptionsDefaults() {
+ public List<VolumeOptionInfo> getVolumeOptionsInfo() {
return ((VolumeOptionInfoListResponse) fetchSubResource(RESTConstants.RESOURCE_DEFAULT_OPTIONS,
VolumeOptionInfoListResponse.class)).getOptions();
}
@@ -257,6 +258,14 @@ public class VolumesClient extends AbstractClient {
putRequest(volumeName, form);
}
+ public void volumeLogRotate(String volumeName, List<String> brickList) {
+ Form form = new Form();
+ String bricks = StringUtil.collectionToString(brickList, ",");
+ form.add(RESTConstants.FORM_PARAM_OPERATION, RESTConstants.TASK_LOG_ROTATE);
+ form.add(FORM_PARAM_BRICKS, bricks);
+ putRequest(volumeName, form);
+ }
+
public static void main(String[] args) {
UsersClient usersClient = new UsersClient();
try {
diff --git a/src/org.gluster.storage.management.client/src/org/gluster/storage/management/client/constants/ClientConstants.java b/src/org.gluster.storage.management.client/src/org/gluster/storage/management/client/constants/ClientConstants.java
new file mode 100644
index 00000000..c2dd1890
--- /dev/null
+++ b/src/org.gluster.storage.management.client/src/org/gluster/storage/management/client/constants/ClientConstants.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2006-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 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *******************************************************************************/
+package org.gluster.storage.management.client.constants;
+
+/**
+ *
+ */
+public class ClientConstants {
+ public static final String SYS_PROP_SERVER_URL = "gluster.server.url";
+ public static final String DEFAULT_SERVER_URL = "https://localhost:8443/glustermg/linux.gtk.x86_64";
+ public static final String CONTEXT_ROOT = "glustermg";
+ public static final String SYS_PROP_API_VERSION = "gluster.api.version";
+ public static final String DEFAULT_API_VERSION = "@VERSION@";
+
+ // SSL related
+ public static final String TRUSTED_KEYSTORE = "gmc-trusted.keystore";
+ public static final String TRUSTED_KEYSTORE_ACCESS = "gluster";
+ public static final String PROTOCOL_TLS = "TLS";
+ public static final String ALGORITHM_SUNX509 = "SunX509";
+ public static final String KEYSTORE_TYPE_JKS = "JKS";
+}
+
diff --git a/src/org.gluster.storage.management.client/src/org/gluster/storage/management/client/utils/ClientUtil.java b/src/org.gluster.storage.management.client/src/org/gluster/storage/management/client/utils/ClientUtil.java
new file mode 100644
index 00000000..a4d665f9
--- /dev/null
+++ b/src/org.gluster.storage.management.client/src/org/gluster/storage/management/client/utils/ClientUtil.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2006-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 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *******************************************************************************/
+package org.gluster.storage.management.client.utils;
+
+import java.net.URI;
+
+import javax.ws.rs.core.UriBuilder;
+
+import org.gluster.storage.management.client.constants.ClientConstants;
+
+
+public class ClientUtil {
+
+ public static URI getServerBaseURI() {
+ return UriBuilder.fromUri(getBaseURL()).path(getAPIVersion()).build();
+ }
+
+ private static String getAPIVersion() {
+ return System.getProperty(ClientConstants.SYS_PROP_API_VERSION, ClientConstants.DEFAULT_API_VERSION);
+ }
+
+ private static String getBaseURL() {
+ // remove the platform path (e.g. /linux.gtk.x86_64) from the URL
+ return System.getProperty(ClientConstants.SYS_PROP_SERVER_URL, ClientConstants.DEFAULT_SERVER_URL)
+ .replaceAll(ClientConstants.CONTEXT_ROOT + "\\/.*", ClientConstants.CONTEXT_ROOT + "\\/");
+ }
+}
diff --git a/src/com.gluster.storage.management.gui.feature.webstart/.project b/src/org.gluster.storage.management.console.feature.webstart/.project
index 03adbe4c..f306a1c9 100644
--- a/src/com.gluster.storage.management.gui.feature.webstart/.project
+++ b/src/org.gluster.storage.management.console.feature.webstart/.project
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
- <name>com.gluster.storage.management.gui.feature.webstart</name>
+ <name>org.gluster.storage.management.console.feature.webstart</name>
<comment></comment>
<projects>
</projects>
diff --git a/src/com.gluster.storage.management.gui.feature.webstart/buckminster.cspex b/src/org.gluster.storage.management.console.feature.webstart/buckminster.cspex
index 252a5e15..7a7a9b95 100644
--- a/src/com.gluster.storage.management.gui.feature.webstart/buckminster.cspex
+++ b/src/org.gluster.storage.management.console.feature.webstart/buckminster.cspex
@@ -37,5 +37,11 @@
<property key="targets" value="copy.root.files" />
</actorProperties>
</public>
+ <public name="update.version" actor="ant">
+ <actorProperties>
+ <property key="buildFile" value="build/glustermc.ant" />
+ <property key="targets" value="update.version" />
+ </actorProperties>
+ </public>
</actions>
</cspecExtension>
diff --git a/src/org.gluster.storage.management.console.feature.webstart/build.properties b/src/org.gluster.storage.management.console.feature.webstart/build.properties
new file mode 100644
index 00000000..44f026e3
--- /dev/null
+++ b/src/org.gluster.storage.management.console.feature.webstart/build.properties
@@ -0,0 +1,20 @@
+###############################################################################
+# Copyright (c) 2006-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 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see
+# <http://www.gnu.org/licenses/>.
+###############################################################################
+#bin.includes = feature.xml
+root=rootfiles
diff --git a/src/com.gluster.storage.management.gui.feature.webstart/build/glustermc.ant b/src/org.gluster.storage.management.console.feature.webstart/build/glustermc.ant
index 6b0152f6..a1dc0c66 100644
--- a/src/com.gluster.storage.management.gui.feature.webstart/build/glustermc.ant
+++ b/src/org.gluster.storage.management.console.feature.webstart/build/glustermc.ant
@@ -1,5 +1,7 @@
<project>
<property name="export.dir" value="${buckminster.output}/glustermc/" />
+ <property name="jnlp.file" value="${export.dir}/gluster-management-console.jnlp" />
+
<target name='unsign'>
<buckminster.signatureCleaner>
<fileset dir='${export.dir}/plugins'>
@@ -12,7 +14,7 @@
</target>
<target name="sign">
- <signjar alias="gluster" storepass="gluster" keypass="gluster" keystore="/var/lib/jenkins/gmc/gluster.keystore">
+ <signjar alias="gluster" storepass="gluster" keypass="gluster" keystore="${jar.signing.keystore}">
<fileset dir="${export.dir}/plugins">
<include name="*.jar" />
</fileset>
@@ -27,4 +29,17 @@
<fileset dir="${basedir}/rootfiles" />
</copy>
</target>
+
+ <target name='update.version'>
+ <replace file="${jnlp.file}" token="@VERSION@" value="${product.version}" />
+ <move todir="${export.dir}">
+ <fileset dir="${export.dir}" />
+ <mapper>
+ <mapper type="regexp"
+ from="org.gluster.storage.management.console.feature_.*.jnlp"
+ to="org.gluster.storage.management.console.feature_${product.version}.jnlp" />
+ </mapper>
+ </move>
+ </target>
+
</project>
diff --git a/src/com.gluster.storage.management.gui.feature.webstart/feature.xml b/src/org.gluster.storage.management.console.feature.webstart/feature.xml
index 0c7142fe..beab8637 100644
--- a/src/com.gluster.storage.management.gui.feature.webstart/feature.xml
+++ b/src/org.gluster.storage.management.console.feature.webstart/feature.xml
@@ -1,9 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2006-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 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see
+ <http://www.gnu.org/licenses/>.
+ -->
<feature
- id="com.gluster.storage.management.gui.feature.webstart"
- label="Gluster Management Console - GUI Feature for Webstart"
- version="1.0.0"
- provider-name="Gluster Inc."
+ id="org.gluster.storage.management.console.feature.webstart"
+ label="Gluster Management Console - Webstart"
+ version="1.0.0.qualifier"
+ provider-name="Gluster"
os="linux,macosx,win32"
ws="cocoa,gtk,win32"
arch="x86,x86_64,amd64">
@@ -21,7 +39,7 @@
</license>
<includes
- id="com.gluster.storage.management.gui.feature"
+ id="org.gluster.storage.management.console.feature"
version="0.0.0"/>
<requires>
@@ -50,12 +68,12 @@
<import plugin="org.eclipse.jface.databinding" version="1.3.0" match="compatible"/>
<import plugin="org.eclipse.core.databinding.property" version="1.2.0" match="compatible"/>
<import plugin="org.eclipse.core.databinding.observable" version="1.2.0" match="compatible"/>
- <import plugin="org.eclipse.osgi" version="3.5.0" match="compatible"/>
<import plugin="org.eclipse.equinox.common" version="3.5.0" match="compatible"/>
<import plugin="org.eclipse.core.jobs" version="3.2.0" match="compatible"/>
- <import plugin="org.eclipse.equinox.preferences" version="3.3.0" match="compatible"/>
<import plugin="org.eclipse.core.contenttype" version="3.3.0" match="compatible"/>
- <import plugin="org.eclipse.equinox.app" version="1.0.0" match="compatible"/>
+ <import plugin="org.eclipse.osgi" version="3.7.0" match="compatible"/>
+ <import plugin="org.eclipse.equinox.preferences" version="3.4.0" match="compatible"/>
+ <import plugin="org.eclipse.equinox.app" version="1.0.0" match="greaterOrEqual"/>
</requires>
<plugin
diff --git a/src/com.gluster.storage.management.gui.feature.webstart/rootfiles/gluster-management-console.jnlp b/src/org.gluster.storage.management.console.feature.webstart/rootfiles/gluster-management-console.jnlp
index 597adf4c..b5417bb8 100644
--- a/src/com.gluster.storage.management.gui.feature.webstart/rootfiles/gluster-management-console.jnlp
+++ b/src/org.gluster.storage.management.console.feature.webstart/rootfiles/gluster-management-console.jnlp
@@ -5,7 +5,7 @@
<vendor>Gluster Inc.</vendor>
<homepage href="$$codebase" />
<description>Gluster Management Console</description>
- <icon kind="splash" href="splash.jpg"/>
+ <icon kind="splash" href="splash.png"/>
<shortcut online="true">
<desktop/>
@@ -16,11 +16,11 @@
<all-permissions/>
</security>
<resources>
- <j2se java-vm-args="-XstartOnFirstThread" version="1.5+" />
- <jar href="plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar" main="true"/>
+ <j2se java-vm-args="-XstartOnFirstThread" version="1.6+" />
+ <jar href="plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar" main="true"/>
<extension
name="Gluster Management Console"
- href="com.gluster.storage.management.gui.feature_1.0.0.jnlp"/>
+ href="org.gluster.storage.management.console.feature_@VERSION@.jnlp"/>
<property
name="osgi.instance.area"
value="@user.home/Application Data/glustermc"/>
@@ -29,15 +29,19 @@
value="@user.home/Application Data/glustermc"/>
<property
name="eclipse.product"
- value="com.gluster.storage.management.gui.product"/>
+ value="org.gluster.storage.management.console.product"/>
<property
name="gluster.server.url"
value="$$codebase"/>
+ <property
+ name="gluster.api.version"
+ value="@VERSION@"/>
+ <property
+ name="javaws.cfg.jauthenticator"
+ value="true"/>
</resources>
<resources os="Linux">
<property name="osgi.ws" value="gtk"/>
</resources>
- <application-desc main-class="org.eclipse.equinox.launcher.WebStartMain">
- <argument>-nosplash</argument>
- </application-desc>
-</jnlp> \ No newline at end of file
+ <application-desc main-class="org.eclipse.equinox.launcher.WebStartMain" />
+</jnlp>
diff --git a/src/org.gluster.storage.management.console.feature.webstart/rootfiles/splash.png b/src/org.gluster.storage.management.console.feature.webstart/rootfiles/splash.png
new file mode 100644
index 00000000..74983f8a
--- /dev/null
+++ b/src/org.gluster.storage.management.console.feature.webstart/rootfiles/splash.png
Binary files differ
diff --git a/src/com.gluster.storage.management.releng/.project b/src/org.gluster.storage.management.console.feature/.project
index f4723731..a4a4a321 100644
--- a/src/com.gluster.storage.management.releng/.project
+++ b/src/org.gluster.storage.management.console.feature/.project
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
- <name>com.gluster.storage.management.releng</name>
+ <name>org.gluster.storage.management.console.feature</name>
<comment></comment>
<projects>
</projects>
diff --git a/src/org.gluster.storage.management.console.feature/build.properties b/src/org.gluster.storage.management.console.feature/build.properties
new file mode 100644
index 00000000..66f4d625
--- /dev/null
+++ b/src/org.gluster.storage.management.console.feature/build.properties
@@ -0,0 +1,19 @@
+###############################################################################
+# Copyright (c) 2006-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 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see
+# <http://www.gnu.org/licenses/>.
+###############################################################################
+bin.includes = feature.xml
diff --git a/src/com.gluster.storage.management.gui.feature/feature.xml b/src/org.gluster.storage.management.console.feature/feature.xml
index 7f526f72..473b1947 100644
--- a/src/com.gluster.storage.management.gui.feature/feature.xml
+++ b/src/org.gluster.storage.management.console.feature/feature.xml
@@ -1,9 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2006-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 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see
+ <http://www.gnu.org/licenses/>.
+ -->
<feature
- id="com.gluster.storage.management.gui.feature"
- label="Gluster Storage Platform - GUI Feature"
- version="1.0.0"
- provider-name="GLUSTER"
+ id="org.gluster.storage.management.console.feature"
+ label="Gluster Management Console"
+ version="1.0.0.qualifier"
+ provider-name="Gluster"
os="linux,macosx,win32"
ws="cocoa,gtk,win32"
arch="x86,x86_64,amd64">
@@ -108,13 +126,6 @@
unpack="false"/>
<plugin
- id="org.eclipse.help"
- download-size="0"
- install-size="0"
- version="0.0.0"
- unpack="false"/>
-
- <plugin
id="org.eclipse.equinox.p2.metadata"
download-size="0"
install-size="0"
@@ -225,7 +236,7 @@
unpack="false"/>
<plugin
- id="com.gluster.storage.management.gui"
+ id="org.gluster.storage.management.console"
download-size="0"
install-size="0"
version="0.0.0"
@@ -492,7 +503,7 @@
<plugin
id="org.eclipse.core.filesystem.win32.x86"
- os="win32"
+ os="Windows XP, Windows 7, Windows Vista"
ws="win32"
arch="x86"
download-size="0"
@@ -503,7 +514,7 @@
<plugin
id="org.eclipse.core.filesystem.win32.x86_64"
- os="win32"
+ os="Windows XP, Windows 7, Windows Vista"
ws="win32"
arch="x86_64, amd64"
download-size="0"
@@ -525,7 +536,7 @@
<plugin
id="org.eclipse.core.net.win32.x86"
- os="win32"
+ os="Windows XP, Windows 7, Windows Vista"
ws="win32"
arch="x86"
download-size="0"
@@ -536,7 +547,7 @@
<plugin
id="org.eclipse.core.net.win32.x86_64"
- os="win32"
+ os="Windows XP, Windows 7, Windows Vista"
ws="win32"
arch="x86_64, amd64"
download-size="0"
@@ -567,7 +578,7 @@
<plugin
id="org.eclipse.swt.win32.win32.x86"
- os="win32"
+ os="Windows XP, Windows 7, Windows Vista"
ws="win32"
arch="x86"
download-size="0"
@@ -578,7 +589,7 @@
<plugin
id="org.eclipse.swt.win32.win32.x86_64"
- os="win32"
+ os="Windows XP, Windows 7, Windows Vista"
ws="win32"
arch="x86_64, amd64"
download-size="0"
@@ -609,7 +620,7 @@
<plugin
id="org.eclipse.equinox.launcher.win32.win32.x86"
- os="Windows XP, Windows 7"
+ os="Windows XP, Windows 7, Windows Vista"
ws="win32"
arch="x86"
download-size="0"
@@ -619,7 +630,7 @@
<plugin
id="org.eclipse.equinox.launcher.win32.win32.x86_64"
- os="win32"
+ os="Windows XP, Windows 7, Windows Vista"
ws="win32"
arch="x86_64, amd64"
download-size="0"
@@ -628,7 +639,7 @@
fragment="true"/>
<plugin
- id="com.gluster.storage.management.core"
+ id="org.gluster.storage.management.core"
download-size="0"
install-size="0"
version="0.0.0"
@@ -698,7 +709,7 @@
unpack="false"/>
<plugin
- id="com.gluster.storage.management.client"
+ id="org.gluster.storage.management.client"
download-size="0"
install-size="0"
version="0.0.0"
@@ -780,118 +791,167 @@
unpack="false"/>
<plugin
- id="com.gluster.storage.management.console.help"
+ id="org.gluster.storage.management.console.help"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
- id="org.eclipse.help.ui"
+ id="org.apache.lucene.analysis"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
- id="org.eclipse.help.webapp"
+ id="org.apache.lucene"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
- id="org.eclipse.help.base"
+ id="org.apache.commons.el"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
- id="org.apache.lucene.analysis"
+ id="org.apache.commons.logging"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
- id="org.apache.lucene"
+ id="org.apache.jasper"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
- id="org.apache.commons.el"
+ id="org.eclipse.equinox.http.registry"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
- id="org.apache.commons.logging"
+ id="org.eclipse.equinox.http.servlet"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
- id="org.apache.jasper"
+ id="org.eclipse.equinox.jsp.jasper"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
- id="org.eclipse.equinox.http.registry"
+ id="org.eclipse.equinox.jsp.jasper.registry"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
- id="org.eclipse.equinox.http.servlet"
+ id="javax.servlet.jsp"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
- id="org.eclipse.equinox.jsp.jasper"
+ id="org.eclipse.equinox.http.jetty"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
- id="org.eclipse.equinox.jsp.jasper.registry"
+ id="org.mortbay.jetty.server"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
- id="javax.servlet.jsp"
+ id="org.mortbay.jetty.util"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
- id="org.eclipse.equinox.http.jetty"
+ id="org.eclipse.tm.terminal"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
- id="org.mortbay.jetty.server"
+ id="org.eclipse.tm.terminal.ssh"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
- id="org.mortbay.jetty.util"
+ id="org.eclipse.tm.terminal.view"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="com.jcraft.jsch"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.jsch.core"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.apache.lucene.core"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.help"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.help.base"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.help.ui"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.help.webapp"
download-size="0"
install-size="0"
version="0.0.0"
diff --git a/src/com.gluster.storage.management.console.help/.project b/src/org.gluster.storage.management.console.help/.project
index ba39c551..51640e5e 100644
--- a/src/com.gluster.storage.management.console.help/.project
+++ b/src/org.gluster.storage.management.console.help/.project
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
- <name>com.gluster.storage.management.console.help</name>
+ <name>org.gluster.storage.management.console.help</name>
<comment></comment>
<projects>
</projects>
diff --git a/src/org.gluster.storage.management.console.help/.settings/org.eclipse.core.resources.prefs b/src/org.gluster.storage.management.console.help/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 00000000..970d49e2
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,8 @@
+#Tue Aug 23 12:38:58 IST 2011
+eclipse.preferences.version=1
+encoding//html/concepts/about_gmc.html=UTF-8
+encoding//html/concepts/common_terms.html=UTF-8
+encoding//html/concepts/gluster_fs.html=UTF-8
+encoding//html/gettingstarted/check_req_client.html=UTF-8
+encoding//html/gettingstarted/cifs_service.html=UTF-8
+encoding/build.properties=UTF-8
diff --git a/src/org.gluster.storage.management.console.help/.settings/org.eclipse.wst.css.core.prefs b/src/org.gluster.storage.management.console.help/.settings/org.eclipse.wst.css.core.prefs
new file mode 100644
index 00000000..d7503970
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/.settings/org.eclipse.wst.css.core.prefs
@@ -0,0 +1,4 @@
+#Tue Aug 09 14:50:25 IST 2011
+css-profile//html/concepts/about_gmc.html=org.eclipse.wst.css.core.cssprofile.css1
+css-profile//html/concepts/common_terms.html=org.eclipse.wst.css.core.cssprofile.css1
+eclipse.preferences.version=1
diff --git a/src/org.gluster.storage.management.console.help/META-INF/MANIFEST.MF b/src/org.gluster.storage.management.console.help/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..c86045d4
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/META-INF/MANIFEST.MF
@@ -0,0 +1,9 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Gluster Management Console - Help
+Bundle-SymbolicName: org.gluster.storage.management.console.help;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Vendor: Gluster
+Require-Bundle: org.eclipse.help.ui;bundle-version="3.5.2",
+ org.eclipse.help.webapp;bundle-version="3.5.2",
+ org.eclipse.help
diff --git a/src/org.gluster.storage.management.console.help/build.properties b/src/org.gluster.storage.management.console.help/build.properties
new file mode 100644
index 00000000..f4ce4012
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/build.properties
@@ -0,0 +1,26 @@
+###############################################################################
+# Copyright (c) 2006-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 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see
+# <http://www.gnu.org/licenses/>.
+###############################################################################
+bin.includes = plugin.xml,\
+ META-INF/,\
+ html/,\
+ toc.xml,\
+ tocconcepts.xml,\
+ tocgettingstarted.xml,\
+ toctasks.xml,\
+ tocreference.xml
diff --git a/src/org.gluster.storage.management.console.help/html/concepts/about_gmc.html b/src/org.gluster.storage.management.console.help/html/concepts/about_gmc.html
new file mode 100644
index 00000000..ef79927b
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/concepts/about_gmc.html
@@ -0,0 +1,21 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<link rel="stylesheet" href="../css/builder-gluster/style.css"
+type="text/css" media="screen" />
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Main Topic</title>
+</head>
+
+<body>
+<h1>About Gluster Management Console</h1>
+Gluster Management Console is a Java application that provides a single interface to perform the administrative tasks such as create, manage, and maintain your storage cluster. <p>You can use the Gluster Management Console to:</p>
+<ul>
+ <li>Create a Gluster Storage Cluster
+ <li>Expand your cluster
+ <li>Monitor systems in your cluster
+ <li>Manage logs
+</ul>
+ </body>
+</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/concepts/about_gmg.html b/src/org.gluster.storage.management.console.help/html/concepts/about_gmg.html
new file mode 100644
index 00000000..34f9c860
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/concepts/about_gmg.html
@@ -0,0 +1,16 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<link rel="stylesheet" href="../css/builder-gluster/style.css"
+type="text/css" media="screen" />
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <title>Main Topic</title>
+</head>
+
+<body>
+<h1>Gluster Management Gateway</h1>
+Gluster Management Gateway provides simple and powerful ReST APIs for managing your Gluster Storage Cluster. It also hosts the Gluster Management Console binaries, which can be launched from a browser using the Java Webstart. Gluster Management Console uses the ReST APIs for performing the administrative tasks on the Gluster Storage Cluster
+<p><p><img src="../images/GlusterMC_Architecture.jpg" alt="Gluster Management Gateway Architecture" />
+</body>
+</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/concepts/common_terms.html b/src/org.gluster.storage.management.console.help/html/concepts/common_terms.html
new file mode 100644
index 00000000..ccf6d218
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/concepts/common_terms.html
@@ -0,0 +1,50 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<link rel="stylesheet" href="../css/builder-gluster/style.css"
+type="text/css" media="screen" />
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Sub Topic 2</title>
+</head>
+
+<body>
+<h1>Common Cluster Terminologies</h1>
+<p><b>Cluster</b></p>
+<p>A cluster is a group of linked computers, working together closely thus in many respects forming a single computer.</p>
+<p><b>Brick</b>
+<p>Brick is the basic unit of storage, represented by an export directory on a server in the trusted storage pool.</p>
+<p><b>Network</b></p>
+<p>A network is a collection of interconnected computers able to
+communicate with each other and transfer information back and forth.</p>
+<p><b>Distributed File Systems</b></p>
+<p>A file system is a collection of files and the facilities
+(programs and commands) that enable users to access the information in
+the files. All computing environments have file systems. A distributed
+file system takes advantage of the interconnected nature of the network
+by storing files on more than one computer in the network and making
+them accessible to all of them. In other words, the responsibility for
+file storage and delivery is "distributed" among multiple machines
+instead of relying on only one.</p>
+<p><b>File Server Machines</b></p>
+<p>File server machines store the files in the distributed file
+system, and a server process running on the file server machine delivers
+and receives files.</p>
+<p><b>Volumes</b></p>
+<p>A volume is a conceptual container for a set of related files
+that keeps them all together on one file server machine partition.
+Volumes can vary in size, but are (by definition) smaller than a
+partition. You can maintain maximum system efficiency by moving volumes
+to keep the load balanced evenly among the different machines. If a
+partition becomes full, the small size of individual volumes makes it
+easy to find enough room on other machines for them. Each volume
+corresponds logically to a directory in the file tree and keeps
+together, on a single partition, all the data that makes up the files in
+the directory (including possible subdirectories). By maintaining (for
+example) a separate volume for each user's home directory, you keep all
+of the user's files together, but separate from those of other users.
+This is an administrative convenience that is impossible if the
+partition is the smallest unit of storage.</p>
+
+</body>
+</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/concepts/gluster_fs.html b/src/org.gluster.storage.management.console.help/html/concepts/gluster_fs.html
new file mode 100644
index 00000000..4efe5f36
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/concepts/gluster_fs.html
@@ -0,0 +1,19 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<link rel="stylesheet" href="../css/builder-gluster/style.css"
+type="text/css" media="screen" />
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Sub Topic</title>
+</head>
+
+<body>
+<h1>Introducing Gluster Filesystem (GlusterFS)</h1>
+GlusterFS is an open source, scale-out file system capable of scaling to several petabytes and handling thousands of clients. GlusterFS assembles storage building blocks, aggregating disk and memory resources and managing data in a single global namespace. GlusterFS is based on a stackable user space design and can deliver exceptional performance for diverse workloads<p>The GlusterFS modular architecture allows administrators to stack modules to match user requirements, as needed. For example, administrators can use GlusterFS to quickly configure a standalone server system and later expand the system as their business needs grow.</p>
+<p><b>Virtualized Cloud Environments </b></p>
+<p>GlusterFS is designed for today's high-performance, virtualized cloud environments. Unlike traditional data centers, cloud environments require multi-tenancy along with the ability to grow or shrink resources on demand. GlusterFS incorporates cloud capabilities into the core architecture.
+<p>Every module in GlusterFS is treated as a volume. GlusterFS further adds an elastic volume manager (the glusterd daemon) and a console manager (the gluster command line interface). Using the console manager, administrators can dynamically expand, shrink, rebalance, and migrate volumes, among other operations. The command line interface additionally provides an interactive shell (with auto-completion) along with scripting capabilities suitable for automation.</p>
+<p><img src="../images/GlusterFS_3.2_Architecture.png" alt="GlusterFS Architecture" />
+</body>
+</html> \ No newline at end of file
diff --git a/src/com.gluster.storage.management.console.help/html/concepts/maintopic.html b/src/org.gluster.storage.management.console.help/html/concepts/maintopic.html
index a476078a..a476078a 100644
--- a/src/com.gluster.storage.management.console.help/html/concepts/maintopic.html
+++ b/src/org.gluster.storage.management.console.help/html/concepts/maintopic.html
diff --git a/src/com.gluster.storage.management.console.help/html/concepts/subtopic.html b/src/org.gluster.storage.management.console.help/html/concepts/subtopic.html
index 8a61c501..8a61c501 100644
--- a/src/com.gluster.storage.management.console.help/html/concepts/subtopic.html
+++ b/src/org.gluster.storage.management.console.help/html/concepts/subtopic.html
diff --git a/src/com.gluster.storage.management.console.help/html/concepts/subtopic2.html b/src/org.gluster.storage.management.console.help/html/concepts/subtopic2.html
index 86bcbf9c..86bcbf9c 100644
--- a/src/com.gluster.storage.management.console.help/html/concepts/subtopic2.html
+++ b/src/org.gluster.storage.management.console.help/html/concepts/subtopic2.html
diff --git a/src/org.gluster.storage.management.console.help/html/css/Builder/style.css b/src/org.gluster.storage.management.console.help/html/css/Builder/style.css
new file mode 100644
index 00000000..39efe946
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/css/Builder/style.css
@@ -0,0 +1,939 @@
+/*
+Theme Name: Builder
+Theme URI: http://ithemes.com/
+Description: Builder lets you create custom layouts quickly and easily.
+Author: iThemes
+Author URI: http://ithemes.com/
+Version: 2.8.0
+Tags: blog, theme options, multiple layouts, multiple color schemes
+
+Version History
+ See history.txt
+*/
+
+/*********************************************
+ Default font settings and typography.
+ The font-size percentage is of 16px. (0.75 * 16px = 12px)
+*********************************************/
+html {
+ font-size: 100.01%;
+}
+body {
+ font-size: 75%;
+ line-height: 1.5;
+ color: #222222;
+ font-family: Arial, Helvetica, sans-serif;
+}
+input, select, textarea {
+ font-family: Arial, Helvetica, sans-serif;
+}
+pre, code, tt, kbd {
+ font-family: 'andale mono', 'lucida console', monospace;
+ font-size: 1em;
+ line-height: 1.5;
+}
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+address, dfn, img, samp, ul, ol, dl {
+ margin-top: 1.5em;
+ margin-bottom: 1.5em;
+}
+a img {
+ margin: 0;
+}
+
+/*********************************************
+ Constrain table, image, and input widths
+*********************************************/
+table, img, input, textarea, select {
+ max-width: 100%;
+ height: auto;
+ -moz-box-sizing: border-box;
+ -webkit-box-sizing: border-box;
+ -ms-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+/*********************************************
+ Main Background
+*********************************************/
+body {
+ background: #F7F7F7;
+}
+
+/*********************************************
+ Universal Link Styles
+*********************************************/
+a {
+ color: #000000;
+ text-decoration: underline;
+}
+a:hover {
+ color: #000000;
+ text-decoration: underline;
+}
+a:focus {
+ color: #000000;
+}
+
+/*********************************************
+ Headings
+*********************************************/
+h1, h2, h3, h4, h5, h6 {
+ font-weight: bold;
+ color: #111111;
+}
+h1 {
+ font-family: "Arial Black", Arial, Helvetica, Sans-Serif;
+ font-size: 2em;
+ line-height: 1.5;
+ margin-top: 0.75em;
+ margin-bottom: 0.75em;
+ letter-spacing: -1px;
+}
+h2 {
+ font-size: 1.7em;
+ line-height: 1.75em;
+ margin-top: 0.9em;
+ margin-bottom: 0.9em;
+}
+h3 {
+ font-size: 1.5em;
+ line-height: 1;
+ margin-top: 1em;
+ margin-bottom: 1em;
+}
+h4 {
+ font-size: 1.2em;
+ line-height: 1.25em;
+ margin-top: 1.25em;
+ margin-bottom: 1.25em;
+}
+h5, h6 {
+ font-size: 1em;
+}
+h6 {
+ font-style: italic;
+}
+h1 img, h2 img, h3 img, h4 img, h5 img, h6 img {
+ margin: 0;
+}
+
+/*********************************************
+ Container Div
+*********************************************/
+.builder-container-outer-wrapper {
+ background: transparent;
+ margin: 1.5em auto;
+ border: none;
+ display: block;
+}
+
+/*********************************************
+ Default Module Styling
+*********************************************/
+.builder-module {
+ background: #FFFFFF;
+ margin-bottom: 1.5em;
+ border-top: .1em solid #777777;
+ border-bottom: .1em solid #777777;
+}
+.builder-module-last {
+ margin-bottom: 0;
+}
+
+/* Failed attempt #5 at producing full-height sidebars
+
+ This does not work due to a Firefox glitch that causes wide content to
+ override the width of blocks.
+
+ These rules should be looked at again later in case Firefox fixes this issue.
+*/
+/*
+.builder-module {
+ display: table;
+ table-layout: fixed;
+}
+.builder-module-block-outer-wrapper {
+ display: table-cell !important;
+ float: none !important;
+ vertical-align: top;
+}
+*/
+
+/*********************************************
+ All Sidebars
+*********************************************/
+.builder-module-sidebar {
+ background: #DDDDDD;
+ display: block;
+ width: 100%;
+ text-align: left;
+ margin: 0;
+ padding: .75em 0;
+}
+.builder-module-sidebar.right {
+ margin-right: 0;
+}
+.builder-module-sidebar.left {
+ margin-left: 0;
+}
+.builder-module-sidebar .widget-wrapper {
+ width: 100%;
+}
+.builder-module-sidebar .widget {
+ margin: 0;
+ padding: .75em 1.5em;
+ color: #333333;
+}
+.builder-module-block-outer-wrapper {
+ overflow: visible !important;
+}
+.builder-module-block-outer-wrapper .widget-wrapper-left .widget,
+.builder-module-block-outer-wrapper .widget-wrapper-middle .widget {
+ padding-right: .75em;
+}
+.builder-module-block-outer-wrapper .widget-wrapper-middle .widget,
+.builder-module-block-outer-wrapper .widget-wrapper-right .widget {
+ padding-left: .75em;
+}
+.builder-module-sidebar h4.widget-title {
+ color: #333333;
+ background: none;
+ font-size: 1.2em;
+ line-height: 1.25;
+ padding: 0;
+ margin: 0 0 1.25em 0;
+}
+.builder-module-sidebar h4.widget-title a {
+ color: #333333;
+}
+.builder-module-sidebar h4.widget-title + * {
+ margin-top: 0;
+}
+.builder-module-sidebar .widget *:first-child {
+ margin-top: 0;
+}
+.builder-module-sidebar .widget *:last-child {
+ margin-bottom: 0;
+}
+.builder-module-sidebar .widget a.rsswidget img {
+ display: none;
+}
+
+/*********************************************
+ Navigation Module
+*********************************************/
+.builder-module-navigation {
+ font-size: 1em;
+ line-height: 2em;
+ background: #FFFFFF url('images/nav_bg.png') repeat top left;
+ display: block;
+ width: 100%;
+}
+.builder-module-navigation .builder-module-element {
+ margin: 0 .5em;
+}
+.builder-module-navigation ul {
+ float: left;
+ display: block;
+ margin: 0;
+ padding: 0;
+}
+.builder-module-navigation ul * {
+ margin: 0;
+}
+.builder-module-navigation li {
+ padding: 0;
+}
+.builder-module-navigation li a,
+.builder-module-navigation li.current_page_item li a,
+.builder-module-navigation li.current-cat li a {
+ font-size: 1em;
+ padding: .4em .6em;
+ color: #333333;
+ font-weight: bold;
+ text-decoration: none;
+ background: #FFFFFF url('images/nav_bg.png') repeat-x top left;
+}
+.builder-module-navigation li a:hover {
+ background: #333333 url('images/nav_bg_hover.jpg') repeat-x top left;
+ color: #FFFFFF;
+}
+.builder-module-navigation li.current_page_item a,
+.builder-module-navigation li.current-cat a {
+}
+/* second level stuff */
+.builder-module-navigation li ul {
+ width: 14em;
+ border: .1em solid #777777;
+ border-bottom: 0;
+}
+.builder-module-navigation li li {
+ border-bottom: .1em solid #777777;
+ width: 14em;
+}
+.builder-module-navigation li li a {
+ float: none;
+}
+.builder-module-navigation li li a:hover,
+.builder-module-navigation li li a.sfhover {
+}
+.builder-module-navigation li ul ul {
+ margin: -2.9em 0 0 14em;
+}
+
+/*********************************************
+ Widget Bar Module
+*********************************************/
+.builder-module-widget-bar {
+ background: #DDDDDD;
+}
+
+/*********************************************
+ Footer Module
+*********************************************/
+.builder-module-footer {
+ background: transparent;
+ border: none;
+}
+.builder-module-footer .builder-module-element {
+ text-align: left;
+ color: #333333;
+ margin: 0 1.5em;
+}
+.builder-module-footer .builder-module-element .alignright {
+ text-align: right;
+}
+.builder-module-footer .builder-module-element a {
+ color: #333333;
+ text-decoration: none;
+}
+.builder-module-footer .builder-module-element a:hover {
+ text-decoration: underline;
+}
+
+/*********************************************
+ Image Module
+*********************************************/
+.builder-module-image .builder-module-element {
+ font-size: 0;
+}
+.builder-module-image .builder-module-element img {
+ margin: 0;
+}
+
+/*********************************************
+ HTML Module
+*********************************************/
+
+/*********************************************
+ Content Module
+*********************************************/
+.builder-module-content .builder-module-element {
+ margin: 1.5em;
+ display: block;
+ text-align: left;
+ overflow: hidden;
+}
+.builder-module-content .post {
+ margin-bottom: 1.5em;
+}
+
+.post-title, .post-title * {
+ margin: 0;
+ padding: 0;
+}
+.post .thumbnail-wrap {
+ display: none;
+}
+.post .date {
+ /*display: none;*/
+ float: left;
+}
+
+.post-title h1,
+.post-title h2,
+.post-title h3 {
+ font-family: "Arial Black",Arial,Helvetica,Sans-Serif;
+ clear: both;
+ color: #262626;
+ font-size: 1.9em;
+ line-height: 1em;
+ letter-spacing: -1px;
+ font-weight: bold;
+ text-transform: uppercase;
+ margin-bottom: .56em;
+}
+.post-title a {
+ text-decoration: none;
+ color: #262626;
+ font-size: 1em;
+}
+
+.post .post-meta {
+ display: block;
+ /*clear: both;*/
+}
+.post .post-meta a {
+ text-decoration: none;
+ font-style: italic;
+}
+.post .post-meta a:hover {
+ text-decoration: underline;
+}
+.post .meta-bottom {
+ display: block;
+}
+.post .meta-bottom img {
+ max-width: none;
+}
+
+.post .entry-attachment .attachment {
+ text-align: center;
+}
+
+.post .edit-entry-link {
+ margin: 0 0 1.5em 0;
+ clear: both;
+}
+
+.post-content {
+ margin-top: 1.5em;
+ clear: both;
+}
+.page-title {
+ font-size: 1.75em;
+ line-height: 1.7em;
+ margin-top: 0;
+ margin-bottom: .875em;
+}
+
+/*********************************************
+ Style images and galleries
+ .hentry is used instead of .page or .post
+ as it applies to all content types
+*********************************************/
+.hentry .gallery a,
+.hentry .gallery dt,
+.hentry .gallery img {
+ margin: 0;
+ font-size: 0;
+ line-height: 0;
+}
+.hentry .gallery-item {
+ display: inline-block;
+ margin: 0 1.5em 1.5em 0;
+ padding: 5px;
+ vertical-align: top;
+ text-align: left;
+ width: 150px;
+ border: 1px solid #CFCFCF;
+ background: #F3F3F3;
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+ border-radius: 3px;
+}
+.hentry .gallery-item img {
+ border: 0;
+ margin: 0;
+ padding: 0;
+}
+.hentry .gallery-caption {
+ margin: 0;
+ padding: 10px 5px 5px 5px;
+ line-height: 1;
+}
+.hentry .gallery + * {
+ margin-top: 0;
+}
+
+.hentry img {
+ border: 1px solid #CFCFCF;
+ background: #F3F3F3;
+ padding: 5px;
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+ border-radius: 3px;
+}
+.hentry .alignright {
+ margin: 0 0 1.5em 1.5em;
+}
+.hentry .alignleft {
+ margin: 0 1.5em 1.5em 0;
+}
+.hentry .aligncenter {
+ margin: 0 auto 1.5em auto;
+}
+
+.hentry .wp-caption {
+ border: 1px solid #CFCFCF;
+ background: #F3F3F3;
+ padding: 5px;
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+ border-radius: 3px;
+}
+.hentry .wp-caption img {
+ border: none;
+ background: transparent;
+ padding: 0;
+}
+
+.hentry .wp-caption-text {
+ text-align: left;
+ margin: 0;
+ padding: 10px 5px 5px 5px;
+ line-height: 1;
+}
+
+
+/*********************************************
+ Post Meta Styles, if needed
+*********************************************/
+.meta-top {
+ clear: both; /* we need this so floats in the post are cleared */
+}
+
+.meta-bottom {
+ clear: both; /* we need this so floats in the post are cleared */
+ border-top: .1em solid #D7D7D7;
+ padding-top: 1.4em;
+ margin-bottom: 3em;
+}
+.meta-bottom .alignright {
+ margin-bottom: 1.5em;
+}
+.meta-bottom .categories,
+.meta-bottom .tags {
+ background: url( 'images/folder.png' ) 0 0 no-repeat;
+ padding: 0 0 0 1.5em;
+}
+.meta-bottom .comments {
+ background: url( 'images/comments.png' ) 0 2px no-repeat;
+ padding: 0 0 0 1.5em;
+}
+
+.EXIF table {
+ margin: 1.5em auto;
+}
+.photometa h4 {
+ text-align: center;
+ margin: 0;
+ padding: 0;
+}
+.photometa ul {
+ list-style-type: none;
+}
+
+/*********************************************
+ Previous/Next Page Navigation
+*********************************************/
+.paging {
+ clear: both; /* To clear any floats */
+ margin: 0;
+ padding: 0;
+}
+
+/*********************************************
+ Comment Styles
+*********************************************/
+#comments {
+ margin: 3em 0 1.5em 0;
+ padding: 0;
+}
+#comments ol.commentlist {
+ margin: 1.5em 0;
+ padding: 0;
+ background: transparent;
+}
+#comments ul.children {
+ margin: 0 1.5em;
+}
+#comments .vcard {
+ line-height: 1;
+ margin-bottom: .5em;
+}
+#comments .vcard .avatar {
+ display: block;
+ float: left;
+ margin: 0 .75em 0 0;
+}
+#comments .comment-meta {
+ margin-bottom: 1.5em;
+}
+#comments li {
+ clear: both;
+ list-style-type: none;
+ margin: 1.5em 0;
+ border: 1px solid #999999;
+ overflow: hidden;
+}
+#comments li .comment-body {
+ margin: 1.5em;
+}
+#comments blockquote {
+ margin: 1.5em;
+}
+
+#respond {
+ margin-top: 3em;
+ overflow: visible !important;
+}
+.comment #respond {
+ margin: 1.5em 1.5em 1.5em 1.5em;
+ padding: 0 1.5em 1.5em 1.5em;
+ border: 1px solid #999999;
+}
+#respond h3 {
+ margin-bottom: 0;
+}
+#respond .cancel-comment-reply a {
+ margin: 0;
+ display: block;
+}
+#commentform label {
+ margin-left: 1em;
+}
+#commentform input[type="text"] {
+ width: 20em;
+}
+#commentform input,
+#commentform textarea {
+ margin: 0;
+}
+#commentform #comment {
+ width: 100%;
+}
+#commentform .comment-submit-wrapper {
+ margin-bottom: 0;
+}
+
+/*********************************************
+ Text elements
+*********************************************/
+p {
+}
+p img.left {
+ float: left;
+ margin: 1.5em 1.5em 1.5em 0;
+ padding: 0;
+}
+p img.right {
+ float: right;
+ margin: 1.5em 0 1.5em 1.5em;
+}
+blockquote {
+ background: url('images/blockquote.png') top left no-repeat;
+ margin: 1.5em;
+ padding: 0;
+ color: #666666;
+ font-style: italic;
+}
+strong {
+ font-weight: bold;
+}
+em, dfn {
+ font-style: italic;
+}
+dfn {
+ font-weight: bold;
+}
+sup, sub {
+ height: 0;
+ line-height: 1.5;
+ vertical-align: baseline;
+ position: relative;
+}
+sup {
+ bottom: 1ex;
+}
+sub {
+ top: .5ex;
+}
+abbr, acronym {
+ border-bottom: 1px dotted #666;
+}
+address {
+ font-style: italic;
+}
+del {
+ color: #666666;
+}
+pre {
+ margin: 1.5em 0;
+ white-space: pre;
+}
+big {
+ font-size: 1.2em;
+ line-height: 1;
+}
+
+/*********************************************
+ Lists
+*********************************************/
+ul, ol {
+ list-style-position: outside;
+ margin: 0 0 0 1.4em;
+ padding: 0;
+}
+.post-content > ul,
+.post-content > ol {
+ margin-top: 1.5em;
+ margin-bottom: 1.5em;
+}
+ol {
+ margin-left: 20px;
+ *margin-left: 24px; /* targeted IE 6, 7 fix */
+}
+li {
+ margin: 0;
+ padding: 0;
+}
+li > * {
+ margin-top: 0;
+}
+li *:last-child {
+ margin-bottom: 0;
+}
+li > p + ul {
+ margin-top: -1.5em;
+}
+ul {
+ list-style-type: disc;
+}
+ol {
+ list-style-type: decimal;
+}
+dl {
+ margin: 0 0 1.5em 0;
+}
+dl dt {
+ font-weight: bold;
+}
+dd {
+ margin-left: 1.5em;
+}
+dd + dd {
+ margin-top: 1.5em;
+}
+
+/*********************************************
+ Tables
+*********************************************/
+table {
+ margin-bottom: 1.5em;
+ background: #F3F3F3;
+}
+table, td, th {
+ border: 1px solid #CFCFCF;
+ border-collapse: collapse;
+}
+th {
+ font-weight: bold;
+ line-height: 1.5;
+ background: #E8E8E8;
+}
+th, td, caption {
+ padding: .75em;
+}
+tr:nth-child(2n) th {
+ background: #F6F6F6;
+}
+tr:nth-child(2n) td {
+ background: #FFFFFF;
+}
+tfoot {
+ font-style: italic;
+}
+caption {
+ background: #EEEEEE;
+}
+
+/*********************************************
+ Misc classes
+*********************************************/
+.small {
+ font-size: .8em;
+ line-height: 1.875;
+ margin-top: 1.875em;
+ margin-bottom: 1.875em;
+}
+.large {
+ font-size: 1.2em;
+ line-height: 2.5;
+ margin-top: 1.25em;
+ margin-bottom: 1.25em;
+}
+.hide {
+ display: none;
+}
+.quiet {
+ color: #666666;
+}
+.loud {
+ color: #000000;
+}
+.highlight {
+ background: #FFFF00;
+}
+.added {
+ background: #006600;
+ color: #FFFFFF;
+}
+.removed {
+ background: #990000;
+ color: #FFFFFF;
+}
+.first {
+ margin-left: 0;
+ padding-left: 0;
+}
+.last {
+ margin-right: 0;
+ padding-right: 0;
+}
+.top {
+ margin-top: 0;
+ padding-top: 0;
+}
+.bottom {
+ margin-bottom: 0;
+ padding-bottom: 0;
+}
+
+/*********************************************
+ Default styling for forms
+*********************************************/
+label {
+ font-weight: bold;
+}
+fieldset {
+ padding: 1.4em;
+ margin: 0 0 1.5em 0;
+ border: .1em solid #CCCCCC;
+}
+legend {
+ font-weight: bold;
+ font-size: 1.2em;
+}
+
+/*********************************************
+ Form fields
+*********************************************/
+input[type=text], input[type=password], input.text, input.title, textarea, select {
+ font-size: 1em;
+ margin-top: .5em;
+ margin-bottom: .5em;
+}
+input[type=text], input[type=password], input.text, input.title, textarea {
+ background-color: #FFFFFF;
+ border: 1px solid #999999;
+ padding: 5px;
+}
+input[type=text]:focus, input[type=password]:focus, input.text:focus, input.title:focus, textarea:focus {
+ border-color: #666666;
+}
+textarea {
+ width: 30em;
+ height: 20em;
+}
+input[type=checkbox], input[type=radio], input.checkbox, input.radio {
+/* position: relative;
+ top: .25em;*/
+}
+.search-text-box {
+ margin-bottom: 0;
+}
+.search-submit-button {
+ margin: 0 !important;
+ padding: .2em .5em;
+}
+
+/*********************************************
+ Success, notice and error boxes
+*********************************************/
+.error, .notice, .success {
+ padding: .8em;
+ margin-bottom: 1em;
+ border: 2px solid #ddd;
+}
+.error {
+ background: #FBE3E4;
+ color: #8a1f11;
+ border-color: #FBC2C4;
+}
+.notice {
+ background: #FFF6BF;
+ color: #514721;
+ border-color: #FFD324;
+}
+.success {
+ background: #E6EFC2;
+ color: #264409;
+ border-color: #C6D880;
+}
+.error a {
+ color: #8a1f11;
+}
+.notice a {
+ color: #514721;
+}
+.success a {
+ color: #264409;
+}
+
+/*********************************************
+ Widget Styling
+*********************************************/
+.widget_rss li {
+ margin-bottom: 1.5em;
+}
+.widget_rss .rsswidget {
+ display: block;
+ margin: 0;
+}
+.widget_rss .rss-date {
+ display: block;
+ font-style: italic;
+ margin-bottom: 1.5em;
+}
+.widget_rss .rssSummary {
+ margin: 1.5em 0;
+}
+
+
+/*********************************************
+ Social Tabs
+*********************************************/
+#social-tags {
+ position: fixed;
+ width: 95px;
+ height: 100%;
+ right: 0;
+ left: auto;
+ margin-right: 0;
+ margin-left: auto;
+ padding-top: 10px;
+ overflow: hidden;
+}
+#social-tags a {
+ position: relative;
+ right: -50px;
+ margin: 0;
+}
+#social-tags a:hover {
+ right: 0;
+}
+
+/*********************************************
+ The Obligatory WP Styles
+*********************************************/
+.alignright {
+ margin-left: 1.5em;
+}
+.alignleft {
+ margin-right: 1.5em;
+}
+.post img.wp-smiley {
+ border: none;
+}
diff --git a/src/org.gluster.storage.management.console.help/html/css/builder-gluster/style.css b/src/org.gluster.storage.management.console.help/html/css/builder-gluster/style.css
new file mode 100644
index 00000000..80daf9fb
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/css/builder-gluster/style.css
@@ -0,0 +1,1341 @@
+/*
+Theme Name: Gluster - Builder Theme
+Description: Gluster Theme based on Builder Framework
+Author: iThemes modified by glassCanopy
+Template: Builder
+*/
+
+/* do not remove the import line */
+@import url("../Builder/style.css");
+
+
+/*********************************************
+ Default font settings and typography.
+ The font-size percentage is of 16px. (0.75 * 16px = 12px)
+*********************************************/
+body {
+ font-size: 75%;
+ line-height: 1.5;
+ color: #333333;
+ font-family: Arial,Verdana,Helvetica,sans-serif;
+}
+input, select, textarea {
+ font-family: Arial,Verdana,Helvetica,sans-serif;
+}
+
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+address, dfn, samp, dl, img, ul, ol {
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+}
+
+/*img, li { filter:alpha(opacity=100)!important;} */
+
+a img {
+ margin: 0;
+}
+
+table, th, td {
+ border:0;
+ background-color:none;
+}
+
+ul {
+ list-style-type:none;
+}
+/*
+html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td {
+ vertical-align: top;
+}
+*/
+
+
+.hentry img {
+ border: 0;
+ background: none;
+ padding: 0;
+ -moz-border-radius: 0;
+ -webkit-border-radius: 0;
+ border-radius: 0;
+/* width: auto !important;
+ height: auto !important; */
+}
+
+p {
+ font-size:110%;
+ line-height:1.5em;
+ margin:0;
+ padding:0 0 .5em 0;
+}
+
+table, img, input, textarea, select {
+ max-width: auto;
+ height: auto;
+ -moz-box-sizing: none;
+ -webkit-box-sizing: none;
+ -ms-box-sizing: none;
+ box-sizing: none;
+}
+
+.builder-module-block-outer-wrapper .widget-wrapper-left .widget, .builder-module-block-outer-wrapper .widget-wrapper-middle .widget {
+ padding-right: 0.25em;
+ padding-left:2em;
+}
+
+/*********************************************
+ Main Background
+*********************************************/
+body {
+ background: #FFFFFF;
+}
+
+.builder-container-outer-wrapper {
+ background: url(/wp-content/themes/builder-gluster/images/background-top.png);
+ background-position:top right;
+ background-repeat:no-repeat;
+}
+
+#gluster-logo {
+ display:block;
+ border:0;
+ position:absolute;
+ top:4px;
+ z-index:900;
+ width:464px;
+ height:86px;
+}
+
+
+/*********************************************
+ Universal Link Styles
+*********************************************/
+a {
+ color: #EF7622;
+ text-decoration: underline;
+}
+a:hover {
+ color: #EF7622;
+ text-decoration: underline;
+}
+
+/*********************************************
+ Headings
+*********************************************/
+h1, h2, h3, h4, h5, h6 {
+ font-weight: bold;
+ color: #60A0CF;
+}
+h1 {
+ font-family: Arial, Helvetica, Sans-Serif;
+ font-size: 135%;
+ line-height: 1.5;
+ margin-top: 0;
+ margin-bottom: 0.5em;
+ letter-spacing: 1px;
+ color: #284764;
+}
+h2 {
+
+ color: #60A0CF;
+ font-family: Verdana,Arial,Helvetica,sans-serif;
+ font-size: 13px;
+ margin: 0;
+ padding: 8px 0 4px 0;
+ line-height: 1.75em;
+}
+h3 {
+ font-size: 1.5em;
+ line-height: 1;
+ margin-top: 1em;
+ margin-bottom: 1em;
+}
+h4 {
+ font-size: 1.2em;
+ line-height: 1.25em;
+ margin-top: 1.25em;
+ margin-bottom: 1.25em;
+}
+h5, h6 {
+ font-size: 1em;
+}
+h6 {
+ font-style: italic;
+}
+h1 img, h2 img, h3 img, h4 img, h5 img, h6 img {
+ margin: 0;
+}
+
+.type-page .post-title {
+display: none;
+}
+
+.type-post .post-title h1 {
+ font-family: Arial, Helvetica, Sans-Serif;
+ font-size: 135%;
+ line-height: 1.5;
+ margin-top: 1em;
+ margin-bottom: 0em;
+ letter-spacing: 1px;
+ color: #284764;
+}
+
+.post-title h1 {
+ font-family: Arial, Helvetica, Sans-Serif;
+ font-size: 135%;
+ line-height: 1.5;
+ margin-top: 0;
+ margin-bottom: 0.5em;
+ letter-spacing: 1px;
+ color: #284764;
+}
+
+.post-content {
+ clear: both;
+ margin-top: 1em;
+}
+
+.post-content > ul, .post-content > ol {
+ margin-bottom: 0.5em;
+ margin-top: 0.5em;
+}
+
+.builder-module-sidebar h4.widget-title {
+ background: none repeat scroll 0 0 transparent;
+ color:#284764;
+ letter-spacing:1px;
+ font-size: 1.2em;
+ line-height: 1.25;
+ margin: 0 0 1.25em;
+ padding: 0;
+ font-weight:normal;
+}
+
+.builder-module-content .builder-module-element {
+ display: block;
+ margin: 0 0.25em 1.5em 0.25em;
+ overflow: hidden;
+ text-align: left;
+}
+
+.builder-module-sidebar .widget {
+ color: #333333;
+ margin: 0;
+ padding: 0.25em .75em 0 .75em;
+}
+
+.widget-content p {
+ margin:0;
+ padding:0;
+}
+
+.widget-it-content {
+ margin:0;
+ padding:0;
+}
+
+/*********************************************
+ All Sidebars
+*********************************************/
+.builder-module-sidebar {
+ background: #FFFFFF;
+}
+
+/* fix footer link underline */
+.builder-module-footer .builder-module-element a {
+ text-decoration: underline;
+}
+
+/*********************************************
+ Navigation Module
+*********************************************/
+.builder-module-navigation {
+ font-size: 1em;
+ line-height: 1.81em;
+ background: none;
+ display: block;
+ width: 100%;
+ margin-bottom: 0;
+
+}
+.builder-module-navigation .builder-module-element {
+ margin: 0 .5em;
+}
+.builder-module-navigation ul {
+ float: right;
+ display: block;
+ margin: 0;
+ padding: 0;
+}
+.builder-module-navigation ul * {
+ margin: 0;
+}
+.builder-module-navigation li {
+ padding: 0;
+}
+.builder-module-navigation li a,
+.builder-module-navigation li.current_page_item li a,
+.builder-module-navigation li.current-cat li a {
+ font-size: 1em;
+ padding: .1em .6em;
+ color: #ffffff;
+ font-weight: normal;
+ text-decoration: none;
+ background: none;
+}
+.builder-module-navigation li a:hover {
+ background: none;
+ color: #325C84;
+ text-decoration:none;
+}
+.builder-module-navigation li.current_page_item a,
+.builder-module-navigation li.current-cat a {
+ color: #325C84;
+}
+
+.builder-module-navigation li.current_page_item a:hover,
+.builder-module-navigation li.current-cat a:hover {
+ color: #ffffff;
+ background: none;
+ border:none;
+}
+
+.builder-module {
+ border:0px solid #ffffff;
+background:none;
+}
+.builder-module-block {
+border:0px solid #ffffff;
+background:none;
+}
+
+#menu-utility-menu li a {
+ background:none;
+ color:#FFFFFF;
+ font-size:90%;
+}
+
+#menu-utility-menu li a:hover{
+ background:none;
+ color:#FFFFFF;
+ text-decoration:underline;
+ font-size:90%;
+}
+
+#menu-top-menu .sub-menu li.menu-item, #menu-top-menu .sub-menu li.menu-item a {
+background: #67ABDD;
+color:#ffffff;
+
+}
+
+#menu-top-menu .sub-menu li.menu-item a:hover, #menu-top-menu .sub-menu li.menu-item a:hover {
+background:#67ABDD;
+color: #325C84;
+
+}
+
+/* second level stuff */
+.builder-module-navigation li ul {
+ width: 14em;
+ border:none;
+ border-bottom: 0;
+}
+.builder-module-navigation li li {
+ border-bottom: .1em solid #ffffff;
+ width: 14em;
+}
+.builder-module-navigation li li a {
+ float: none;
+}
+.builder-module-navigation li li a:hover,
+.builder-module-navigation li li a.sfhover {
+}
+.builder-module-navigation li ul ul {
+ /* margin: -2.9em 0 0 14em;*/
+ margin: -2.05em 0 0 14em;
+}
+.builder-module-navigation li ul ul li {
+ border-left: 1px solid #89c8f9;
+}
+
+/* LEFT NAVIGATION */
+#nav_menu-2 ul,
+#nav_menu-3 ul,
+#nav_menu-4 ul,
+#nav_menu-5 ul,
+#nav_menu-6 ul,
+#nav_menu-7 ul,
+#nav_menu-8 ul,
+#nav_menu-9 ul,
+#nav_menu-10 ul,
+#nav_menu-11 ul,
+#nav_menu-12 ul,
+#nav_menu-13 ul,
+#nav_menu-14 ul {
+ color:#325C84;
+ list-style-type:disc;
+ margin-left:1em;
+ padding-left:0;
+
+}
+#nav_menu-2 li a:link, #nav_menu-2 li a:visited, #nav_menu-2 li a:hover,
+#nav_menu-3 li a:link, #nav_menu-3 li a:visited, #nav_menu-3 li a:hover,
+#nav_menu-4 li a:link, #nav_menu-4 li a:visited, #nav_menu-4 li a:hover,
+#nav_menu-5 li a:link, #nav_menu-5 li a:visited, #nav_menu-5 li a:hover,
+#nav_menu-6 li a:link, #nav_menu-6 li a:visited, #nav_menu-6 li a:hover,
+#nav_menu-7 li a:link, #nav_menu-7 li a:visited, #nav_menu-7 li a:hover,
+#nav_menu-8 li a:link, #nav_menu-8 li a:visited #nav_menu-8 li a:hover,
+#nav_menu-9 li a:link, #nav_menu-9 li a:visited #nav_menu-9 li a:hover,
+#nav_menu-10 li a:link, #nav_menu-10 li a:visited #nav_menu-10 li a:hover,
+#nav_menu-11 li a:link, #nav_menu-11 li a:visited #nav_menu-11 li a:hover,
+#nav_menu-12 li a:link, #nav_menu-12 li a:visited, #nav_menu-12 li a:hover,
+#nav_menu-13 li a:link, #nav_menu-13 li a:visited, #nav_menu-13 li a:hover,
+#nav_menu-14 li a:link, #nav_menu-14 li a:visited, #nav_menu-14 li a:hover {
+ color: #325C84;
+ font-weight: normal;
+ text-decoration: none;
+}
+#nav_menu-2 li.menu-item a,
+#nav_menu-3 li.menu-item a,
+#nav_menu-4 li.menu-item a,
+#nav_menu-5 li.menu-item a,
+#nav_menu-6 li.menu-item a,
+#nav_menu-7 li.menu-item a,
+#nav_menu-8 li.menu-item a,
+#nav_menu-9 li.menu-item a,
+#nav_menu-10 li.menu-item a,
+#nav_menu-11 li.menu-item a,
+#nav_menu-12 li.menu-item a,
+#nav_menu-13 li.menu-item a,
+#nav_menu-14 li.menu-item a {
+ color: #325C84;
+ font-weight: normal;
+ text-decoration: none;
+}
+#nav_menu-2 ul li ul.sub-menu,
+#nav_menu-3 ul li ul.sub-menu,
+#nav_menu-4 ul li ul.sub-menu,
+#nav_menu-5 ul li ul.sub-menu,
+#nav_menu-6 ul li ul.sub-menu,
+#nav_menu-7 ul li ul.sub-menu,
+#nav_menu-8 ul li ul.sub-menu,
+#nav_menu-9 ul li ul.sub-menu,
+#nav_menu-10 ul li ul.sub-menu,
+#nav_menu-11 ul li ul.sub-menu,
+#nav_menu-12 ul li ul.sub-menu,
+#nav_menu-13 ul li ul.sub-menu,
+#nav_menu-14 ul li ul.sub-menu {
+margin-top:.2em;
+list-style-type:none;
+}
+
+
+
+/* HOME PAGE STYLES */
+<!--
+
+#UL {
+width:680px;
+height:270px;
+}
+
+#spotlight {
+background-image:url(/images/home/bg-home-right.png);
+width:315px;
+height:270px;
+
+}
+
+#LL {
+background-image:url(/images/home/bg-ll.png);
+background-repeat:no-repeat;
+width:680px;
+height:270px;
+}
+
+#LR {
+
+background-image:url(/images/home/bg-home-right.png);
+width:315px;
+height:270px;
+}
+
+.panelHeads {
+font-family:Arial,Helvetica,sans-serif;
+font-size:130%;
+font-weight:bold;
+padding-bottom:5px;
+padding-top:7px;
+text-align:center;
+color:#48647f;
+}
+
+.bbLg {
+font-family:Arial,Helvetica,sans-serif;
+color:#000000;
+font-size:150%;
+padding-bottom:5px;
+padding-top:7px;
+margin-left:125px;
+}
+
+.bbSm {
+font-family:Arial,Helvetica,sans-serif;
+color:#000000;
+font-size:120%;
+padding-bottom:3px;
+padding-top:3px;
+line-height:160%;
+}
+
+a.homeLM {
+font-family:Arial,Helvetica,sans-serif;
+color:#ef7622;
+font-size:90%;
+font-weight:bold;
+padding-bottom:5px;
+padding-top:7px;
+text-align:center;
+letter-spacing:1px;
+text-decoration:none;
+}
+
+.LRContent {
+font-family:Arial,Helvetica,sans-serif;
+color:#333333;
+font-size:110%;
+padding: 7px 15px 0 15px;
+line-height:130%;
+}
+
+a.FRLink {
+color:#333333;
+font-size:110%;
+text-decoration:underline;
+}
+
+.fr {
+line-height:140%;
+padding-bottom:14px;
+}
+
+
+/* HOME PAGE F1 SLIDER STYLING */
+
+#container {
+ width:632px;
+ padding:0;
+ margin:0;
+ position:relative;
+ z-index:0;
+}
+
+#frame {
+ position:absolute;
+ z-index:0;
+ width:739px;
+ height:270px;
+ top:-3px;
+ left:-80px;
+}
+
+#slides {
+ position:absolute;
+ top:1px;
+ left:1px;
+ z-index:100;
+}
+
+#slides .next,#slides .prev {
+ position:absolute;
+ top:107px;
+ left:-24px;
+ width:24px;
+ height:43px;
+ display:block;
+ z-index:101;
+}
+
+.slides_container {
+ width:632px;
+ height:270px;
+ overflow:hidden;
+ position:relative;
+}
+
+#slides .next {
+ left:632px;
+}
+
+.pagination {
+ position:absolute;
+ top:223px;
+ left:289px;
+ z-index:500;
+ margin:26px auto 0;
+ width:100px;
+}
+
+ul.pagination {
+ list-style-type:none;
+}
+
+.pagination li {
+ float:left;
+ margin:0 1px;
+}
+
+.pagination li a {
+ display:block;
+ width:12px;
+ height:0;
+ padding-top:12px;
+ background-image:url(/images/home/pagination.png);
+ background-position:0 0;
+ float:left;
+ overflow:hidden;
+}
+
+.pagination li.current a {
+ background-position:0 -12px;
+}
+
+/*pager wrapper*/
+/*spotlight styles
+.bx-pager a {
+ margin-right: 5px;
+
+ padding: 3px 8px 3px 6px;
+ font-size: 12px;
+ zoom:1;
+
+}*/
+
+/*pager links hover and active states
+.bx-pager .pager-active,
+.bx-pager a:hover {
+ background-position: 0 0;
+}*/
+
+/*pager wrapper
+.bx-pager {
+ text-align:center;
+ padding-top: 7px;
+ font-size:12px;
+ color:#666;
+}*/
+
+/*captions*/
+.bx-captions {
+ text-align:center;
+ font-size: 90%;
+ padding: 10px 0 0 0;
+ color:#333333;
+ line-height:95%;
+}
+
+.bx-window {
+height: 130px !important;
+}
+
+#slider1 {
+text-align:center;
+width: 240px;
+height:130px;
+padding:0;
+margin:0;
+overflow:hidden;
+}
+
+/* Front page footer */
+.footerTitleBox{color:#666; font-weight:bold; font-size:125%;text-align:left;}
+.footerContentsBox{font-weight:normal; font-size:100%;padding-top:5px;color:#666;}
+.footerContentsBox ul{
+list-style: none;
+margin: 0;
+padding: 0;
+border: none;
+font-size:120%;
+}
+.footerContentsBox ul li{margin:0;display: block;
+padding: 5px 5px 15px 0;
+line-height: 110%;
+width: 100%;}
+.footerContentsBox ul li a{
+text-decoration:none;
+color:#666;}
+ #socialicocontainer li
+{
+display: inline;
+list-style-type: none;
+padding-right: 3px;
+width:38px;
+}
+#socialicocontainer a{
+ border:none;
+ text-align:center;}
+
+
+/* RIGHT RESOURCES LIST */
+ .rightResources {
+ margin-left:-18px;
+}
+
+.rightResourcesTitle {
+ color: #325c84 !important;
+ font-size: 140%;
+ font-style:normal;
+ letter-spacing: 1px;
+}
+
+#rightResourcesList li {
+ padding: 10px 0;
+ vertical-align:middle;
+}
+
+#rightResourcesList li img{
+ float:left;
+ margin:0 3px 0 0;
+ vertical-align:middle;
+}
+
+#rightResourcesList ul{
+ list-style-type:none;
+ padding:0;
+ margin:0;
+}
+
+ul#rightResourcesList a:link, ul#rightResourcesList a:hover, ul#rightResourcesList a:visited{
+ text-decoration:none;
+ color: #325c84 !important;
+ font-size:80%;
+ vertical-align:middle;
+ padding-top:8px;
+}
+
+
+/*********************************************
+ Tables
+*********************************************/
+table {
+ margin-bottom: 1.5em;
+ background: none;
+}
+table, td, th {
+ border: 0px solid #CFCFCF;
+ /*border-collapse: collapse; */
+}
+th {
+ font-weight: bold;
+ line-height: 1.5;
+ background:#325c84;
+ padding:10px 0;
+ color:#FFF;
+ text-align:center;}
+
+th, td, caption {
+ padding: .75em;
+}
+tr:nth-child(2n) th {
+ background: none;
+}
+tr:nth-child(2n) td {
+ background: none;
+}
+tfoot {
+ font-style: italic;
+}
+caption {
+ background: none;
+}
+
+table.comp td {
+ border-bottom:1px solid #325C84;
+}
+
+.builder-module-block-outer-wrapper .widget-wrapper-middle .widget, .builder-module-block-outer-wrapper .widget-wrapper-right .widget {
+ padding-left: 0.25em;
+}
+
+/* RESOURCES PG */
+.post-content ul li {
+ background-image: url(/images/global/blue-bullet.gif);
+ background-position: 0 4px;
+ background-repeat: no-repeat;
+ font-size: 110%;
+ line-height: 1.2em;
+ margin: 0 0 6px;
+ padding-left: 10px;
+}
+
+/* FORMS */
+
+form#partner fieldset, form#whitepaper fieldset {
+margin: 1.5em 0 0 0;
+padding: 0;
+min-width:150px;
+}
+form#partner legend, form#whitepaper legend {
+margin-left: 1em;
+color: #000000;
+font-weight: bold;
+}
+form#partner fieldset ol, form#whitepaper fieldset ol {
+padding: 1em 1em 0 1em;
+list-style: none;
+}
+form#partner fieldset li, form#whitepaper fieldset li {
+padding-bottom: 1em;
+}
+form#partner fieldset.submit, form#whitepaper fieldset.submit {
+border-style: none;
+}
+form#partner label, form#whitepaper label {
+float: left;
+width: 12em;
+margin-right: 1em;
+}
+form#partner textarea{width:150px; height:150px;}
+div.error_container {
+ background-color: #eee;
+ border: 1px solid red;
+ margin: 5px;
+ padding: 5px;
+}
+div.error_container ol li {
+ list-style-type: disc;
+ margin-left: 20px;
+}
+div.error_container { display: none }
+.error_container label.error {
+ display: inline;
+}
+div.container {
+ background-color: #eee;
+ border: 1px solid red;
+ margin: 5px;
+ padding: 5px;
+}
+div.container ol li {
+ list-style-type: disc;
+ margin-left: 20px;
+}
+div.container { display: none }
+form#partner label.error, form#whitepaper label.error {
+ display: block;
+ color:#F00;
+ width: auto;
+ margin-right: 0;
+}
+a#partner_form_link{color:#EF7622; text-decoration:underline;}
+.required{color:#333;}
+
+form#partner fieldset input, form#partner fieldset textarea, form#partner fieldset select {width:200px;}
+form#partner fieldset.submit input {width:148px;}
+
+ label {
+
+ width:130px;
+ clear:left;
+ margin:5px 0;
+ }
+
+.entry-content form ol li {
+ padding-top:0;
+ }
+
+form br {
+ display:none;
+ }
+
+
+input[type="text"], input[type="password"], select, textarea {
+ margin:5px 0;
+ float:left;
+ width:220px;
+
+}
+
+input[type="password"] {
+ margin:5px 0 10px 13px;
+ float:left;
+ width:220px;
+
+}
+
+textarea {
+ float:none;
+ }
+
+input[type="checkbox"] {
+ clear:both;
+ }
+
+input#submit {
+ clear:both;
+ float:left;
+ padding:0;
+ width:148px;
+ margin-left:150px;
+}
+
+label.error {
+color: red;
+clear:none;
+padding-left:15px;
+border:none;
+background:none;
+ }
+
+
+.page-id-23 label.error, .page-id-713 label.error, .page-id-2524 label.error {
+ float:none;
+ padding:10px;
+ }
+fieldset {border:none;}
+
+ul.news_releases {padding-left:0px; margin:0 0 14px 0;;list-style:none;}
+ul.news_releases li{background:none;padding:0;line-height:1.25em;margin-bottom:3px;margin-top:0px;}
+ul.news_releases li a {background:none;padding:0;line-height:1.25em;margin:0;}
+
+/* TABLE: NEWS */
+table.comp {
+ border-top: 1px solid #325c84;
+ font-family: Arial,Verdana,Helvetica,sans-serif;
+ font-size: 100%;
+ padding: 0;
+ vertical-align: top;
+ width: 500px;}
+table.pricing th {background:#325c84;padding:15px 0; color:#FFF;text-align:center;}
+
+table.pricing tr {color:#325c84;}
+td.small, th.small {width:15%;}
+td.lg, th.lg {width:70%;}
+
+table.comp td {
+ border-bottom: 1px solid #325c84;
+ border-left: 0px;
+ border-right: 0px;
+
+ padding:7px 5px 0 8px;
+ vertical-align:top;
+ margin: 0;
+ line-spacing:1.2em;
+}
+table.comp td h3 {
+ color: #60A0CF;
+ font-family: Arial,Helvetica,sans-serif;
+ font-size: 12px;
+ margin: 0;
+ padding: 13px 0 0;
+}
+
+table.pricing td.sm {
+text-align:center;
+}
+
+/* TABLE WITH BORDERS */
+
+table.bd {
+ border-color: #325C84 -moz-use-text-color -moz-use-text-color;
+ border-style: solid none none;
+ border-width: 1px 0 0;
+ font-family: Arial,Verdana,Helvetica,sans-serif;
+ font-size: 100%;
+ padding: 0;
+ margin:2px 2px 6px 1px;
+ vertical-align: top;
+ width: 98%;
+}
+table.bd th {
+ background:#325c84;
+ padding:10px 0;
+ color:#FFF;
+ text-align:center;
+border: 1px solid #325c84;
+}
+
+table.bd td {
+ border: 1px solid #325c84;
+ padding:7px 8px 2px 8px;
+ vertical-align:top;
+ margin: 0px;
+
+}
+table.bd td h3 {
+ color: #60A0CF;
+ font-family: Arial,Helvetica,sans-serif;
+ font-size: 12px;
+ margin: 0;
+ padding: 13px 0 0;
+}
+
+table.bd img {
+ margin:8px 0;
+}
+
+.hentry .wp-caption-text {
+ line-height: 1;
+ margin: 0;
+ padding: 10px 5px 5px;
+ text-align: center;
+}
+#wrap-list {
+ margin: 0 auto;
+ width: 100%;
+}
+
+#left-col {
+ float: left;
+ width: 250px;
+}
+
+#right-col {
+ float: right;
+ width: 250px;
+}
+/* WEBINAR AND PROMO RIGHT SIDEBAR */
+
+#webpromo-top {
+ background-image:url(/wp-content/uploads/2011/03/sidebar-blue-top.png);
+ background-repeat:no-repeat;
+ width: 240px;
+ height:81px;
+ margin:0;
+ padding:0;
+ text-align:center;
+ color:#FFFFFF;
+ font-weight:bold;
+ font-size:18px;
+}
+
+#webpromo-top p {
+ padding: 25px 0 0 0 ;
+ margin:0;
+}
+
+#webpromo-mid{
+ background-color: #75b5e3;
+ width: 240px;
+ margin:0;
+ padding:0;
+ color:#FFFFFF;
+}
+
+#webpromo-bottom{
+background-image:url(/wp-content/uploads/2011/03/sidebar-blue-bottom.png);
+background-repeat:no-repeat;
+ width: 240px;
+ height: 36px;
+ margin:0;
+ padding:0;
+}
+#webpromo-mid p {
+ font-size:15px;
+ font-weight:bold;
+ margin: 0 0 0 20px;
+ padding:0;
+}
+
+#webpromo-mid ul li {
+ list-style-type:none;
+ margin-left:20px;
+ font-weight:normal;
+ font-size:15px;
+
+
+}
+
+.pbutton {
+ margin-left: 40px;
+ padding-top:15px;
+}
+
+.post .post-meta {
+ /*display:none;*/
+ float: left;
+}
+
+.categories {
+display:none;
+}
+
+/* Landing Pages */
+.clear {clear: both;}
+h1.big {font-size: 27px; padding-bottom: 20px; margin: 0;}
+h2.smallcaps {font-size: 10px; color: #818181; text-transform: uppercase; letter-spacing: 1px;}
+.col-3 {width: 30%; float: left; margin-right: 5%; padding: 6px 0 20px 0; margin-top: 5px;}
+.col-3.aqua {border-top: 1px solid #4aafe5;}
+.col-3.blue {border-top: 1px solid #1c4784;}
+.col-3.orange {border-top: 1px solid #fab34b;}
+.col-3.last {margin-right: 0;}
+h2.step {font-size: 15px; color: #262626; font-family: arial;}
+h2.step span {font-weight: normal; padding-right: 4px; color: #333;}
+p.button {padding-top: 15px;}
+.grey-divider {height: 1px; border-top: 1px solid #ccc; padding-bottom: 10px; margin-top: 2px;}
+.features {height: 40px; list-style-image: url('http://www.gluster.com/wp-content/uploads/2011/04/icon-check.jpg'); list-style-position: inside; padding: 0 0 0 2px; margin: 0;}
+.post-content ul.features li {float: left; width: 220px; margin-right: 20px; list-style: image; padding: 0; margin-left: 0; background-image: none;}
+.post-content ul.features li.last {margin-right: 0;}
+
+
+/* Awards Table */
+body table.awards{padding: 0; margin: 0 0 15px 0; width: 534px;}
+body table.awards tr {padding: 0; margin: 0;}
+body table.awards td {padding: 10px; margin: 0; text-align: center; font-size: 14px;}
+
+/* PR Table */
+body table.pr {padding: 0; margin: 0; width: 534px;}
+body table.pr tr {padding: 0; margin: 0;}
+body table.pr td {border-bottom: 1px dotted #ccc; padding: 10px 10px 10px 0; vertical-align: middle;}
+body table.pr td a {font-size: 13px;}
+body table.pr td:first-child {width: 95px; font-size: 10px; color: #777;}
+body table.pr span.date {font-size: 11px; text-transform: uppercase; color: #444; display: block;}
+
+/* News Table */
+body table.news {padding: 0; margin: 0; width: 534px; position: relative; top: -10px;}
+body table.news tr {padding: 0; margin: 0;}
+body table.news td {border-bottom: 1px dotted #ccc; padding: 10px 10px 10px 0; vertical-align: top;}
+body table.news td.news-logo {width: 95px; padding-right: 20px;}
+body table.news td.news-logo img {max-width: 95px;}
+body table.news td a {font-size: 13px;}
+body table.news td:first-child {width: 95px; font-size: 10px; color: #777;}
+body table.news span.date {font-size: 11px; text-transform: uppercase; color: #444; display: block;}
+
+.more {text-align: right; font-size: 11px; padding: 3px 0; margin-bottom: 15px;}
+
+/* TryBuy */
+h2.faded {color: #0eabe0; font-size: 19px; font-weight: normal; letter-spacing: 0; padding-bottom: 0px; margin-bottom: 8px; background: url('http://www.gluster.com/wp-content/uploads/2011/05/bg-trybuy-title.jpg') no-repeat bottom left;}
+p.trybuy-logos {height: 70px; width: 283px;}
+
+.post .post-title h3 a {
+ color: #60A0CF;
+ font-family: arial;
+ font-size: 24px;
+ font-weight: normal;
+ text-transform: none;
+}
+
+/* partner pages */
+a.link-blue {
+ color: #60A0CF;
+}
+
+.font-blue {
+ color: #60A0CF;
+}
+
+.partner td {
+ padding: 0px;
+}
+
+.partner-form-wrapper {
+ border-top: 1px solid #9eb1c6;
+ border-bottom: 1px solid #9eb1c6;
+ width: 511px;
+ padding: 20px 0px;
+ margin: 20px 0px 0px;
+}
+
+.partner-form-wrapper .ajax-loader {
+ float: left;
+ clear: both;
+}
+
+.partner-form-wrapper .label {
+ width: 140px;
+ font-weight: bold;
+}
+
+.partner-form-wrapper .field {
+ width: 281px;
+}
+
+.partner-form-wrapper .field-message {
+ width: 371px;
+}
+
+.partner-form-wrapper .left {
+ float: left;
+}
+
+.partner-form-wrapper .clear {
+ clear: both;
+}
+
+.partner-form-wrapper .wpcf7-text {
+ background: url('images/partner-form/text-field-bg.png') no-repeat;
+ width: 281px;
+ height: 28px;
+ border: none;
+ color: #777777;
+}
+
+.partner-form-wrapper .message textarea {
+ background: url('images/partner-form/text-area-bg.png') no-repeat;
+ width: 371px;
+ height: 119px;
+ border: none;
+ color: #777777;
+}
+
+.partner-form-wrapper .wpcf7-submit {
+ background: url('images/partner-form/btn-submit.png') no-repeat;
+ width: 148px;
+ height: 36px;
+ border: none;
+ text-indent: -9999em;
+ cursor: pointer;
+ margin: 10px 0px 0px;
+}
+
+.partner-form-wrapper p {
+ text-align: right;
+ padding: 0px;
+}
+
+.partner-form-wrapper span.wpcf7-not-valid-tip {
+ border: none;
+ color: #FF0000;
+ padding: 0px 0px 0px 5px;
+}
+
+/* ============================================================
+
+ Project Ammendment: Gluster Future Proof Landing Page
+ Author: Cole Winans (@ColeWinans) of Uptrending, LLC.
+ Contact: Cole@Uptrending.com
+
+ Notes: This CSS is specific to the Future Proof
+ landing page layout (Page ID 4732).
+
+============================================================*/
+/*------------------------------------------------------------
+ =Elements
+------------------------------------------------------------ */
+/*-----------------------------
+ =Typography
+------------------------------*/
+.page-id-4732 h1 {
+ margin: 40px 0 30px 0;
+ color: #67aade;
+ font-weight: normal;
+ line-height: 0;
+ font-size: 36px;
+}
+
+.page-id-4732 p {
+ font-size: 12px;
+ line-height: 18px;
+ color: #7d7d7d;
+}
+
+/*------------------------------------------------------------
+ =Layout
+------------------------------------------------------------ */
+.page-id-4732 #main {
+ background: url('images/future-proof/content-bg.jpg') no-repeat;
+ width: 1024px;
+ min-height: 300px;
+}
+
+/*-----------------------------
+ =Banner
+------------------------------*/
+.page-id-4732 #banner {
+ width: 100%;
+ height: 220px;
+}
+
+.page-id-4732 #banner div {
+ float: left;
+}
+
+.page-id-4732 #banner #left {
+ width: 50%;
+ margin-top: 40px;
+}
+
+.page-id-4732 #banner #middle {
+ width: 30%;
+}
+
+.page-id-4732 #banner #right {
+ width: 20%;
+}
+
+.page-id-4732 #banner #left p {
+ width: 60%;
+}
+
+.page-id-4732 #banner #right ul {
+ list-style: none;
+ margin-top: 70px;
+}
+
+.page-id-4732 #banner #right ul li {
+ padding-bottom: 15px;
+}
+
+.page-id-4732 #banner #right a {
+ font-weight: bold;
+ color: #67aade;
+ text-decoration: none;
+}
+
+.page-id-4732 #banner #right ul li a.trial {
+ text-indent: -9999px;
+ background: url('images/future-proof/free-trial-btn.jpg') no-repeat;
+ width: 186px;
+ height: 32px;
+ display: block;
+}
+
+/*-----------------------------
+ =Timeline
+------------------------------*/
+.page-id-4732 #box1 {
+ background: url('images/future-proof/reduce-complexity.jpg') no-repeat;
+ width: 259px;
+ height: 98px;
+ position: relative;
+ left: 0;
+ top: 35px;
+ float: left;
+}
+
+.page-id-4732 #box2 {
+ background: url('images/future-proof/storage-management.jpg') no-repeat;
+ width: 280px;
+ height: 98px;
+ position: relative;
+ left: 50px;
+ top: 170px;
+ float: left;
+}
+
+.page-id-4732 #box3 {
+ background: url('images/future-proof/scale-on-demand.jpg') no-repeat;
+ width: 279px;
+ height: 79px;
+ position: relative;
+ right: 353px;
+ top: 37px;
+ float: right;
+}
+
+.page-id-4732 #box4 {
+ background: url('images/future-proof/deploy-anywhere.jpg') no-repeat;
+ width: 280px;
+ height: 101px;
+ position: relative;
+ right: 28px;
+ top: 17px;
+ float: right;
+}
+
+.page-id-4732 #box1 .box-wrapper, #box3 .box-wrapper {
+ padding: 15px 55px 15px 15px
+}
+
+.page-id-4732 #box2 .box-wrapper, #box4 .box-wrapper {
+ padding: 13px 15px 15px 65px;
+} \ No newline at end of file
diff --git a/src/com.gluster.storage.management.console.help/html/gettingstarted/subtopic2.html b/src/org.gluster.storage.management.console.help/html/gettingstarted/ subtopic3.html
index 86bcbf9c..86bcbf9c 100644
--- a/src/com.gluster.storage.management.console.help/html/gettingstarted/subtopic2.html
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/ subtopic3.html
diff --git a/src/org.gluster.storage.management.console.help/html/gettingstarted/access_gmc_jws.html b/src/org.gluster.storage.management.console.help/html/gettingstarted/access_gmc_jws.html
new file mode 100644
index 00000000..ff18004a
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/access_gmc_jws.html
@@ -0,0 +1,43 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<link rel="stylesheet" href="../css/builder-gluster/style.css"
+type="text/css" media="screen" />
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Sub Topic</title>
+</head>
+
+<body>
+<h1>Accessing the Gluster Management Console Using Java Web Start</h1>
+<p>To start Gluster Management Console using Java web start, perform the following steps.
+<ol>
+<li>Open your web browser.
+<p>Ensure that your web browser has cookies and Javascript enabled.</p>
+<li>Type the following URL in your web browser:
+<p><FONT FACE = "Courier">https://server-name:8443/glustermg/</FONT></p>
+<p>Gluster Management Console login window is displayed</p>
+<p><img src="../images/GMC_Login_Window.jpg" alt="Login Window" />
+<li>Type the following default user name and password in the login window:
+<p>Username: gluster</p>
+<p>Password: syst3m</p>
+<p><b>Note:</b> In Mac OS, it is not possible to identify the CPU architecture through Java script. The system provides links to all possible combinations, click on the appropriate link to launch the application.</p>
+<li>When you access the application for the first time, the console requests you to change this password.
+<p><img src="../images/GMC_Change_Password.jpg" alt="Change Default Password" /></p>
+ <li>Type your current default password in the <b>Old Password</b> field.
+ <p>The default system-assigned password is syst3m.</p>
+ <li>Type your new password in the <b>New Password</b> field.
+ <li>Retype your new password in the <b>Confirm Password</b> field.
+ <li>Click <b>Change</b>. The system displays <b>Change Password</b> window
+ indicating that the password was successfully changed.
+ <p><img src="../images/GMC_Change_Password_Confirm.jpg" alt="Password Changed Successfully" /></p>
+
+ <li>Click <b>OK</b>. The <b>Select Cluster</b> window is
+ displayed. You can now create a new cluster or register an existing
+ cluster. For more information on creating or registering clusters,
+ refer to <a href="manage_cluster.html">Managing Clusters</a>.
+</ol>
+<p><b>Note:</b> You can change the password at any time by
+ accessing <b>Edit</b> > <b>Change Password</b>.
+</body>
+</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/gettingstarted/alerts.html b/src/org.gluster.storage.management.console.help/html/gettingstarted/alerts.html
new file mode 100644
index 00000000..69033fff
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/alerts.html
@@ -0,0 +1,24 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<link rel="stylesheet" href="../css/builder-gluster/style.css"
+type="text/css" media="screen" />
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <title>Sub Topic 2</title>
+</head>
+
+<body>
+<h1>Alerts</h1>
+Alerts section lists the typical alarm conditions found in your cluster environment. For example, low disk space is frequently a problem on managed machines. You can generate alerts for the critical conditions in your cluster by defining threshold conditions. An alert is generated when it reaches the threshold conditions that you set against server resources. These alerts are real-time data collected from your resources and are displayed in the <b>Cluster Summary</b> tab.
+<ul>
+<li>CPU utilization
+<li>Memory utilization
+<li>Disk-space utilization
+<li>Server offline
+<li>Brick offline
+</ul>
+<p>To know more on how you can set the thresholds conditions, refer
+to <a href="setting_alerts_prefs.html">Setting Alerts Preferences</a>.
+</body>
+</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/gettingstarted/change_password.html b/src/org.gluster.storage.management.console.help/html/gettingstarted/change_password.html
new file mode 100644
index 00000000..d5189d98
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/change_password.html
@@ -0,0 +1,38 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<link rel="stylesheet" href="../css/builder-gluster/style.css"
+type="text/css" media="screen" />
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Main Topic</title>
+</head>
+
+<body>
+<h1>Changing the Administrator&rsquo;s Password</h1>
+Gluster Management Console assigns a default password (gluster) to
+control access to the Management Console. When you access the
+application for the first time, the console requests you to change this
+password
+<p>To change the default administrator&rsquo;s password, perform the
+following steps.</p>
+<ol>
+ <li>Open your web browser.
+ <li>Type the following URL in your web browser:
+ <p><FONT FACE = "Courier">
+ https://server-name:webserver-port/glustermg/
+ </FONT></p>
+ <p><b>Gluster Management Console</b> login window is displayed.</p>
+ <p><img src="../images/GMC_Change_Password.jpg" height="150" width="250" alt="Change Default Password" /></p>
+ <li>Type your current password in the <b>Old Password</b> field.
+ <p>The default system-assigned password is syst3m.</p>
+ <li>Type your new password in the <b>New Password</b> field.
+ <li>Retype your new password in the <b>Confirm Password</b> field.
+ <li>Click <b>Change</b>. The system displays <b>Change Password</b> window
+ indicating that the password was successfully changed.
+ <p><img src="../images/GMC_Change_Password_Confirm.jpg" height="150" width="380"
+ alt="Password Changed Successfully" /></p>
+ <li>Click <b>OK</b>.
+</ol>
+</body>
+</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/gettingstarted/check_req_client.html b/src/org.gluster.storage.management.console.help/html/gettingstarted/check_req_client.html
new file mode 100644
index 00000000..76a44038
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/check_req_client.html
@@ -0,0 +1,27 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<link rel="stylesheet" href="../css/builder-gluster/style.css" type="text/css" media="screen" />
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Main Topic</title>
+</head>
+
+<body>
+<h1>Checking the Minimum Requirements of Client Machines</h1>
+
+<p>Verify the following:</p>
+<ul style="margin-top: 8px;">
+<li> Processor - 1.4GHz CPU</li>
+<li> Memory - 2 GB RAM</li>
+<li> Disk - 100 MB</li>
+<li> Operating Systems: Windows XP/Vista/7, Linux, Mac OS X</li>
+<li> Oracle JRE 1.6</li>
+</ul>
+<h2>Web Browser Requirements</h2>
+<ul>
+<li>Use your JRE installer to configure your browser for Java Web Start. Also, ensure that you have configured your browser to open .jnlp files using the Java Web Start application or javaws exe located in bin folder of your JRE installation.
+<li>When you access the Gluster Management Console, Java Web Start downloads all required .jar files from the Gateway server and launches the console&#39;s GUI. During this process, web start may display a certificate warning mentioning that the application is signed by Gluster, Inc.. This certificate is authentic, but it requires full permissions as the application contains features that require registering information on the client's hard disk such as exporting the security keys from gateway. You can accept the warning and select Always Trust Content from this Provider on your browser to avoid this warning every time you launch the application
+</ul>
+</body>
+</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/gettingstarted/check_req_gmg.html b/src/org.gluster.storage.management.console.help/html/gettingstarted/check_req_gmg.html
new file mode 100644
index 00000000..fa106b64
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/check_req_gmg.html
@@ -0,0 +1,23 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<link rel="stylesheet" href="../css/builder-gluster/style.css"
+type="text/css" media="screen" />
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Main Topic</title>
+</head>
+
+<body>
+<h1>Checking Gluster Management Gateway Minimum Requirements</h1>
+Gluster Management Gateway is installed on a central server using the Linux package published by Gluster. Before you install Gluster Management Gateway, you must verify that your environment matches the minimum requirements described in this section.
+<p><b>Note:</b> For checking the GlusterFS minimum requirements, refer to the <a href= "http://www.gluster.com/community/documentation/index.php/Gluster_3.2:_Checking_Minimum_Requirements" target="_blank">Gluster 3.2 Filesystem Installation Guide, Checking Minimum Requirements</a>.</p>
+<p>You must verify that your central server matches the minimum requirements listed below:</p>
+<ul>
+<li>Memory: 2 GB RAM
+<li>Processor: 2 (2.4 GHz each) recommended; 64 bit
+<li>Disk Space: 10 GB
+<li> The gateway machine can be either Gluster Storage Software Appliance, Gluster Virtual Storage Appliance, or CentOS 5.6.
+</ul>
+</body>
+</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/gettingstarted/cifs_service.html b/src/org.gluster.storage.management.console.help/html/gettingstarted/cifs_service.html
new file mode 100644
index 00000000..21ba31ec
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/cifs_service.html
@@ -0,0 +1,42 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<link rel="stylesheet" href="../css/builder-gluster/style.css"
+type="text/css" media="screen" />
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Sub Topic</title>
+</head>
+
+<body>
+<h1>CIFS Services</h1>
+<p>Common Internet File System (CIFS) operates as an application &#45; layer network protocol to provide shared access to files, printers, serial ports, and miscellaneous communications between nodes on a network. It also provides an authenticated inter&#45;process communication mechanism. Most usage of SMB involves computers running Microsoft Windows operating system.</p>
+<p>CIFS can be used as an access protocol by Microsoft Windows users to access files in a GlusterFS volume. Users will be able to perform regular file system operations such as creating files, read or write data to files, deletion of data through CIFS.</p>
+<p>Typically, all CIFS releated operations such as configuring CIFS services, creating and removing users, enabling CIFS re-export of a volume must be perfomed on each and every node of your cluster. Gluster Management Gateway provides an easy way to manage these opeartions, such as:
+<ul>
+<li>An user interface for enabling or disabling CIFS re-export of volumes and configuring CIFS users for a volume.</li>
+<li>Command line utilities for configuring CIFS services, creating and removing CIFS users on all the servers.</li>
+</ul>
+
+<h2>Configuring the CIFS Service</h2>
+<p>To configure CIFS, you must create a text file consisting of a list of servers (hostnames or IP addresses).</p>
+<p><b>Note:</b> You can configure CIFS on a fresh install or on an existing installation on the server which you have installed Gluster Management Gateway after adding the server to the cluster.</p>
+<p>Run the following command on the gateway server to configure CIFS:</p>
+<p><FONT FACE = "Courier">$ setup_cifs_config_all.py &lt;server list file&gt;</FONT></p>
+<p><b>Note:</b> Ensure that CIFS services are configured on all the servers of your cluster at all times. Any new servers added to the cluster, ensure that you configure CIFS services on them. This enables you to access the CIFS enabled volumes from any of the cluster nodes.
+<h2>Creating CIFS Users</h2>
+<p>You must create users and their password to enable them to use the CIFS access protocol.</p>
+<p>To create CIFS users, run the following on the gateway server:</p>
+<p><FONT FACE = "Courier">$ add_user_cifs_all.py &lt;server list file&gt; &lt;user name&gt; &lt;password&gt;</FONT></p>
+<ul>
+<li>Server list file – contains one server name per line
+</ul>
+<p>The user defined in the &lt;user name&gt; will be created on each and every server defined in &lt;server list file&gt;, will be assigned the same password defined in &lt;password&gt;.
+<p><b>Note:</b> Ensure that the CIFS user is created on all the servers of your cluster at all times which includes any new servers added to the cluster.
+
+<h2>Removing CIFS Users</h2>
+<p>You can delete users and their password.</p>
+<p>To delete CIFS users, run the following on the gateway server:</p>
+<p><FONT FACE = "Courier">$ delete_user_cifs_all.py &lt;server list&gt; &lt;user name&gt;</FONT></p>
+</body>
+</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/gettingstarted/configure_cifs.html b/src/org.gluster.storage.management.console.help/html/gettingstarted/configure_cifs.html
new file mode 100644
index 00000000..1b39f66a
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/configure_cifs.html
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Main Topic</title>
+</head>
+
+<body>
+<h1>Configuring</h1>
+<h2>Configuring CIFS Services on Your Cluster</h2>
+The SMB/CIFS server is configured via the file-servers.xml file in the
+WEB-INF\classes\alfresco folder
+</body>
+</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/gettingstarted/explore_gmc.html b/src/org.gluster.storage.management.console.help/html/gettingstarted/explore_gmc.html
new file mode 100644
index 00000000..8aee7171
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/explore_gmc.html
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<link rel="stylesheet" href="../css/builder-gluster/style.css"
+type="text/css" media="screen" />
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Exploring Gluster Management Console</title>
+</head>
+
+<body>
+<h1>Exploring Gluster Management Console</h1>
+<p>This section describes the main sections of the user interface and
+explains the type of functions you can perform using each section.</p>
+<p><b>Note:</b> You can use Gluster Management Console to set up different cloud environments; but can only manage one cloud in one login session.
+<p>The Gluster Management Console window is divided into two panes: a navigation tree in the left and a tabbed information pane in the right.
+<p><img src="../images/GMC_Landing_Page.jpg"
+ alt="Gluster Management Console" height="350" width="500" /></p>
+<ul>
+ <li><b>Left Pane:</b> The Left pane displays the cloud, it's
+ servers, and it's volumes.
+ <li><b>Right Pane: </b> At any point of time, the Right pane shows tabs with information that are applicable to the resource selected in the left pane such as Server, Volumes, Bricks, and Discovered Server.
+ <li><b>File Menu:</b> Helps you to exit the application.
+ <li><b>Edit Menu:</b> Helps you to import keys, export keys,
+ change password, change settings and refresh the application.
+ <li><b>Gluster Menu:</b> Helps you to manage your cluster,
+ servers, and volumes.
+For example, if you have selected volumes, the Gluster menu displays all volume related options.</ul>
+</body>
+</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/gettingstarted/gmc_install_overview.html b/src/org.gluster.storage.management.console.help/html/gettingstarted/gmc_install_overview.html
new file mode 100644
index 00000000..f8e5e954
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/gmc_install_overview.html
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<link rel="stylesheet" href="../css/builder-gluster/style.css"
+type="text/css" media="screen" />
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Main Topic</title>
+</head>
+
+<body>
+<h1>Gluster Management Console Installation Overview</h1>
+Please enter your text here.
+</body>
+</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/gettingstarted/gmc_terminal_window.html b/src/org.gluster.storage.management.console.help/html/gettingstarted/gmc_terminal_window.html
new file mode 100644
index 00000000..ee78defe
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/gmc_terminal_window.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<link rel="stylesheet" href="../css/builder-gluster/style.css"
+type="text/css" media="screen" />
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <title>Sub Topic</title>
+</head>
+
+<body>
+<h1>Terminal</h1>
+<p>The Gluster Management Console provides a stand-alone ANSI or vt102 terminal emulator that enables you to connect to servers through SSH.</p>
+<p>It processes ANSI control characters, including NUL, backspace, carriage return, linefeed, and a subset of ANSI escape sequences sufficient to enable the use of screen-oriented applications, such as vi, Emacs, and any GNU readline-enabled application such as Bash, bc, or ncftp.</p>
+<p><b>Note:</b> Gluster Terminal window is not a fully compliant vt100 or vt102 terminal emulator.</p>
+<p><img src="../images/GMC_Terminal_window.jpg" alt="Terminal Window" />
+<p>You must provide SSH connection details to connect to the required host. Here is a screenshot of how to configure these settings on Gluster Management Console.
+<p><img src="../images/GMC_terminal_Settings.jpg" alt="Terminal Window" />
+</body>
+</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/gettingstarted/gmc_toolbar.html b/src/org.gluster.storage.management.console.help/html/gettingstarted/gmc_toolbar.html
new file mode 100644
index 00000000..77681663
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/gmc_toolbar.html
@@ -0,0 +1,98 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<link rel="stylesheet" href="../css/builder-gluster/style.css"
+type="text/css" media="screen" />
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Main Topic</title>
+</head>
+
+<body>
+<h1>Gluster Management Console Toolbar</h1>
+The Toolbar provides shortcuts to the main Gluster Management Console functions.
+<p>The table below describes the buttons on the toolbar of the console.</p>
+<table border="1">
+<tr>
+<th>Icon</th>
+<th>Description</th>
+</tr>
+<tr>
+<td><img src="../images/GMC_terminal_toolbar.jpg" alt="Terminal Icon" /></td>
+<td>Launches the terminal window that allows you type system commands.</td>
+</tr>
+<tr>
+<td><img src="../images/GMC_settings.jpg" alt="Preferences Icon" /></td>
+<td>Opens the Preferences window.</td>
+</tr>
+<tr>
+<td><img src="../images/GMC_Refresh.jpg" alt="Refresh Icon" /></td>
+<td>Refreshes the application.</td>
+</tr>
+<tr>
+<td><img src="../images/GMC_add_server_icon.jpg" alt="Add Server Icon" /></td>
+<td>Allows you to add a server to a cluster.</td>
+</tr>
+<tr>
+<td><img src="../images/GMC_Remove_Server_icon.jpg" alt="Remove Server Icon" /></td>
+<td>Allows you to removes a server from a cluster.</td>
+</tr>
+<tr>
+<td><img src="../images/GMC_Create_Vol_icon.jpg" alt="Create Volume Icon" /></td>
+<td>Opens the Create Volume window.</td>
+</tr>
+<tr>
+<td><img src="../images/GMC_start_vol_icon.jpg" alt="Create Volume Icon" /></td>
+<td>Allows you to start a volume.</td>
+</tr>
+<tr>
+<td><img src="../images/GMC_stop_vol_icon.jpg" alt="Stop Volume Icon" /></td>
+<td>Allows you to stop a volume.</td>
+</tr>
+<tr>
+<td><img src="../images/GMC_remove_volume_icon.jpg" alt="Remove Volume Icon" /></td>
+<td>Allows you to removes a volume.</td>
+</tr>
+<tr>
+<td><img src="../images/GMC_Rebalance_icon.jpg" alt="Rebalance Volume Icon" /></td>
+<td>Allows you to rebalance a volume.</td>
+</tr>
+<tr>
+<td><img src="../images/GMC_setting_icon.jpg" alt="Reset Volume Option Icon" /></td>
+<td>Allows you to reset the volume options.</td>
+</tr>
+<tr>
+<td><img src="../images/GMC_download_log_icon.jpg" alt="Download Log Icon" /></td>
+<td>Allows you to download logs.</td>
+</tr>
+<tr>
+<td><img src="../images/GMC_Add_Brick_icon.jpg" alt="Add Brick Icon" /></td>
+<td>Opens the Add Brick window.</td>
+</tr>
+<tr>
+<td><img src="../images/GMC_Remove_Brick_icon.jpg" alt="Remove Brick Icon" /></td>
+<td>Removes brick from a volume.</td>
+</tr>
+<tr>
+<td><img src="../images/GMC_migrate_brick_icon.jpg" alt="Migrate Brick Icon" /></td>
+<td>Migrates a brick from one volume to another.</td>
+</tr>
+<tr>
+<td><img src="../images/GMC_Start_task_icon.jpg" alt="Start Task Icon" /></td>
+<td>Allows you to start a task from the Tasks tab.</td>
+</tr>
+<tr>
+<td><img src="../images/GMC_Stop_icon.jpg" alt="Stop Task Icon" /></td>
+<td>Allows you to stop a task from the Tasks tab.</td>
+</tr>
+<tr>
+<td><img src="../images/GMC_pause_icon.jpg" alt="Pause Task Icon" /></td>
+<td>Allows you to pause a task from the Tasks tab.</td>
+</tr>
+<tr>
+<td><img src="../images/GMC_Clear_task_icon.jpg" alt="Clear Task Icon" /></td>
+<td>Allows you to clear completed task from the Tasks tab.</td>
+</tr>
+</table>
+</body>
+</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/gettingstarted/gmg_install_overview.html b/src/org.gluster.storage.management.console.help/html/gettingstarted/gmg_install_overview.html
new file mode 100644
index 00000000..e6b44580
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/gmg_install_overview.html
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<link rel="stylesheet" href="../css/builder-gluster/style.css"
+type="text/css" media="screen" />
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Main Topic</title>
+</head>
+
+<body>
+<h1>Gluster Management Gateway Installation Overview</h1>
+Please enter your text here.
+</body>
+</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/gettingstarted/install_gmg.html b/src/org.gluster.storage.management.console.help/html/gettingstarted/install_gmg.html
new file mode 100644
index 00000000..94d26c03
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/install_gmg.html
@@ -0,0 +1,49 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<link rel="stylesheet" href="../css/builder-gluster/style.css"
+type="text/css" media="screen" />
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Sub Topic</title>
+</head>
+
+<body>
+<h1>Installing the Gluster Management Gateway</h1>
+
+<p>To install the Gluster Management Gateway, perform the following steps:</p>
+<ol>
+<li>Download the Gluster Management Gateway repository configuration file (<FONT FACE = "Courier">glustermg.repo</FONT>) and the Gluster Management Gateway RPM (<FONT FACE = "Courier">glustermg-1.0.0-1.x86_64.rpm</FONT>) from the location provided by Gluster.
+<p><b>Note:</b> <FONT FACE = "Courier">glustermg.repo</FONT> has been created and tested with CentOS 5.6. It may work with other versions of CentOS, however it has not been extensively tested.
+<li>Save the file in the following location on your machine:
+<p><FONT FACE = "Courier">/etc/yum.repos.d/</FONT>
+<li> Run the following command to install Gluster Management Gateway:
+<p><FONT FACE = "Courier"># yum groupinstall glustermg</FONT>
+<li>The following packages are installed if not installed earlier:
+<ul>
+<li>Java SE runtime version 1.6 &ndash; OpenJDK v1.6.0.0
+<li>Tomcat v5.5.23 or higher
+<li>wget
+</ul>
+<li>Run the following command to install Gluster Management Gateway.
+<p><FONT FACE = "Courier">rpm -ivh glustermg-1.0.0-1.x86_64.rpm </FONT>
+</ol>
+<p>Gateway generates SSH keys during installation. These keys are stored in the following location <FONT FACE = "Courier">/opt/glustermg/keys</FONT>. These keys are used for communication with the storage servers. However, in Amazon Web Services (AWS) environment, SSH communication is done using the private key provided by Amazon. Hence, the AWS genegrated private key (.pem file) must be stored in <FONT FACE = "Courier">/opt/glustermg/keys</FONT> and the file must be named as <FONT FACE = "Courier">gluster.pem</FONT></p>
+<p><b>Note:</b>
+<ul>
+<li>You can install the Gluster Management Gateway packages on a Gluster Storage Server. However, this can impact performance of the GlusterFS processes on this machine hence this is not recommended.
+
+ <li>The Gluster Management Gateway is shipped with a self-signed
+ SSL certificate, by default. While this ensures that the communication
+ between the console and gateway is encrypted and safe, some browsers
+ may throw security warnings mentioning that the site is not secure. It
+ is highly recommended that you install your own SSL certificate issued
+ by a valid certifying authority in the tomcat5 configuration for the
+ 8443 port. For more information on obtaining your own service
+ certificate, refer to <a href="http://tomcat.apache.org/tomcat-5.5-doc/ssl-howto.html#Installing_a_Certificate_from_a_Certificate_Authority" target="_blank">Installing a Certificate from a
+ Certificate Authority</a> from Tomcat documentation.
+ <li>Ensure to enable port 8443 (HTTPS), port 24731 (TCP), and port 24729 (UDP) on the gateway.
+<li>Gluster Management Gateway communicates with all storage servers through SSH, using their host names. Make sure all of your storage server&#39;s host names (fully qualified domain names) are resolvable by the Gateway and by each other. If you have a properly configured DNS setup, this should work seamlessly.
+</ul>
+</body>
+</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/gettingstarted/install_gmg_backend.html b/src/org.gluster.storage.management.console.help/html/gettingstarted/install_gmg_backend.html
new file mode 100644
index 00000000..fad76f27
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/install_gmg_backend.html
@@ -0,0 +1,47 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<link rel="stylesheet" href="../css/builder-gluster/style.css"
+type="text/css" media="screen" />
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Sub Topic</title>
+</head>
+
+<body>
+<h1>Installing Gluster Management Gateway Backend Package</h1>
+Gluster Management Gateway communicates with every node of your cluster using the backend package. This package must be installed on each and every node of your cluster using the Linux package published by Gluster.
+<p><b>Pre-requisite</b></p>
+<ul>
+<li> Your backend machines can be either Gluster Storage Software Appliance, Gluster Virtual Storage Appliance, or CentOS 5.6 running GlusterFS v3.2.3 or higher.
+</ul>
+
+<p>To install the backend packages on each and every node of your cluster, perform the following steps:</p>
+<ol>
+<li>Download Gluster Management Gateway repository configuration file (<FONT FACE = "Courier">glustermg.repo</FONT>) and the Gluster Management Gateway Backend RPM (<FONT FACE = "Courier">glustermg-backend-1.0.0-1.x86_64.rpm</FONT>) from the location provided by Gluster. :
+<p><b>Note:</b> <FONT FACE = "Courier">glustermg.repo</FONT> has been created and tested with CentOS 5.6. It may work with other versions of CentOS, however it has not been extensively tested.
+<li>Save the file in the following location on your machine:
+<p><FONT FACE = "Courier">/etc/yum.repos.d/</FONT>
+<li>Run the following command to install the glustermg-backend dependencies:
+<p><FONT FACE = "Courier">rpm -ivh glustermg-backend-1.0.0-1.x86_64.rpm</FONT>
+<li>The following backend packages are installed if not installed earlier:
+<ul>
+<li>chkconfig
+<li>python v2.4.3
+<li>perl v5.8.8
+<li>rrdtool-perl v1.2.27
+<li>appliance-base v1.3
+<li>sudo
+<li>crontabs
+<li>samba3
+<li>libxml2 v2.6
+</ul>
+</ol>
+<p><b>Note:</b>
+<ul>
+<li>You must enable port 24729 (UDP) for auto discovery of servers.
+<li>In case CIFS only, the Samba services must be configured to run on port 445 which needs to be enabled and open on all the storage servers in your cluster.
+<li>Paravirtual VMs on Xen are not supported.
+</ul>
+</body>
+</html> \ No newline at end of file
diff --git a/src/com.gluster.storage.management.console.help/html/reference/maintopic.html b/src/org.gluster.storage.management.console.help/html/gettingstarted/maintopic (4).html
index a476078a..dccb80ab 100644
--- a/src/com.gluster.storage.management.console.help/html/reference/maintopic.html
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/maintopic (4).html
@@ -1,13 +1,13 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-
-<html>
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
- <title>Main Topic</title>
-</head>
-
-<body>
-<h1>Main Topic</h1>
-Please enter your text here.
-</body>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <title>Main Topic</title>
+</head>
+
+<body>
+<h1>Main Topic</h1>
+Please enter your text here.
+</body>
</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/gettingstarted/maintopic - Copy (3).html b/src/org.gluster.storage.management.console.help/html/gettingstarted/maintopic - Copy (3).html
new file mode 100644
index 00000000..dccb80ab
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/maintopic - Copy (3).html
@@ -0,0 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <title>Main Topic</title>
+</head>
+
+<body>
+<h1>Main Topic</h1>
+Please enter your text here.
+</body>
+</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/gettingstarted/maintopic - Copy (4).html b/src/org.gluster.storage.management.console.help/html/gettingstarted/maintopic - Copy (4).html
new file mode 100644
index 00000000..dccb80ab
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/maintopic - Copy (4).html
@@ -0,0 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <title>Main Topic</title>
+</head>
+
+<body>
+<h1>Main Topic</h1>
+Please enter your text here.
+</body>
+</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/gettingstarted/maintopic - Copy.html b/src/org.gluster.storage.management.console.help/html/gettingstarted/maintopic - Copy.html
new file mode 100644
index 00000000..dccb80ab
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/maintopic - Copy.html
@@ -0,0 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <title>Main Topic</title>
+</head>
+
+<body>
+<h1>Main Topic</h1>
+Please enter your text here.
+</body>
+</html> \ No newline at end of file
diff --git a/src/com.gluster.storage.management.console.help/html/gettingstarted/maintopic.html b/src/org.gluster.storage.management.console.help/html/gettingstarted/maintopic.html
index a476078a..dccb80ab 100644
--- a/src/com.gluster.storage.management.console.help/html/gettingstarted/maintopic.html
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/maintopic.html
@@ -1,13 +1,13 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-
-<html>
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
- <title>Main Topic</title>
-</head>
-
-<body>
-<h1>Main Topic</h1>
-Please enter your text here.
-</body>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <title>Main Topic</title>
+</head>
+
+<body>
+<h1>Main Topic</h1>
+Please enter your text here.
+</body>
</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/gettingstarted/manage_bricks.html b/src/org.gluster.storage.management.console.help/html/gettingstarted/manage_bricks.html
new file mode 100644
index 00000000..96233f0e
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/manage_bricks.html
@@ -0,0 +1,19 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<link rel="stylesheet" href="../css/builder-gluster/style.css"
+type="text/css" media="screen" />
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Sub Topic 2</title>
+</head>
+
+<body>
+<h1>Managing Bricks</h1>
+Brick is the basic unit of storage, represented by an export directory
+on a server in the storage cluster. You can expand, shrink, and migrate
+volume of you cluster, as required, by adding new bricks, removing
+bricks, and migrating bricks.
+<p><b>Note:</b> You need to add at least one brick to a distributed volume, multiples of two bricks to replicated volumes, multiples of four bricks to striped volumes when expanding your storage space.</p>
+</body>
+</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/gettingstarted/manage_cluster.html b/src/org.gluster.storage.management.console.help/html/gettingstarted/manage_cluster.html
new file mode 100644
index 00000000..17b7f0a8
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/manage_cluster.html
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<link rel="stylesheet" href="../css/builder-gluster/style.css"
+type="text/css" media="screen" />
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Main Topic</title>
+</head>
+
+<body>
+<h1>Managing Clusters</h1>
+A cluster is a group of linked computers, working together closely thus
+in many respects forming a single computer. Gluster Management Console
+enables you to create, register and select cluster.
+<h2>Cluster Summary</h2>
+<p>The console enables you to monitor your cluster resources from
+the <b>Summary</b> tab. To display the summary of your cluster, click the
+cluster node from the left pane of the console window. The summary of
+the selected cluster is displayed in the right pane of the console
+window.
+<p><img src="../images/GMC_Cluster_Summary_tab_new.jpg" alt="Cluster Summary" />
+<p>After you log into the application successfully, you will be prompted to:
+<ul>
+<li><a href="select_cluster.html">Selecting a Cluster</a>: The cluster you will manage in the login session.
+<li><a href="create_cluster.html">Creating a Cluster</a>: Creating an empty cluster that can be expanded using the console.
+<li><a href="register_cluster.html">Registering a Cluster</a>: Registering an existing cluster and start managing it through the console.
+</ul>
+</body>
+</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/gettingstarted/manage_logs.html b/src/org.gluster.storage.management.console.help/html/gettingstarted/manage_logs.html
new file mode 100644
index 00000000..790fc206
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/manage_logs.html
@@ -0,0 +1,28 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<link rel="stylesheet" href="../css/builder-gluster/style.css"
+type="text/css" media="screen" />
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Managing Logs</title>
+</head>
+
+<body>
+<h1>Managing Logs</h1>
+You can download volume logs to your local machine to analyze and archive or you can retrieve volume logs based on a search criteria. This section describes how you can manage logs on your storage cluster.
+<p>Typically, the log file includes:</p>
+<ul>
+ <li>Installation messages
+ <li>Removal messages
+ <li>Configuration messages
+ <li>Informational messages
+</ul>
+<p>The Gluster Management Gateway log files are stored in the following locations on your server:</p>
+<ul>
+<li>Tomcat servlet container logs - <FONT FACE = "Courier">/var/log/tomcat5/catalina.out</FONT>
+<li>Gluster Management Gateway logs - <FONT FACE = "Courier">/var/log/glustermg/glustermg.log</FONT>
+</ul>
+
+</body>
+</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/gettingstarted/manage_servers.html b/src/org.gluster.storage.management.console.help/html/gettingstarted/manage_servers.html
new file mode 100644
index 00000000..1326eb34
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/manage_servers.html
@@ -0,0 +1,22 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<link rel="stylesheet" href="../css/builder-gluster/style.css"
+type="text/css" media="screen" />
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Main Topic</title>
+</head>
+
+<body>
+<h1>Managing Your Servers</h1>
+A server is a computer on a network that is used as a storage node in a cluster. You can add a new server to the storage cluster to expand the amount of available storage.
+<h2>Server Summary</h2>
+<p>The console enables you to monitor your servers in your cluster
+from the <b>Summary</b> tab. To display the summary of your cluster, click the
+<b>Server </b>node from the left pane of the console window. The summary of the
+servers in your cluster is displayed in the right pane of the console
+window. It also displays the <b>Tasks</b> and <b>Alerts</b>.</p>
+<p><img src="../images/GMC_Server_Summary_tab.jpg" alt="Server Summary" />
+</body>
+</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/gettingstarted/manage_volumes.html b/src/org.gluster.storage.management.console.help/html/gettingstarted/manage_volumes.html
new file mode 100644
index 00000000..a37ed7b4
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/manage_volumes.html
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<link rel="stylesheet" href="../css/builder-gluster/style.css"
+type="text/css" media="screen" />
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Managing Volumes</title>
+</head>
+
+<body>
+<h1>Managing Volumes</h1>
+<p>A volume is a logical collection of bricks where each brick is an
+export directory on a server in the trusted storage pool. Most of the
+Gluster management operations happen on the volume. The volume is the
+designated unit of administration in GlusterFS, so managing them is a
+large part of the administrator's duties. This section explains how to
+manage the volumes stored on file server machines.
+<p>You can use Volumes to do the following:
+<ul>
+ <li> Create a new volume </li>
+ <li>Start a volume </li>
+ <li>Stop a volume </li>
+ <li>Migrate a volume</li>
+ <li>Rebalance a volume</li>
+</ul>
+<h2>Volume Summary</h2>
+<p>The console also enables you to monitor the volumes in your cluster from the <b>Summary</b> tab. To display the summary of your volumes,
+click the Volume node from the left pane of the console window. The summary of the volumes is displayed in the right pane of the console
+window. It also displays <B>Tasks</B> and <B>Alerts</B> of all the volumes.
+<p><img src="../images/GMC_Volume_Summary.jpg" alt="Volume Summary" />
+
+</body>
+</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/gettingstarted/monitor_resources.html b/src/org.gluster.storage.management.console.help/html/gettingstarted/monitor_resources.html
new file mode 100644
index 00000000..907f2d73
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/monitor_resources.html
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<link rel="stylesheet" href="../css/builder-gluster/style.css"
+type="text/css" media="screen" />
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Main Topic</title>
+</head>
+
+<body>
+<h1>Monitoring Cluster Resources</h1>
+Gluster Management Console enables you to monitor your cluster resources
+such as through Summary Tab. You can monitor resources such as CPU
+usage, Alerts, Tasks, Network usage and so on.
+<p>To monitor resources in your cluster, perform the following
+steps.</p>
+<ol>
+ <li>Select your resource at the node level. For example, choose
+ your cluster. The Summary tab displays the historical graphical
+ representations of your clusters key resources such as CPU, memory,
+ network usage, and disk utilization by day, week, or month. In case of
+ Network usage, the graph will be displayed for the selected network
+ from the drop down list.
+ <p><b>Note:</b> At any point of time, the <b>Summary</b> tab will show views that
+ are applicable to the resource selected from the navigation tree in the
+ left pane.</p>
+ <p><img src="../images/GMC_Cluster_Summary_tab.jpg"
+ width="75%" alt="Volume Created Successfuly" /></p>
+ <li>Click to expand other resource nodes such as Volume, Bricks,
+ and Server to display the respective details, as required.
+</ol>
+</body>
+</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/gettingstarted/resetting_pwd.html b/src/org.gluster.storage.management.console.help/html/gettingstarted/resetting_pwd.html
new file mode 100644
index 00000000..723a6776
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/resetting_pwd.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<link rel="stylesheet" href="../css/builder-gluster/style.css"
+type="text/css" media="screen" />
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Sub Topic 2</title>
+</head>
+
+<body>
+<h1>Resetting the Password</h1>
+If you have managed to get locked out of your Gluster Management Console, you will be able to reset the password if you are the administrator of the Tomcat server.
+<p><b>Note:</b> Ensure to stop the tomcat5 service before running this script.</p>
+<p>You can reset the password by running the following tool on your tomcat server:</p>
+<p><FONT FACE = "Courier">/opt/glustermg/1.0.0/scripts/gmg-reset-password.sh</FONT></p>
+<p>The tool resets the password to the default system password &ldquo;syst3m&rdquo;.</p>
+
+</body>
+</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/gettingstarted/security_keys.html b/src/org.gluster.storage.management.console.help/html/gettingstarted/security_keys.html
new file mode 100644
index 00000000..5b723899
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/security_keys.html
@@ -0,0 +1,32 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<link rel="stylesheet" href="../css/builder-gluster/style.css"
+type="text/css" media="screen" />
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Sub Topic</title>
+</head>
+
+<body>
+<h1>Security Keys</h1>
+Gluster Management Gateway communicates with storage servers using public key authentication. This establishes trust between your account on your central server and the new machine you just added to your cluster. Administrators can export and/or import the SSH keys (of the gateway) for security reasons from the Gluster Management Gateway server.
+<h2>Importing Keys</h2>
+<p>To import the security keys, perform the following steps:</p>
+<ol>
+<li>Choose <b>Edit</b> > <b>Import Keys</b>
+<li>A window is displayed allowing you to choose the download location on your machine.
+<li>Choose the location, and click <b>Save</b>.
+<p>The security keys are imported from the gateway server to the location you specified in ssh-keys.tar file format.
+</ol>
+<h2>Exporting Keys</h2>
+<p>To export the security keys, perform the following steps:</p>
+<ol>
+<li>Choose <b>Edit</b> > <b>Export Keys</b>
+<li>A window is displayed allowing you to choose the location on your machine.
+<li>Choose the location, and click <b>Save</b>.
+<p>The security keys are exported on to gateway server to the location you specified in a .tar file format.</p>
+</ol>
+
+</body>
+</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/gettingstarted/setting_alerts_prefs.html b/src/org.gluster.storage.management.console.help/html/gettingstarted/setting_alerts_prefs.html
new file mode 100644
index 00000000..5673586e
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/setting_alerts_prefs.html
@@ -0,0 +1,27 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<link rel="stylesheet" href="../css/builder-gluster/style.css"
+type="text/css" media="screen" />
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Sub Topic</title>
+</head>
+
+<body>
+<h1>Setting Alerts Preferences</h1>
+Thresholds are the critical conditions that you define in Gluster Management Console.
+<p>To set the thresholds, perform the following steps:</p>
+<ol>
+<li>Choose <b>Edit</b> &gt; <b>Settings</b> &gt; <b>Alerts</b>
+<p>The Preferences window displays the <b>Alerts</b> page on the right pane of the window.</p>
+
+<p><img src="../images/GMC_Alerts.jpg" alt="Alerts Perferences" /></p>
+<li>Type the value for server CPU threshold limits in the <b>Server CPU Threshold</b> field.
+<li>Type the value for server memory usage threshold in the <b>Server Memory Usage Threshold</b> field.
+<li>Type the value for disk space usage threshold in the <b>Disk Space Threshold</b> field.
+<li>Click <b>Apply</b>.
+<li>Click <b>OK</b> to exit the <b>Preferences</b> window.
+</ol>
+</body>
+</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/gettingstarted/setting_charts_prefs.html b/src/org.gluster.storage.management.console.help/html/gettingstarted/setting_charts_prefs.html
new file mode 100644
index 00000000..e85d9324
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/setting_charts_prefs.html
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<link rel="stylesheet" href="../css/builder-gluster/style.css"
+type="text/css" media="screen" />
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Sub Topic</title>
+</head>
+
+<body>
+<h1>Setting the Charts Preferences</h1>
+You can customize the console and change the way some of the monitoring data is displayed, as described in this section.
+<p><b>Note:</b> The default duration for all the charts is a day.</p>
+<p>To set the display of the charts, perform the following:</p>
+<ol>
+<li>Choose <b>Edit</b> &gt; <b>Settings</b> &gt; <b>Charts</b>
+<p>The Preferences window displays the <b>Charts</b> page on the right pane of the window.</p>
+<p><img src="../images/GMC_Charts.jpg" alt="Charts Perferences"/></p>
+<li>Select the <b>Aggregated CPU Usage chart period</b> from the drop down list.
+<li>Select the <b>Aggregated Network Usage chart period</b> from the drop down list.
+<li>Select the <b>CPU Usage chart period</b> from the drop down list.
+<li>Select the <b>Memory Usage chart period</b> from the drop down list.
+<li>Select the <b>Network Usage chart period</b> from the drop down list.
+<li>Click <b>Apply</b>.
+<li>Click <b>OK</b> to exit the <b>Preferences</b> window.
+</ol>
+</body>
+</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/gettingstarted/setting_gluster_prefs.html b/src/org.gluster.storage.management.console.help/html/gettingstarted/setting_gluster_prefs.html
new file mode 100644
index 00000000..16db7708
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/setting_gluster_prefs.html
@@ -0,0 +1,25 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<link rel="stylesheet" href="../css/builder-gluster/style.css"
+type="text/css" media="screen" />
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Sub Topic</title>
+</head>
+
+<body>
+<h1>Setting Gluster Preferences</h1>
+Please enter your text here.
+<p>To set the Gluster perferences, perform the following steps:
+<ol>
+<li>Choose <b>Edit</b> &gt; <b>Settings</b> &gt; <b>Gluster</b>
+<p>The Preferences window displays the <b>Gluster</b> page on the right pane of the window.</p>
+<p><img src="../images/GMC_Preferences_gluster.jpg" alt="Gluster Perferences" /></p>
+<li>Select <b>Show Cluster Selection Dialog on Login</b>, if you want your cluster name to appear when you launch the application.
+<li>Choose your cluster name from <b>Default Cluster to Manage</b> drop down list to manage the default cluster you wish to manage when you launch the application.</li>
+<li>Type the duration (in sec) of the refresh intervals in the <b>Refresh Interval</b> field.
+<li>Click <b>Apply</b>.
+<li>Click <b>OK</b> to exit the <b>Preferences</b> window.
+</body>
+</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/gettingstarted/setting_preferences.html b/src/org.gluster.storage.management.console.help/html/gettingstarted/setting_preferences.html
new file mode 100644
index 00000000..13f9f54c
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/setting_preferences.html
@@ -0,0 +1,22 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<link rel="stylesheet" href="../css/builder-gluster/style.css"
+type="text/css" media="screen" />
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Preferences</title>
+
+</head>
+
+<body>
+<h1>Preferences</h1>
+You can use preferences to configure several aspects of the Gluster Management Console. These include setting preferences for the console, alerts, charts, and terminal.
+<ul>
+<li><a href="setting_gluster_prefs.html">Setting Gluster Preferences</a>
+<li><a href="setting_alerts_prefs.html">Setting Alert Preferences</a>
+<li><a href="setting_charts_prefs.html">Setting Charts Preferences</a>
+<li><a href="setting_terminal_prefs.html">Setting Terminal Preferences</a>
+</ul>
+</body>
+</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/gettingstarted/setting_terminal_prefs.html b/src/org.gluster.storage.management.console.help/html/gettingstarted/setting_terminal_prefs.html
new file mode 100644
index 00000000..8f381665
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/setting_terminal_prefs.html
@@ -0,0 +1,26 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<link rel="stylesheet" href="../css/builder-gluster/style.css"
+type="text/css" media="screen" />
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Sub Topic</title>
+</head>
+
+<body>
+<h1>Setting Terminal Preferences</h1>
+<p>You can customize the terminal window as described in this section.</p>
+<p>To set the display of the charts, perform the following:</p>
+<ol>
+<li>Choose <b>Edit</b> &gt; <b>Settings</b> &gt; <b>Terminal</b>
+<p>The Preferences window displays the <b>Terminal</b> page on the right pane of the window.</p>
+<p><img src="../images/GMC_Preferences_terminal.jpg" alt="Gluster Perferences" /></p>
+<li>Type the limit of terminal buffer lines in the <b>Terminal buffer lines</b> field.
+<li>Type the value of the serial timeout in the <b>Serial timeout</b> field.</li>
+<li>Type the value of the network timeout in the <b>Network timeout</b> field.
+<li>Click <b>Apply</b>.
+<li>Click <b>OK</b> to exit the <b>Preferences</b> window.
+</ol>
+</body>
+</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/gettingstarted/setting_the_gmc.html b/src/org.gluster.storage.management.console.help/html/gettingstarted/setting_the_gmc.html
new file mode 100644
index 00000000..92641ccb
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/setting_the_gmc.html
@@ -0,0 +1,15 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<link rel="stylesheet" href="../css/builder-gluster/style.css"
+type="text/css" media="screen" />
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Main Topic</title>
+</head>
+
+<body>
+<h1>Setting up the Management Console</h1>
+Please enter your text here.
+</body>
+</html> \ No newline at end of file
diff --git a/src/com.gluster.storage.management.console.help/html/reference/subtopic.html b/src/org.gluster.storage.management.console.help/html/gettingstarted/subtopic (3) - Copy.html
index 8a61c501..6dccc35e 100644
--- a/src/com.gluster.storage.management.console.help/html/reference/subtopic.html
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/subtopic (3) - Copy.html
@@ -1,13 +1,13 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-
-<html>
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
- <title>Sub Topic</title>
-</head>
-
-<body>
-<h1>Sub Topic</h1>
-Please enter your text here.
-</body>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <title>Sub Topic</title>
+</head>
+
+<body>
+<h1>Sub Topic</h1>
+Please enter your text here.
+</body>
</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/gettingstarted/subtopic (3).html b/src/org.gluster.storage.management.console.help/html/gettingstarted/subtopic (3).html
new file mode 100644
index 00000000..6dccc35e
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/subtopic (3).html
@@ -0,0 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <title>Sub Topic</title>
+</head>
+
+<body>
+<h1>Sub Topic</h1>
+Please enter your text here.
+</body>
+</html> \ No newline at end of file
diff --git a/src/com.gluster.storage.management.console.help/html/tasks/subtopic.html b/src/org.gluster.storage.management.console.help/html/gettingstarted/subtopic.html
index 8a61c501..6dccc35e 100644
--- a/src/com.gluster.storage.management.console.help/html/tasks/subtopic.html
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/subtopic.html
@@ -1,13 +1,13 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-
-<html>
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
- <title>Sub Topic</title>
-</head>
-
-<body>
-<h1>Sub Topic</h1>
-Please enter your text here.
-</body>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <title>Sub Topic</title>
+</head>
+
+<body>
+<h1>Sub Topic</h1>
+Please enter your text here.
+</body>
</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/gettingstarted/subtopic2 (2).html b/src/org.gluster.storage.management.console.help/html/gettingstarted/subtopic2 (2).html
new file mode 100644
index 00000000..5ece5749
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/subtopic2 (2).html
@@ -0,0 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <title>Sub Topic 2</title>
+</head>
+
+<body>
+<h1>Sub Topic 2</h1>
+Please enter your text here.
+</body>
+</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/gettingstarted/subtopic2 (3).html b/src/org.gluster.storage.management.console.help/html/gettingstarted/subtopic2 (3).html
new file mode 100644
index 00000000..d443ce80
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/subtopic2 (3).html
@@ -0,0 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Sub Topic 2</title>
+</head>
+
+<body>
+<h1>Sub Topic 2</h1>
+Please enter your text here.
+</body>
+</html> \ No newline at end of file
diff --git a/src/com.gluster.storage.management.console.help/html/reference/subtopic2.html b/src/org.gluster.storage.management.console.help/html/gettingstarted/subtopic2.html
index 86bcbf9c..86bcbf9c 100644
--- a/src/com.gluster.storage.management.console.help/html/reference/subtopic2.html
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/subtopic2.html
diff --git a/src/org.gluster.storage.management.console.help/html/gettingstarted/tasks.html b/src/org.gluster.storage.management.console.help/html/gettingstarted/tasks.html
new file mode 100644
index 00000000..c5647b9a
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/gettingstarted/tasks.html
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+<link rel="stylesheet" href="../css/builder-gluster/style.css"
+type="text/css" media="screen" />
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Sub Topic</title>
+</head>
+
+<body>
+<h1>Tasks</h1>
+<b>Task</b> tab is displayed when you select the cluster node. It displays the status of all running tasks such as disk initialization, brick migration, volume rebalance.
+<p><img src="../images/GMC_Task_tab.jpg" alt="Task Tab"/></p>
+<p>When you select a task on this tab, the relevent toolbar options are enabled. These include pause, resume, abort, commit, or clear operations.
+</body>
+</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/help_home.html b/src/org.gluster.storage.management.console.help/html/help_home.html
new file mode 100644
index 00000000..b9c17b9e
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/help_home.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<link rel="stylesheet" href="css/builder-gluster/style.css"
+type="text/css" media="screen" />
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Gluster Management Console</title>
+</head>
+<body>
+<h1>Gluster Management Console Help</h1>
+
+<p>Gluster Management Console offers an advanced yet simple-to-use
+graphical user interface (GUI) to manage your clustered storage
+environment.</p>
+
+<p>This help explains the console interface when working with
+Gluster Filesystem. It also describes how you can work with the Gluster
+Management Console to add servers, create volumes, monitor the system,
+manage logs, download server configurations, and more.</p>
+
+<p>For information about how to install Gluster Filesystem, refer to
+the <a
+ href="http://www.gluster.com/community/documentation/index.php/Gluster_3.2_Filesystem_Installation_Guide" target="_blank">Gluster
+3.2 Filesystem Installation Guide</a>. For information about accessing the
+cluster using client systems, <a
+ href="http://www.gluster.com/community/documentation/index.php/Gluster_3.2:_Accessing_Data_-_Setting_Up_GlusterFS_Client" target="_blank">Gluster
+3.2: Accessing Data - Setting Up GlusterFS Client</a>.</p>
+</body>
+</html> \ No newline at end of file
diff --git a/src/org.gluster.storage.management.console.help/html/images/Delete-brick.png b/src/org.gluster.storage.management.console.help/html/images/Delete-brick.png
new file mode 100644
index 00000000..d93aa173
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/Delete-brick.png
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC-Preferences-alerts .jpg b/src/org.gluster.storage.management.console.help/html/images/GMC-Preferences-alerts .jpg
new file mode 100644
index 00000000..d57c6adc
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC-Preferences-alerts .jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC-Preferences-charts.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC-Preferences-charts.jpg
new file mode 100644
index 00000000..7ae6ca8c
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC-Preferences-charts.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC-Preferences-gluster .jpg b/src/org.gluster.storage.management.console.help/html/images/GMC-Preferences-gluster .jpg
new file mode 100644
index 00000000..06702e7b
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC-Preferences-gluster .jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_02.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_02.jpg
new file mode 100644
index 00000000..2aac60ff
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_02.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_03.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_03.jpg
new file mode 100644
index 00000000..282c1407
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_03.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_04.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_04.jpg
new file mode 100644
index 00000000..383aa719
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_04.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_05.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_05.jpg
new file mode 100644
index 00000000..11f3096d
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_05.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_06.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_06.jpg
new file mode 100644
index 00000000..97323bd2
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_06.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_07.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_07.jpg
new file mode 100644
index 00000000..fd7e4dd6
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_07.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_09.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_09.jpg
new file mode 100644
index 00000000..54a10c8c
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_09.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Add_Brick.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Add_Brick.jpg
new file mode 100644
index 00000000..4480fd27
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Add_Brick.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Add_Brick_confirm.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Add_Brick_confirm.jpg
new file mode 100644
index 00000000..d609a373
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Add_Brick_confirm.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Add_Server_Confirm.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Add_Server_Confirm.jpg
new file mode 100644
index 00000000..4e39d5f4
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Add_Server_Confirm.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Create_Vol.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Create_Vol.jpg
new file mode 100644
index 00000000..e6b16ddb
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Create_Vol.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Discovered_Server_Add.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Discovered_Server_Add.jpg
new file mode 100644
index 00000000..7b273913
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Discovered_Server_Add.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Display_log_criteria.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Display_log_criteria.jpg
new file mode 100644
index 00000000..9284e314
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Display_log_criteria.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Remove_Brick_confirm.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Remove_Brick_confirm.jpg
new file mode 100644
index 00000000..891ab993
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Remove_Brick_confirm.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Remove_Bricks.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Remove_Bricks.jpg
new file mode 100644
index 00000000..d3911aad
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Remove_Bricks.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Remove_Bricks_success.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Remove_Bricks_success.jpg
new file mode 100644
index 00000000..452e8f20
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Remove_Bricks_success.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Remove_Server.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Remove_Server.jpg
new file mode 100644
index 00000000..c9674b51
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Remove_Server.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Remove_Server_1.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Remove_Server_1.jpg
new file mode 100644
index 00000000..3c3d7d18
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Remove_Server_1.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Select_FS_Type.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Select_FS_Type.jpg
new file mode 100644
index 00000000..08d26e41
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_Select_FS_Type.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_create_cluster.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_create_cluster.jpg
new file mode 100644
index 00000000..66ac694e
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_create_cluster.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_login.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_login.jpg
new file mode 100644
index 00000000..282c1407
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_login.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_multiple_vols.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_multiple_vols.jpg
new file mode 100644
index 00000000..e2aee777
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_multiple_vols.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_multiple_vols_confirm.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_multiple_vols_confirm.jpg
new file mode 100644
index 00000000..af7ba50a
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_multiple_vols_confirm.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_register_cluster.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_register_cluster.jpg
new file mode 100644
index 00000000..6e39bc31
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_register_cluster.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_removeBrick_confirm.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_removeBrick_confirm.jpg
new file mode 100644
index 00000000..591b98dc
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_removeBrick_confirm.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_select_cluster.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_select_cluster.jpg
new file mode 100644
index 00000000..383aa719
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_select_cluster.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_server_add_success.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_server_add_success.jpg
new file mode 100644
index 00000000..0f7dbfc5
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_server_add_success.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_vol_success.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_vol_success.jpg
new file mode 100644
index 00000000..74931bc9
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_1.0_vol_success.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_10.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_10.jpg
new file mode 100644
index 00000000..8a1bf08c
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_10.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_Add_Brick.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_Add_Brick.jpg
new file mode 100644
index 00000000..59c99311
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_Add_Brick.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_Add_Brick_confirm.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_Add_Brick_confirm.jpg
new file mode 100644
index 00000000..133ef15d
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_Add_Brick_confirm.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_Add_Brick_icon.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_Add_Brick_icon.jpg
new file mode 100644
index 00000000..d613a544
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_Add_Brick_icon.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_Add_Server_Manual.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_Add_Server_Manual.jpg
new file mode 100644
index 00000000..7789034c
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_Add_Server_Manual.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_Add_brick.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_Add_brick.jpg
new file mode 100644
index 00000000..4c5c2ae3
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_Add_brick.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_Add_brick_confirm.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_Add_brick_confirm.jpg
new file mode 100644
index 00000000..a4b8a811
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_Add_brick_confirm.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_Alerts.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_Alerts.jpg
new file mode 100644
index 00000000..1ae4e0aa
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_Alerts.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_Bricks_Tab.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_Bricks_Tab.jpg
new file mode 100644
index 00000000..1653d58b
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_Bricks_Tab.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_Change_Password.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_Change_Password.jpg
new file mode 100644
index 00000000..f8ab379a
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_Change_Password.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_Change_Password_Confirm.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_Change_Password_Confirm.jpg
new file mode 100644
index 00000000..e13b22a1
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_Change_Password_Confirm.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_Charts.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_Charts.jpg
new file mode 100644
index 00000000..b6d8edb0
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_Charts.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_Clear_task_icon.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_Clear_task_icon.jpg
new file mode 100644
index 00000000..ce31471c
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_Clear_task_icon.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_Cluster_Summary.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_Cluster_Summary.jpg
new file mode 100644
index 00000000..c6dcc77c
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_Cluster_Summary.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_Cluster_Summary_tab.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_Cluster_Summary_tab.jpg
new file mode 100644
index 00000000..8af1267e
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_Cluster_Summary_tab.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_Cluster_Summary_tab_new.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_Cluster_Summary_tab_new.jpg
new file mode 100644
index 00000000..53e83ce6
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_Cluster_Summary_tab_new.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_Create_Cluster.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_Create_Cluster.jpg
new file mode 100644
index 00000000..6a21e8b9
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_Create_Cluster.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_Create_Vol_icon.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_Create_Vol_icon.jpg
new file mode 100644
index 00000000..7529713c
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_Create_Vol_icon.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_Create_Volume.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_Create_Volume.jpg
new file mode 100644
index 00000000..2f8ecfca
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_Create_Volume.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_Create_Volume_success.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_Create_Volume_success.jpg
new file mode 100644
index 00000000..a128d182
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_Create_Volume_success.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_Delete_Vol.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_Delete_Vol.jpg
new file mode 100644
index 00000000..51e97758
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_Delete_Vol.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_Delete_Vol_Confirm.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_Delete_Vol_Confirm.jpg
new file mode 100644
index 00000000..c6fc98f2
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_Delete_Vol_Confirm.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_Delete_Vol_multiple.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_Delete_Vol_multiple.jpg
new file mode 100644
index 00000000..be89ddc7
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_Delete_Vol_multiple.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_Delete_Vol_multiple_success.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_Delete_Vol_multiple_success.jpg
new file mode 100644
index 00000000..fe037755
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_Delete_Vol_multiple_success.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_Delete_Vol_success.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_Delete_Vol_success.jpg
new file mode 100644
index 00000000..1fdfb5f4
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_Delete_Vol_success.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_Disk_tab.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_Disk_tab.jpg
new file mode 100644
index 00000000..8bc1dc9e
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_Disk_tab.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_Landing_Page.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_Landing_Page.jpg
new file mode 100644
index 00000000..65e2bd9d
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_Landing_Page.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_Log_list.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_Log_list.jpg
new file mode 100644
index 00000000..81ffa36c
--- /dev/null
+++ b/src/org.gluster.storage.management.console.help/html/images/GMC_Log_list.jpg
Binary files differ
diff --git a/src/org.gluster.storage.management.console.help/html/images/GMC_Login_Change_Pwd.jpg b/src/org.gluster.storage.management.console.help/html/images/GMC_Login_Change_Pwd.jpg
new file mode 100644
index 00000000..27ed8be4
--- /dev/null
+++ b/