blob: d15a3ca28cbf1a06c8860b181e4c5e4e656b4f83 [file] [log] [blame]
import java.util.concurrent.Callable
import java.util.concurrent.Executors
import java.util.concurrent.atomic.AtomicBoolean
import java.awt.AWTException
import java.awt.Font
import java.awt.Image
import java.awt.Menu
import java.awt.MenuItem
import java.awt.PopupMenu
import java.awt.SystemTray
import java.awt.TrayIcon
import java.awt.event.ActionEvent
import java.awt.event.ActionListener
import javax.swing.JOptionPane
import javax.imageio.ImageIO
import static Services.*
import static ServiceControl.*
/*
* open CMD -> gradle health
*
* */
group 'org.onap.sdc'
version '1.01-SNAPSHOT'
apply plugin: 'groovy'
apply plugin: 'java'
apply plugin: "org.hidetake.ssh"
apply plugin: 'java-gradle-plugin'
apply plugin: 'idea'
sourceCompatibility = 1.8
buildscript {
repositories {
jcenter()
mavenCentral()
}
dependencies {
classpath 'org.codehaus.groovy:groovy-all:2.4.12'
classpath "org.hidetake:gradle-ssh-plugin:2.9.0"
}
}
enum Services {
BACKEND , //be
FRONTEND , //fe
DB , //cassandra
CACHING , //elawsrticsearch
SECURITY , //webseal
ALL //all services
}
enum ServiceControl {
HEALTH ,
START ,
RESTART ,
STOP ,
KILL
}
enum Environment {
OLD_VAGRANT , PROD_VAGRANT , ONAP_VAGRANT
}
//env variables
//fill YOUR_WINDOWS_USER_HOME
project.ext.set("VM_TYPE", Environment.ONAP_VAGRANT) //flags to use new vagrant configuration
//project.ext.set("NEW_VAG",Boolean.FALSE) //flags to use new vagrant configuration
project.ext.set("IS_HOTSWAP",Boolean.FALSE) //flags to use new vagrant configuration
project.ext.set("PROJECT_PATH", System.getenv("SDC")) //ex. 'C:\\GIT_WORK\\asdc\\sdc')
project.ext.set("VAGRANT_HOME", isProductionVM() ? System.getenv("NEW_VAG") : isOnapVM() ? System.getenv("ONAP_VAG") :System.getenv("VAG")) //ex. 'C:\\GIT_WORK\\vagrant-asdc-all-in-one')
project.ext.set("USER_HOME", "${System.getenv("USERPROFILE")}\\.ssh")
project.ext.set("BE_REMOTE", isProductionVM() ? '/opt/app/jetty/base/be' : '/home/vagrant/catalog-be' )
project.ext.set("FE_REMOTE", isProductionVM() ? '/opt/app/jetty/base/fe' : '/home/vagrant/catalog-fe' )
project.ext.set("VAGRANT_USER", isProductionVM() ? 'm11981' : 'vagrant' )
project.ext.set("RSA_PRIVATE_KEY_PATH", isProductionVM() ? "$VAGRANT_HOME/id_rsa" : '' )
project.ext.set("VAGRANT_PASSWORD", isProductionVM() ? 'Aa123456' : 'vagrant' )
project.ext.set("X_FOLDER",'/xFolder' )
project.ext.set("BE_DEPENDENCIES", 'common-be,common-app-api,catalog-dao,catalog-model,security-utils' )
project.ext.set("command", [ (ALL) : [ (HEALTH) : { isProductionVM() ? 'sudo curl -i http://localhost:8181/sdc1/rest/healthCheck' : isOnapVM() ? 'sudo -i /data/scripts/docker_health.sh' : 'curl -i localhost:8080/sdc2/rest/healthCheck' } ,
(KILL) : { isProductionVM() ? 'sudo pkill java' : isOnapVM() ? 'sudo -i docker kill $(docker ps -q)' : 'pkill java'} ] , // TODO: refine kill only for services
(BACKEND) : [ (START) : { isProductionVM() ? 'sudo service jettyBE start' : isOnapVM() ? 'sudo -i docker start sdc-BE' : 'service catalog-be start'} ,
(STOP) : { isProductionVM() ? 'sudo service jettyBE stop' : isOnapVM() ? 'sudo -i docker stop sdc-BE' : 'service catalog-be stop'} ,
(RESTART) : { isProductionVM() ? 'sudo service jettyBE restart' : isOnapVM() ? 'sudo -i docker restart sdc-BE' : 'service catalog-be restart'}] ,
(DB) : [ (START) : { isProductionVM() ? 'sudo service cassandra start' : isOnapVM() ? 'sudo -i docker start sdc-cs' : 'start-asdc-storage.sh' } ,
(STOP) : { isProductionVM() ? 'sudo service cassandra stop' : isOnapVM() ? 'sudo -i docker stop sdc-cs' : 'service cassandra stop'} ,
(RESTART) : { isProductionVM() ? 'sudo service cassandra restart' : isOnapVM() ? 'sudo -i docker restart sdc-cs' : 'service cassandra restart'} ] ,
(FRONTEND): [ (START) : { isProductionVM() ? 'sudo service jettyFE start' : isOnapVM() ? 'sudo -i docker start sdc-FE' : 'service catalog-fe start' } ,
(STOP) : { isProductionVM() ? 'sudo service jettyFE stop' : isOnapVM() ? 'sudo -i docker stop sdc-FE' : 'service catalog-fe stop'} ,
(RESTART) : { isProductionVM() ? 'sudo service jettyFE restart' : isOnapVM() ? 'sudo -i docker restart sdc-FE' : 'service catalog-fe restart' } ] ,
(CACHING): [ (START) : { isProductionVM() ? 'sudo service elasticsearch start' : isOnapVM() ? 'sudo -i docker start sdc-es' : 'echo "starting es is not yet supported"' } ],
(SECURITY): [ (START) : { isProductionVM() ? 'sudo docker start sdc-WebSeal-Simulator' : isOnapVM() ? 'sudo -i /data/scripts/simulator_docker_run.sh -r $(echo $(sudo -i docker images onap/sdc-simulator | grep onap/sdc-simulator | head -1 | awk \'{print $2}\'))' : 'service webseal-simulator start' } ,
(STOP) : { isProductionVM() ? 'sudo docker stop sdc-WebSeal-Simulator' : isOnapVM() ? 'sudo -i docker stop sdc-sim' : 'service webseal-simulator stop'} ,
(RESTART) : { isProductionVM() ? 'sudo docker restart sdc-WebSeal-Simulator' : isOnapVM() ? 'sudo -i docker restart sdc-sim' : 'service webseal-simulator restart'}]
] ) //abstraction level to shell scripts , support old and new vagrant bash commands
//icons
project.ext.set("warnImg",'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAADvSURBVDhPY2RgYPgPxGQDiAGLXkB4UMD56DuD9YFUhj179oD5Li4uDEcdZjN8l+ME8+EgTgLTAJDm7zWKYPb/enUwzdh4E0xzttxHNQRoABOUCQYYmj+9QrCBACQHUoMM4AYga74ZDiRAmvnEwHwQGywGBOiGgA1A16wmJYjQDAJANkgMmyEosYBVMzIAuuTWs/cM6iuhfCCAGwDWrAHxKyFw68ZNuCE40wGygcga0AEkEEHRiIxxASzqUKKRHIAwAJgo4BgXwKIGxQUgf8MwOsAlh+EFUMDBMAxgE0MGoLwAignSMFQPzmgkDjAwAACSmn13nChk1QAAAABJRU5ErkJggg==')
project.ext.set("okImg1",'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAD4SURBVDhPY2RgYPgPxGQDiAGLXkB4UMD56DuD9YFUhj179oD5Li4uDEcdZjN8l+ME8+EgTgLTAJDm7zWKYLbSRh8wfc9/C5jmbLmPagjQACYoEwwwNLMxgzHMIJAcSA0ygBuArFm81gyi+ddfCAaywWJAgG4I2AB0zdxWkhCNMABkg8SwGYISC1g1IwOgS74ee87wsvkUVADJAJjpyIDbRAxMfz3zCkwjA5ghONMB2DVIBiDbigwggQiKRmSMC2BRhxKN5ACEAcBEAce4ABY1LFAaDLAFJAwgyyGHB4YXQAEHwzCATQwZgPICKCZIw1A9OKOROMDAAAA4gXvZorg7ZgAAAABJRU5ErkJggg==')
project.ext.set("okImg2" , 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAADjSURBVDhPY2RgYPgPxGQDiAGLXkB4UMD56DuD9YFUhj179oD5Li4uDEcdZjN8l+ME8+EgTgLTAJDm7zWKYPbWZ7Jg2lvqMZjmbLmPagjQACYoEwywaQYBGBskB1KDDOAGIGuetFsUTCMDmBi6IWAD0DUra3OA2cgAJIbNEJRYwKUZGdy9+oMhz/U1lIdkADZnwwwDaUIHMENwpgNk16DbigwggQiKRmSMC2BRhxKN5ACEAcBEAce4ABY1LFAaDLAFJAwgyyGHB4YXQAEHwzCATQwZgPICKCZIw1A9OKOROMDAAAAZD3X55epfOAAAAABJRU5ErkJggg==')
project.ext.set("errorImg" , 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAADlSURBVDhPY2RgYPgPxGQDiAGLXkB4UMD56DuD9YFUhj179oD5Li4uDEcdZjN8l+ME8+EgTgLTAJDm7zWKYPZbGRUwLfzkDpjmbLmPagjQACYoEwywaQYBGBskB1KDDOAGIGtexisCppEBTAzdELAB6Jrd+QXAbGQAEsNmCEos4NKMDHZ+/MAQ9fkNlIdkADZnwwwDaUIHyIaADMDAQAP/AwMPjEFsbGpAGGs6AEUPsnfgzsaiDiUayQUgF2A4jaAXoHpQXAByNgyjA1xyGF4A+RuGYQCbGDLA6gWCGKoHJSGRDhgYAL/hkunRq+joAAAAAElFTkSuQmCC')
project.ext.set("unavailableImg" , 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAABJ0AAASdAHeZh94AAAAB3RJTUUH4QwNDgEDrNoaqgAAAOhJREFUOMulkz8OgjAUhz8MQ7mBkwnnkBAH4mbCCdxcXLwAoxdwYXHjBCRupoMheg4TJ29QNhwshMofSfpLOry2v6/vta8OUGEhF4DsbUx6L8XytkNKCUAURTxWZ9TCM93buQb8mFXiI4E43gCQ5xeQPt7x2YG4fWa0OQwDhBANRCVdyGyKOQyDJhuV+HgvZQLGzABCiEGI036FPnNbZVlSFPfvnWg1gJpea72OjPh6lUZcQ5yhPkjTkxHv94fpfcB23t81PftmWMr9e+pQZjobd6zuobX2fViXAFCRvSv9GtOH9ji23/kDswRrCVqtQOAAAAAASUVORK5CYII=')
//health params
project.ext.set("trayIcon", null)
project.ext.set("lastStatus", null)
project.ext.set("isStopHealthCheck", false)
project.ext.set("isHaltHealth", new AtomicBoolean(false) )
project.ext.set("startedAwait", Long.MAX_VALUE)
project.ext.set("logFile", 'C:/ProgramData/all.log')
project.ext.set("pomList" , ["${System?.getenv('SDC')}/catalog-fe/pom.xml" ,"${System?.getenv('SDC')}/catalog-be/pom.xml" ] ) //empty list will scan all openecomp poms
project.ext.set("pomChangesMap" , [:] )
project.ext.set("beConfigFilesToCopyMapping" , [ 'src/main/resources/config/*.yaml' : 'config/catalog-be/' ,
'src/main/resources/config/*.properties' : 'config/catalog-be/'] )
//menu item strings
project.ext.set("toggleHealthString" , "Halt Health" )
//menu item
project.ext.set("toggleHealthItemView" , null )
//other
project.ext.set("IS_MVN_INSTALL",false)
project.ext.set("executor" , null )
project.ext.set("lockObj" , new Object() )
def hash( List list ){
def map = list?.collectEntries { File file -> [(file?.absolutePath) : file?.text?.hashCode() ]}
map
}
def pomChanges(){
long started = System.currentTimeMillis()
if ( !pomList )
listPom()
//find hash changes
def changes = pomList?.findAll {
def File file = new File(it);
pomChangesMap[it] != file?.text?.hashCode()
}
println "\n\n[MasterD][POM]--> detected changes for -> $changes"
//update changes in map
changes?.each { pomChangesMap[it] = new File(it)?.text?.hashCode() }
println "\n\n[MasterD][POM]--> pom map -> $pomChangesMap"
println """
****** POM changes detection finished after -> ${System.currentTimeMillis()- started}ms ******
"""
changes
}
//list pom with updated file hashes
def listPom(){
long started = System.currentTimeMillis()
if (!pomList) {
def tree = fileTree( PROJECT_PATH ).include '**/pom.xml'//.filter { it.isFile() && it?.toString()?.toLowerCase()?.endsWith('pom.xml') }
//println "$PROJECT_PATH list is ->${ list?.collect { it?.absolutePath } }"
//flatten and filter openecomp poms
pomList = tree?.flatten()?.findAll { File file -> file?.text?.contains('org.openecomp.sdc') }?.collect {File file -> file?.absolutePath }
}
pomChangesMap = pomList.collectEntries { absolutePath ->[ ( absolutePath ) : new File(absolutePath)?.text?.hashCode() ] }
println """ [MasterD][Init] intializing POM detector
********* POM listing finished after -> ${System.currentTimeMillis()- started}ms *********
"""
return pomList
}
task initialization(){
listPom()
executor = Executors.newCachedThreadPool();
}
def parallel( closure ){
executor?.submit(new Callable<Object>(){
@Override
public Object call() {
closure();
return null;
}
})
}
/*class Preferences {
def String Username
def String IsNewVagrant
def String IsRapidMode
}
def initXFolder(){
def folder = new File(X_FOLDER);
folder?.exists() ?: folder?.mkdirs()
new File("${folder?.absolutePath}/$PREFERENCES_FILENAME")
}*/
task tester{
/*doLast{
//postStat(10000, "shay" , "report/index")
listPom()
new File('catalog-be\\pom.xml') << "#hello"
pomChanges()
}*/
}
def fetchFilesByExtention(remote, local , ext ){
ssh.run {
def started = System.currentTimeMillis()
println "folder diff"
session(remotes.vagrant) {
//execute "cd /home/vagrant/catalog-be/tmp ; ls -lt | grep catalog-be" //todo- use my dates to filter
get from: remote , into: local , filter: { it?.absolutePath =~ /jetty.*catalog-be.*\.dir.*\.$ext/ } // { it?.absolutePath =~ /.*catalog-be.*dir.*classes.*/ }
}
println "fetched files in ${System.currentTimeMillis() - started} ms"
}
}
def updateRemoteFile(String remote , String local){
ssh.run {
def to = "$BE_REMOTE${remote[remote?.indexOf("tmp\\")..remote.size()-1].replaceAll("\\\\","/")}"
println "copying $local \nto\n $to"
session(remotes.vagrant) {
put from: local , into: to }
}
}
def compareAndSwap(){
def final LIMIT = 10
def newClasses = new File("$PROJECT_PATH\\catalog-be\\target\\classes")
def File jettyClasses ;
//locate classes
println "traversing.."
new File("build/hotswap").traverse { if (it?.directory && it?.name?.equals("classes")){
jettyClasses = it
return;
} }
def jettyClassesList = []
jettyClasses?.traverse { jettyClassesList << it }
println "$jettyClasses"
//Sort compiled classes
def files = []
newClasses?.traverse { files << it }
def result = files.sort{ a,b -> b.lastModified() <=> a.lastModified() }
println "show only last $LIMIT changes"
result[0..LIMIT]?.each{ println it?.lastModified() +" | "+ it?.name + (it?.directory ? "[Directory]" : "") } //show only last 10 changes
//update
def changesMap = [ : ] //<old,new>
println "updating changes"
result[0..LIMIT]?.each { File f -> def File other = jettyClassesList.find{ File other-> other?.absolutePath?.endsWith(f?.name) };
if ( !(f.directory) && f?.text?.hashCode() != other?.text?.hashCode() )
updateRemoteFile( other?.getAbsolutePath() , f?.getAbsolutePath() )
} //use hashing
}
task hotswap(){
doLast {
new File("build/hotswap")?.deleteDir()
new File("build/hotswap")?.mkdirs()
ssh.settings {
knownHosts = allowAnyHosts
}
fetchFilesByExtention( "$BE_REMOTE/tmp/" , 'build/hotswap' , "class")
compareAndSwap()
}
}
remotes {
vagrant {
host = '127.0.0.1'
port = 2222
user = VAGRANT_USER
password = VAGRANT_PASSWORD
identity = isProductionVM() ? new File(RSA_PRIVATE_KEY_PATH) : null
}
}
def isProductionVM(){
return VM_TYPE?.equals(Environment.PROD_VAGRANT)
}
def isOnapVM(){
return VM_TYPE?.equals(Environment.ONAP_VAGRANT)
}
def gitLatest(){
}
def newEcoSystem(){
//cleanTitan()
backupDB() //and clean all
//restoreDB() //restore latest
createSchema()
fillSchema()
postCreate()
startAll()
//todo- conside updating from git
updaterBEFull()
updaterFE()
}
def importHeatTypes(){
//todo- impl
}
def postCreate(){
importNormative()
importHeatTypes()
}
def fillSchema(){
// add conformence level
}
def createSchemaPreStep(){
//todo- DB up
}
def createSchemaPostStep(){
////todo- impl create amdocs dox
}
def createSchema(){
createSchemaPreStep()
//todo- create schema
//todo- create titan
createSchemaPostStep()
}
def cleanTitan(){
execSafe{
ssh.settings {
knownHosts = allowAnyHosts
}
ssh.run {
session(remotes.vagrant) {
execute "sudo cqlsh -e 'DROP KEYSPACE titan;'"
println "[MasterD][DB_DROP]-> Dropped 'titan' KEYSPACE."
}
}
}
}
task cleanTitan {
doLast{
cleanTitan()
}
}
task fetchE2EDB(){
doLast{
fetchE2EDB()
}
}
def fetchE2EDB(){
execSafe{
ssh.settings {
knownHosts = allowAnyHosts
}
ssh.run {
session(remotes.vagrant) {
def tmp = '$CASSANDRA_HOME/backup/e2e'
//execute 'mkdir $CASSANDRA_HOME/backup/e2e/'
//execute 'wget http://135.76.210.202:8080/ETE_backup_files/latest_ETE_backup_file.zip -P /vagrant/db'
println "[MasterD] download finished, unzipping.."
execute "unzip -u $tmp/latest_ETE_backup_file.zip" //execute 'unzip -u /vagrant/db/latest_ETE_backup_file.zip'//'
def folder = execute "cd $tmp; ls -d -- */"
println "[MasterD] unzipping finished into -> $folder , untaring.."
execute "tar zxf $tmp/$folder/* --strip 3 -C" +'$CASSANDRA_HOME/data | pv -l >/dev/null'
println "[MasterD][E2E_DB]-> Downloaded & unzipped e2e data successfully."
}
}
}
}
def copyExplodedBE() {
execSafe{
println "[MasterD][BackEnd] copying exploded war."
ssh.settings {
knownHosts = allowAnyHosts
}
long started = System.currentTimeMillis()
def dirPath = "${PROJECT_PATH}/catalog-be/target/catalog-be-1.1.0-SNAPSHOT"
def dir = new File(dirPath);
println "[MasterD][BackEnd] copying ${dir?.directorySize()/(1024*1024)} MB, from ${dir?.name} to $BE_REMOTE/webapps"
ssh.run {
session(remotes.vagrant) {
execute "rm -R $BE_REMOTE/webapps/catalog-be-1.1.0-SNAPSHOT"
put from: dir?.absolutePath , into: "$BE_REMOTE/webapps"
}
}
println "[MasterD][BackEnd] Successfully copied exploded war in ${System.currentTimeMillis()-started}ms."
}
}
task copyExplodedBE(){
doLast{
copyExplodedBE()
}
}
def backupDB() {
execSafe{
ssh.settings {
knownHosts = allowAnyHosts
}
ssh.run {
session(remotes.vagrant) {
execute 'mkdir -p $CASSANDRA_HOME/backup'
def res = execute 'mv $CASSANDRA_HOME/data $CASSANDRA_HOME/backup/data_$(date +\'%Y_%m_%d__%H:%M:%S\')'
println "[MasterD][DB_BACKUP]-> snapshot DB finished. $res"
}
}
}
}
task backupDB{
doLast{
backupDB()
}
}
def restoreDB(){
execSafe{
ssh.settings {
knownHosts = allowAnyHosts
}
ssh.run {
session(remotes.vagrant) {
println "[MasterD]-> restoring DB"
execute 'mkdir -p $CASSANDRA_HOME/data'
def res = execute 'mv $CASSANDRA_HOME/backup/data_*/* $CASSANDRA_HOME/data'
println "[MasterD]-> DB restore FINISHED!! $res"
}
}
}
}
task restoreDB() {
doLast {
restoreDB()
}
}
def vm( ){
exec{
if (VAGRANT_HOME){
workingDir VAGRANT_HOME //vagrant path
println "*****************\nworking dir -> $VAGRANT_HOME"
commandLine "cmd","/c", "vagrant up"
//args = [ ]
} else {
println "[MasterD]--> please define windows enviroment variable VAG pointing to vagrant project"
}
}
}
task vm{
doLast{
vm()
}
}
def copyFE() {
println "[MasterD][FrontEnd] starting war copy."
ssh.settings {
knownHosts = allowAnyHosts
}
long started = System.currentTimeMillis()
def target = "${PROJECT_PATH}/catalog-fe/target/"
def files = GFileUtils.listFiles( new File(target) , ["war"] as String[] , false);
files?.each{ File file ->
if (!file?.name?.contains('classes')){
println "[MasterD][FrontEnd] copying ${file.length()/(1024*1024)} MB, from ${file?.name} to $FE_REMOTE/webapps"
ssh.run {
session(remotes.vagrant) {
if ( isProductionVM() )
execute 'sudo chmod -R 777 /opt/app/jetty/base/fe/webapps'
put from: file?.absolutePath , into: "$FE_REMOTE/webapps"
}
}
}
}
println "[MasterD][FrontEnd] Successfully copied war in ${System.currentTimeMillis()-started}ms."
}
task deployFE{
doLast {
copyFE()
}
}
def copyBE(){
println "[MasterD][BackEnd] starting war copy."
ssh.settings {
knownHosts = allowAnyHosts
}
def target = "${PROJECT_PATH}/catalog-be/target/"
def files = GFileUtils.listFiles( new File(target) , ["war"] as String[] , false);
long started = System.currentTimeMillis()
files?.each{ File file ->
if (!file?.name?.contains('classes')){
println "[MasterD][BackEnd] copying ${file.length()/(1024*1024)} MB, from ${file?.name} to $BE_REMOTE/webapps"
ssh.run {
session(remotes.vagrant) {
if (isProductionVM())
execute 'sudo chmod -R 777 /opt/app/jetty/base/be/webapps'
put from: file?.absolutePath , into: "$BE_REMOTE/webapps"
}
}
}
}
println "[MasterD][BackEnd] SUCCESSFULY copied be war in ${System.currentTimeMillis()-started}ms."
}
task deployBE {
doLast {
copyBE()
}
}
def compileFE(){
exec{
println "[MasterD][FE]--> compiling project at -> ${PROJECT_PATH}\\catalog-fe"
workingDir "${PROJECT_PATH}" //vagrant path
commandLine 'cmd','/c','mvn -T 2 compile -pl catalog-fe,catalog-ui -am -Pcatalog -Dmaven.test.skip'
}
}
task compileFE(){
doLast{
compileFE()
}
}
def compileBE(){
exec{
println "[MasterD][BE]--> compiling project at -> ${PROJECT_PATH}\\catalog-be"
workingDir "${PROJECT_PATH}" //vagrant path
commandLine 'cmd','/c','mvn -T 2 compile -pl catalog-be -Pcatalog -Dmaven.test.skip'
}
}
task compileBE{
doLast{
compileBE()
}
}
def compile(){
exec{
println "[MasterD]--> compiling project at -> ${PROJECT_PATH}"
workingDir "${PROJECT_PATH}" //vagrant path
commandLine 'cmd','/c','mvn -T 2 compile -am -Pcatalog -Dmaven.test.skip'
}
}
task compile{
doLast{
compile()
}
}
def compileDependencies(){
def cmd = IS_MVN_INSTALL ? 'install' : 'compile'
exec{
println "[MasterD]--> compiling BE dependencies -> $BE_DEPENDENCIES [ SKIPPING TESTS!! ]"
workingDir "${PROJECT_PATH}" //vagrant path
commandLine 'cmd','/c',"mvn $cmd -pl $BE_DEPENDENCIES -Pcatalog -Dmaven.test.skip" //commandLine 'cmd', '/c','mvn -T 1C package -pl catalog-model,catalog-dao,catalog-be -P catalog -Dmaven.test.skip'
}
}
task compileDependencies {
doLast{
compileDependencies()
}
}
def compileWar(){
def cmd = IS_MVN_INSTALL ? 'install' : 'compile'
exec{
println "--> compiling project at -> ${PROJECT_PATH}\\catalog-be"
workingDir "${PROJECT_PATH}" //vagrant path
commandLine 'cmd','/c',"mvn -T 1 $cmd war:war -pl catalog-be -Pcatalog -Dmaven.test.skip" //commandLine 'cmd', '/c','mvn -T 1C package -pl catalog-model,catalog-dao,catalog-be -P catalog -Dmaven.test.skip'
}
}
task compileWar(){
doLast{
compileWar()
}
}
//deprecated - use deployBE()
task be() {
doLast{
def started = System.currentTimeMillis();
exec{
println "[MasterD]--> copying be... [from $VAGRANT_HOME]"
workingDir VAGRANT_HOME //vagrant path
commandLine 'cmd','/c', 'copy_war_be.bat','localhost' , "$PROJECT_PATH\\catalog-be\\target\\catalog-be*.war" , "$BE_REMOTE/webapps"
//args = [ ]
}
println """
**** copying finished in -> ${System.currentTimeMillis() - started}ms ****
"""
}
}
task beConfig( ) {
doLast{
exec{
workingDir "${System.env.VAG}" //vagrant path
commandLine 'cmd','/c','copy_war_be_with_configuration','localhost' , "$PROJECT_PATH\\catalog-be\\target\\catalog-be*.war" , "$BE_REMOTE/webapps"
//args = [ ]
}
}
}
task feConfig( ) {
doLast{
exec{
workingDir "${System.env.VAG}" //vagrant path
commandLine 'cmd','/c','copy_war_fe_with_configuration','localhost' , "$PROJECT_PATH\\catalog-fe\\target\\catalog-fe*.war" , "$FE_REMOTE/webapps"
//args = [ ]
}
}
}
task fe() {
doLast{
exec {
workingDir "${System.env.VAG}" //vagrant path
commandLine 'cmd','/c', 'copy_war_fe.bat', 'localhost', "$PROJECT_PATH\\catalog-fe\\target\\catalog-fe*.war", "$FE_REMOTE/webapps"
//args = [ ]
}
}
}
def installAllProject(){
exec{
println "[MasterD]--> Compiling&Installing project at -> ${PROJECT_PATH}"
workingDir "${PROJECT_PATH}" //vagrant path
commandLine 'cmd','/c','mvn -T 2 clean install -U -Pcatalog -Dmaven.test.skip'
}
}
task installAllProject {
doLast {
installAllProject()
}
}
task installAll {
doLast{
println '[MasterD]--> Finished!!'
}
}
installAll.dependsOn { tasks.findAll { task -> task.name.startsWith('install_') } }
def install_BE(){
exec {
println '[MasterD][Install]--> Installing BE!!'
workingDir "${PROJECT_PATH}"
commandLine 'cmd','/c', 'mvn clean install -pl catalog-be -am -Pcatalog -Dmaven.test.skip'
//args = [ ]
}
}
task install_BE() {
doLast{
install_BE()
}
}
def install_FE() {
exec {
workingDir "${PROJECT_PATH}"
commandLine 'cmd','/c', 'mvn clean install -pl catalog-ui,catalog-fe -am -Pcatalog -Dmaven.test.skip'
}
}
task install_FE() {
doLast {
install_FE()
}
}
def updaterBERapid(){
/* if ( ticket() > PREVIOUS_BUILD_VAR ){
PREVIOUS_BUILD_VAR = ticket()*/
def started = System.currentTimeMillis();
println "[MasterD][Rapid]--> compiling changes using maven"
compileWar()
println "[MasterD][Rapid]--> copying war"
copyBE() //use this if you want to deploy entire war //hotswap.execute()
restartBackend()
println msg(" redeploy finished in -> ${System.currentTimeMillis() - started}ms ")
}
task updaterBERapid(){
doLast {
updaterBERapid()
}
}
def updaterBE(){
def started = System.currentTimeMillis();
IS_MVN_INSTALL = pomChanges() ? true : false
println "[MasterD]--> compiling changes using maven"
compileDependencies()
compileWar()
println "[MasterD]--> copying war"
IS_HOTSWAP ? copyExplodedBE() : copyBE() //execute() //use this if you want to deploy entire war //hotswap.execute()
restartBackend()
println msg("redeploy finished in -> ${System.currentTimeMillis() - started}ms ")
}
task updaterBE(){
doLast {
updaterBE()
}
}
def copyBEConfiguration(){
/* execSafe {
ssh.settings {
knownHosts = allowAnyHosts
}
ssh.run {
session(remotes.vagrant) {
println msg("Stopping BackEnd Server")
execute command[BACKEND][STOP]()
}
}
}*/
}
def updaterBEFull(){
def started = System.currentTimeMillis();
compile()
println "[MasterD]--> copying war"
copyBE() //use this if you want to deploy entire war //hotswap.execute()
copyBEConfiguration()
println msg("redeploy finished in -> ${System.currentTimeMillis() - started}ms ")
}
task updaterBEFull(){
doLast {
updaterBEFull()
}
}
def copyFEConfiguration(){
//todo- implement
}
def updaterFE(){
def started = System.currentTimeMillis();
println "[MasterD]--> compiling changes using maven"
compileFE()
println "[MasterD]--> copying war"
copyFE() //.execute() //use this if you want to deploy entire war //hotswap.execute()
copyFEConfiguration()
println msg("redeploy finished in -> ${System.currentTimeMillis() - started}ms ")
}
task updaterFE(){
doLast {
updaterFE()
}
}
def stopBackend(){
execSafe {
ssh.settings {
knownHosts = allowAnyHosts
}
ssh.run {
session(remotes.vagrant) {
println msg("Stopping BackEnd Server")
execute command[BACKEND][STOP]()
}
}
}
}
task stopBackend(){
doLast {
stopBackend()
}
}
def startBackend(){
execSafe {
ssh.settings {
knownHosts = allowAnyHosts
}
ssh.run {
session(remotes.vagrant) {
println msg("[MasterD] starting backend sever")
execute command[BACKEND][START]()
}
}
}
println """[MasterD]-> finished !!
"""
}
task startBackend(){
doLast{
startBackend()
}
}
def restartBackend(){
execSafe {
ssh.settings {
knownHosts = allowAnyHosts
}
ssh.run {
session(remotes.vagrant) {
println msg("[MasterD] restarting backend server")
execute command[BACKEND][RESTART]()
}
}
}
println """[MasterD]-> finished !!
"""
}
def startSecurity(){
println "[MasterD] starting security&simulator engine"
execSafe {
ssh.settings {
knownHosts = allowAnyHosts
}
ssh.run {
session(remotes.vagrant) {
execute command[SECURITY][START]()
}
}
}
println """[MasterD]-> finished !!
"""
}
task startSecurity(){
doLast {
startSecurity()
}
}
def stopSecurity(){
println "[MasterD] stopping security&simulator engine"
execSafe {
ssh.settings {
knownHosts = allowAnyHosts
}
ssh.run {
session(remotes.vagrant) {
execute command[SECURITY][STOP]()
}
}
}
println """[MasterD]-> finished !!
"""
}
task stopSecurity(){
doLast {
stopSecurity()
}
}
//todo- remove this if you want to auto-deploy on every file save
/*
compileJava.doFirst{
updater?.execute()
}*/
enum STATUS { UP, DOWN , UNKNOWN , UNAVAILABLE }
task health(){
doLast {
prepareTray()
}
}
def execSafe( closure){
if (!lockObj) {
[0..4].forEach( {println "Critical ERROR : lock object is not initialized\n\nCritical ERROR : cannot run tasks\n"}() )
return;
}
synchronized (lockObj){
boolean prev = isHaltHealth.get()
try {
isHaltHealth.set(true)
closure()
} catch (Exception e) {
println e
} finally {
isHaltHealth.set(prev)
}
}
}
def fetchFiles( remote, local ){
ssh.run {
session(remotes.vagrant) {
//execute "cd /home/vagrant/catalog-be/tmp ; ls -lt | grep catalog-be" //todo- use my dates to filter
def f = get from: remote , into: local
println f?.name
//return f
}
//println "fetched files in ${System.currentTimeMillis() - started} ms"
}
//return null
}
def killJava(){
execSafe {
def res
ssh.run {
session( remotes.vagrant ) {
println """ *-*-****************************-*-*
killing all java proccesses
*-*-****************************-*-*
"""
res = execute command[ALL][KILL]()
}
}
println res?.toString()
}
}
def importNormative(){
execSafe {
ssh.run {
session(remotes.vagrant) {
println """ *-*-************************************-*-*
importNormative
*-*-************************************-*-*
"""
execute "sudo python -v $BE_REMOTE/scripts/import/tosca/importNormativeAll.py"
}
}
}
}
def startAll(){
def startCassandra = """
#!/bin/bash
cassandra&
elasticsearch -d
#Wait until ES is up
until curl localhost:9200/_cluster/health;
do
printf "."
sleep 3
done
# Create Elastic Mapping if not exist in ES
createESMapping.sh
"""
execSafe {
ssh.run {
session(remotes.vagrant) {
println """ *-*-************************************-*-*
starting all SDC services(DB,BE,FE,Webseal)
*-*-************************************-*-*
"""
if ( isProductionVM() ){
execute command[DB][START]()
Thread.sleep(5000)
execute command[CACHING][START]()
}
else
execute startCassandra
//[0..4]?.forEach( Thread?.sleep(2000) )
Thread?.sleep(10000)
Thread?.sleep(10000)
execute command[BACKEND][START]()
execute command[FRONTEND][START]()
execute command[SECURITY][START]()
}
}
}
}
/*def clearLog(type: Delete){
delete{
delete 'C:/ProgramData/all.log'
followSymlinks = true
}
}*/
task clearLog(type: Delete){
doLast{
delete 'C:/ProgramData/all.log'
followSymlinks = true
}
}
def logBE(){
try{
println "\n*** logging BE all.log ***\n"
ssh.run {
session( remotes.vagrant ) {
//String now = execute 'echo \"\$(date +\'%Y_%m_%d\')\"'
//println "\n\n*******************************************************\n\n"+now?.toString()
clearLog?.execute() //todo- remove this .execute()
fetchFiles( '/home/vagrant/catalog-be/logs/SDC/SDC-BE/all.log' , 'C:/ProgramData') //"%USERPROFILE%\AppData\Local\")
//project.ext.set( "logFile" , 'C:/ProgramData/all.log' )
// -f /home/vagrant/catalog-fe/logs/*$now.stderrout.log -f /home/vagrant/catalog-be/logs/*$now.stderrout.log -f /home/vagrant/catalog-be/logs/ASDC/ASDC-BE/debug.log*'
}
}
parallel {
exec {
//if ( logFile ){
String notepad = 'C:\\Program Files (x86)\\Notepad++\\notepad++.exe'
println "logging $logFile to notepad++ [$notepad]"
commandLine 'cmd','/c' , notepad ,logFile
}
}
}catch(Exception e){
println "cannot open logs!!!"
e.printStackTrace()
}
}
task logBE(){
doLast{
logBE()
}
}
def toggleHealthPolling(){
isHaltHealth.set(!isHaltHealth.get())
}
//converts predefined icon to Image
def Image convert( imageName ){
String encodedimage = project.ext.get(imageName);
byte[] byteImage = encodedimage?.split(',')[1]?.decodeBase64()
Image image = ImageIO.read(new ByteArrayInputStream(byteImage));
}
def refreshMenu(String imageName){
switch( imageName ) {
case 'unavailableImg' : toggleHealthString = "Resume Health"; break;
default : toggleHealthString = "Halt Health";
}
if (((MenuItem)toggleHealthItemView).getLabel() != toggleHealthString)
((MenuItem)toggleHealthItemView).setLabel(toggleHealthString);
}
def startDB(){
println "[MasterD] Starting database.."
execSafe {
ssh.settings {
knownHosts = allowAnyHosts
}
ssh.run {
session(remotes.vagrant) {
execute command[DB][START]()
}
}
}
}
task startDB(){
doLast {
startDB()
}
}
def stopDB(){
execSafe {
ssh.settings {
knownHosts = allowAnyHosts
}
ssh.run {
session(remotes.vagrant) {
execute command[DB][STOP]()
}
}
}
}
task stopDB(){
doLast {
stopDB()
}
}
def startFE(){
execSafe {
ssh.settings {
knownHosts = allowAnyHosts
}
ssh.run {
session(remotes.vagrant) {
execute command[FRONTEND][START]()
}
}
}
}
task startFE(){
doLast {
startFE()
}
}
def stopFE(){
execSafe {
ssh.settings {
knownHosts = allowAnyHosts
}
ssh.run {
session(remotes.vagrant) {
execute command[FRONTEND][STOP]()
}
}
}
}
task stopFE(){
doLast {
stopFE()
}
}
def ActionListener newListener( closure ){
ActionListener listener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
closure()
} catch (AWTException e1) {
System.err.println(e1);
}
}
}
listener
}
ext.updateTray = { STATUS status ->
lastStatus = status
if (SystemTray.isSupported()) {
// get the SystemTray instance
SystemTray tray = SystemTray.getSystemTray();
// load an image
String imageName = status==STATUS.UP ? (Math.random()>0.5 ?'okImg1':'okImg2') : status==STATUS.UNAVAILABLE ? 'unavailableImg' : status==STATUS.DOWN ? 'errorImg' : 'warnImg'
Image image = convert imageName
if (trayIcon != null) {
trayIcon.setImage(image)
refreshMenu(imageName);
return ;
}
//region -> Menu UI
// create a popup menu
PopupMenu popup = new PopupMenu();
// create menu item for the default action
MenuItem hotswapItem = new MenuItem("===> WAR <===");
hotswapItem.setFont(new Font("MONOSPACED" , Font.BOLD ,15f ))
//region Multilevel Menus
Menu deployMasterMenu = new Menu("DeployMaster");
Menu backendMenu = new Menu("Backend");
Menu frontendMenu = new Menu("Frontend");
Menu dbMenu = new Menu("Database");
Menu securityMenu = new Menu("Security");
try{
deployMasterMenu.setFont(new Font("Cooper Black" ,Font.BOLD ,14f ))
backendMenu.setFont(new Font("Cooper Black" ,Font.PLAIN ,13f ))
frontendMenu.setFont(new Font("Cooper Black" ,Font.PLAIN ,13f ))
dbMenu.setFont(new Font("Cooper Black" ,Font.PLAIN ,13f ))
securityMenu.setFont(new Font("Cooper Black" ,Font.PLAIN ,13f ))
}catch(Exception e){
println e
}
//DeployMaster Menu
MenuItem updaterBeWithDependenciesItem = new MenuItem("[BE] Quick Compile -> Deploy");
MenuItem updaterFullBeItem = new MenuItem("[BE] Full Install -> Deploy");
MenuItem updaterFeItem = new MenuItem("[FE] Quick Compile -> Deploy");
MenuItem updaterFullFeItem = new MenuItem("[FE] Full Install -> Deploy");
//Menu UI build
deployMasterMenu.add(updaterFullBeItem);
deployMasterMenu.add(updaterBeWithDependenciesItem);
deployMasterMenu.addSeparator();
deployMasterMenu.add(updaterFullFeItem);
deployMasterMenu.add(updaterFeItem);
//BE menu
MenuItem startItem = new MenuItem("[BE] Start");
MenuItem stopItem = new MenuItem("[BE] Stop BackEnd");
MenuItem copyBeWarItem = new MenuItem("[BE] Copy War");
backendMenu.add(startItem);
backendMenu.add(stopItem);
(isOnapVM()) ?: backendMenu.add(copyBeWarItem);
//FE menu
MenuItem startFEItem = new MenuItem("[FE] Start");
MenuItem stopFEItem = new MenuItem("[FE] Stop");
MenuItem copyFeWarItem = new MenuItem("[FE] Copy War");
frontendMenu.add(startFEItem);
frontendMenu.add(stopFEItem);
(isOnapVM()) ?: frontendMenu.add(copyFeWarItem);
//DB menu
MenuItem startDBItem = new MenuItem("[DB] Start");
MenuItem stopDBItem = new MenuItem("[DB] Stop");
MenuItem backupDBItem = new MenuItem("[DB] Backup");
MenuItem restoreDBItem = new MenuItem("[DB] Restore");
dbMenu.add(startDBItem);
dbMenu.add(stopDBItem);
dbMenu.add(backupDBItem);
dbMenu.add(restoreDBItem);
//endregion
//Security Menu
MenuItem startSecurityItem = new MenuItem("[Security] Start");
MenuItem stopSecurityItem = new MenuItem("[Security] Stop");
securityMenu.add(startSecurityItem)
securityMenu.add(stopSecurityItem)
MenuItem killItem = new MenuItem("Kill All");
MenuItem startAllItem = new MenuItem("Start All");
MenuItem importItem = new MenuItem("Import Normative");
MenuItem healthInfoItem = new MenuItem("[Info] Health");
MenuItem toggleHealthItem = new MenuItem(toggleHealthString);
MenuItem logsItem = new MenuItem("Logs [Beta]");
MenuItem exitItem = new MenuItem("Exit");
toggleHealthItemView = toggleHealthItem;
(isOnapVM()) ?: popup.add(hotswapItem);
(isOnapVM()) ?:popup?.addSeparator();
(isOnapVM()) ?: popup.add(deployMasterMenu);
(isOnapVM()) ?:popup?.addSeparator();
popup.add(backendMenu)
popup.add(frontendMenu)
(isOnapVM()) ?: popup.add(dbMenu)
popup?.addSeparator();
popup?.add(securityMenu)
popup?.addSeparator();
popup.add(startAllItem);
popup.add(killItem);
popup?.addSeparator();
popup.add(toggleHealthItem);
popup.add(healthInfoItem);
(isOnapVM()) ?:popup?.addSeparator();
(isOnapVM()) ?: popup.add(importItem);
(isOnapVM()) ?: popup.add(logsItem);
popup?.addSeparator();
popup.add(exitItem);
//endregion UI
// construct a TrayIcon
trayIcon = new TrayIcon(image, "HealthTray", popup);
//region -> Button actions
def listenerHotswap = newListener { project.ext.set("IS_HOTSWAP", !IS_HOTSWAP); hotswapItem?.setLabel( IS_HOTSWAP ? "==> HotSwap <==" : "===> WAR <===") }
// create a action listener to listen for default action executed on the tray icon
def listenerFullBE = newListener { parallel { install_BE(); IS_HOTSWAP ? copyExplodedBE() : copyBE(); restartBackend() } }
def listenerFullFE = newListener { parallel { install_FE(); copyFE() } }
ActionListener listenerFE = newListener { parallel { updaterFE() } }
ActionListener listenerBE = newListener { parallel { updaterBE() } }
ActionListener exitListener = newListener {
executor?.isShutdown() ?: executor?.shutdown()
tray.remove(trayIcon);
project.ext.set("isStopHealthCheck", true)
println "Shutting down.. bye bye.."
}
ActionListener stopBackendListener = newListener { stopBackend() }
ActionListener startBEListener = newListener { parallel { startBackend() } }
ActionListener killJavaListener = newListener { killJava() }
ActionListener startAllListener = newListener { parallel { startAll() } }
ActionListener startSecurityListener = newListener { startSecurity() }
ActionListener stopSecurityListener = newListener { stopSecurity() }
ActionListener listener5 = new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
parallel { importNormative() }
} catch (AWTException e1) {
System.err.println(e1);
}
}
};
ActionListener listener6 = new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
parallel { healthPopup() }
} catch (AWTException e1) {
System.err.println(e1);
}
}
};
ActionListener listener7 = new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
logBE()//tasks.logger.execute()
} catch (AWTException e1) {
System.err.println(e1);
}
}
};
ActionListener listener8 = new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
toggleHealthPolling()//tasks.logger.execute()
} catch (AWTException e1) {
System.err.println(e1);
}
}
};
ActionListener copyBeWarListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
parallel { copyBE() }//.execute()//tasks.logger.execute()
} catch (AWTException e1) {
System.err.println(e1);
}
}
};
ActionListener startDBListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
parallel {
startDB()
}//tasks.logger.execute()
} catch (AWTException e1) {
System.err.println(e1);
}
}
}
ActionListener stopDBListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
stopDB()//tasks.logger.execute()
} catch (AWTException e1) {
System.err.println(e1);
}
}
}
ActionListener dbBackupListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
parallel {
backupDB()//tasks.logger.execute()
}
} catch (AWTException e1) {
System.err.println(e1);
}
}
}
ActionListener feStartListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
parallel {
startFE()
}//tasks.logger.execute()
} catch (AWTException e1) {
System.err.println(e1);
}
}
}
ActionListener feStopListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
stopFE()//tasks.logger.execute()
} catch (AWTException e1) {
System.err.println(e1);
}
}
}
ActionListener feCopyListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
parallel {
copyFE() //.execute()//tasks.logger.execute()
}
} catch (AWTException e1) {
System.err.println(e1);
}
}
}
//def listenerFullModules = newListener { parallel { installAllProject() } }
//region -> Button<=Listener
hotswapItem.addActionListener(listenerHotswap)
updaterFeItem.addActionListener(listenerFE)
updaterFullBeItem.addActionListener( listenerFullBE )
updaterBeWithDependenciesItem.addActionListener( listenerBE )
updaterFullFeItem.addActionListener( listenerFullFE )
stopItem.addActionListener(stopBackendListener)
startItem.addActionListener(startBEListener)
copyBeWarItem.addActionListener(copyBeWarListener);
startSecurityItem.addActionListener(startSecurityListener)
stopSecurityItem.addActionListener(stopSecurityListener)
killItem.addActionListener(killJavaListener)
startAllItem.addActionListener(startAllListener)
importItem.addActionListener(listener5)
healthInfoItem.addActionListener(listener6)
toggleHealthItem.addActionListener(listener8)
logsItem.addActionListener(listener7)
exitItem.addActionListener(exitListener)
startDBItem.addActionListener( startDBListener )
stopDBItem.addActionListener( stopDBListener )
backupDBItem.addActionListener( dbBackupListener )
copyFeWarItem.addActionListener( feCopyListener )
startFEItem.addActionListener( feStartListener )
stopFEItem.addActionListener( feStopListener )
//endregion
//endregion
// set the TrayIcon properties
// ...
// add the tray image
try {
tray.add(trayIcon);
} catch (AWTException e) {
System.err.println(e);
}
// ...
} else {
println "Java TrayIcon Option is not supported in your System, try enabling it. Bye Bye"
}
}
def prepareTray(){
long UPDATE_THRESHOLD = 3500
float SCALAR = 1
ssh.settings {
knownHosts = allowAnyHosts
}
while(!isStopHealthCheck) {
if (!isHaltHealth.get()) { //if await or await is more then 60 second return health check
ssh.run {
session(remotes.vagrant) {
try {
def healthOutput = execute command[ALL][HEALTH]()
if (healthOutput?.contains("Failed command .* with status 7") || healthOutput?.contains("Problem accessing /sdc2/rest/healthCheck"))
updateTray(STATUS.DOWN)
def statusCollecion = healthOutput?.findAll "\"healthCheckStatus\": \".*\""
def upCount = statusCollecion?.count { it?.contains("UP") }
def downCount = statusCollecion?.count { it?.contains("DOWN") }
def uknownCount = (statusCollecion?.size() - upCount) - downCount
println " UP -> $upCount | downCount=$downCount | uknownCount=$uknownCount "
(uknownCount > 0 || (downCount > 0 && upCount > 0)) ? updateTray(STATUS.UNKNOWN) : ((upCount > 0) ? updateTray(STATUS.UP) : updateTray(STATUS.DOWN))
SCALAR = 1
} catch (Exception e) {
updateTray(STATUS.DOWN)
println e
SCALAR = Math.min(SCALAR * 1.1, 5) //slow down on errors
}
//green color effects
if (lastStatus && lastStatus == STATUS.UP) {
trayIcon.setImage(convert(Math.random() > 0.5 ? 'okImg1' : 'okImg2'))
//randomly green change color
}
Thread.yield()
Thread?.sleep((long) (UPDATE_THRESHOLD * SCALAR))
}
}
}else{
updateTray(STATUS.UNAVAILABLE)
Thread.yield()
}
}
}
def healthPopup(){
ssh.run {
session(remotes.vagrant) {
def healthOutput = execute command[ALL][HEALTH]()
JOptionPane.showMessageDialog(null,
healthOutput,
"HEALTH",
JOptionPane.INFORMATION_MESSAGE);
}
}
}
project.ext.set("msg", { content -> """
************************************************************************************************
************************************************************************************************
******* *********
************** ****************
$content
************************************************************************************************
************************************************************************************************
"""} )