Michael Lando | a544510 | 2018-03-04 14:53:33 +0200 | [diff] [blame] | 1 | import java.awt.Color |
| 2 | import java.util.concurrent.Callable |
| 3 | import java.util.concurrent.Executors |
| 4 | import java.util.concurrent.atomic.AtomicBoolean |
| 5 | |
| 6 | import static Services.* |
| 7 | import static ServiceControl.* |
| 8 | import java.awt.AWTException |
| 9 | import java.awt.Font |
| 10 | import java.awt.Image |
| 11 | import java.awt.Menu |
| 12 | import java.awt.MenuItem |
| 13 | import java.awt.PopupMenu |
| 14 | import java.awt.SystemTray |
| 15 | import java.awt.TrayIcon |
| 16 | import java.awt.event.ActionEvent |
| 17 | import java.awt.event.ActionListener |
| 18 | import javax.swing.JOptionPane |
| 19 | import javax.imageio.ImageIO |
| 20 | |
| 21 | |
| 22 | group 'com.att.ecomp' |
| 23 | version '1.01-SNAPSHOT' |
| 24 | |
| 25 | apply plugin: 'groovy' |
| 26 | apply plugin: 'java' |
| 27 | apply plugin: "org.hidetake.ssh" |
| 28 | apply plugin: 'java-gradle-plugin' |
| 29 | apply plugin: 'idea' |
| 30 | |
| 31 | sourceCompatibility = 1.8 |
| 32 | |
| 33 | buildscript { |
| 34 | repositories { |
| 35 | jcenter() |
| 36 | mavenCentral() |
| 37 | } |
| 38 | dependencies { |
| 39 | classpath 'org.codehaus.groovy:groovy-all:2.4.12' |
| 40 | classpath "org.hidetake:gradle-ssh-plugin:2.9.0" |
| 41 | } |
| 42 | } |
| 43 | |
| 44 | enum Services { |
| 45 | BACKEND , //be |
| 46 | FRONTEND , //fe |
| 47 | DB , //cassandra |
| 48 | CACHING , //elawsrticsearch |
| 49 | SECURITY , //webseal |
| 50 | ALL //all services |
| 51 | } |
| 52 | enum ServiceControl { |
| 53 | HEALTH , |
| 54 | START , |
| 55 | RESTART , |
| 56 | STOP , |
| 57 | KILL |
| 58 | } |
| 59 | //env variables |
| 60 | //fill YOUR_WINDOWS_USER_HOME |
| 61 | project.ext.set("NEW_VAG",Boolean.FALSE) //flags to use new vagrant configuration |
| 62 | project.ext.set("IS_HOTSWAP",Boolean.FALSE) //flags to use new vagrant configuration |
| 63 | project.ext.set("PROJECT_PATH", System.getenv("SDC")) //ex. 'C:\\GIT_WORK\\asdc\\sdc') |
| 64 | project.ext.set("VAGRANT_HOME", NEW_VAG ? System.getenv("NEW_VAG") : System.getenv("VAG")) //ex. 'C:\\GIT_WORK\\vagrant-asdc-all-in-one') |
| 65 | project.ext.set("USER_HOME", "${System.getenv("USERPROFILE")}\\.ssh") |
| 66 | project.ext.set("BE_REMOTE", NEW_VAG ? '/opt/app/jetty/base/be' : '/home/vagrant/catalog-be' ) |
| 67 | project.ext.set("FE_REMOTE", NEW_VAG ? '/opt/app/jetty/base/fe' : '/home/vagrant/catalog-fe' ) |
| 68 | project.ext.set("VAGRANT_USER", NEW_VAG ? 'm11981' : 'vagrant' ) |
| 69 | project.ext.set("RSA_PRIVATE_KEY_PATH", NEW_VAG ? "$VAGRANT_HOME/id_rsa" : '' ) |
| 70 | project.ext.set("VAGRANT_PASSWORD", NEW_VAG ? 'Aa123456' : 'vagrant' ) |
| 71 | project.ext.set("X_FOLDER",'/xFolder' ) |
| 72 | project.ext.set("BE_DEPENDENCIES", 'common-be,common-app-api,catalog-dao,catalog-model,security-utils' ) |
| 73 | project.ext.set("command", [ (ALL) : [ (HEALTH) : { NEW_VAG ? 'sudo curl -i http://localhost:8181/sdc1/rest/healthCheck' : 'curl -i localhost:8080/sdc2/rest/healthCheck' } , |
| 74 | (KILL) : { NEW_VAG ? 'sudo pkill java' : 'pkill java'} ] , // TODO: refine kill only for services |
| 75 | (BACKEND) : [ (START) : { NEW_VAG ? 'sudo service jettyBE start' : 'service catalog-be start'} , |
| 76 | (STOP) : { NEW_VAG ? 'sudo service jettyBE stop' : 'service catalog-be stop'} , |
| 77 | (RESTART) : { NEW_VAG ? 'sudo service jettyBE restart' : 'service catalog-be restart'}] , |
| 78 | (DB) : [ (START) : { NEW_VAG ? 'sudo service cassandra start' : 'start-asdc-storage.sh' } , |
| 79 | (STOP) : { NEW_VAG ? 'sudo service cassandra stop' : 'service cassandra stop'} , |
| 80 | (RESTART) : { NEW_VAG ? 'sudo service cassandra restart' : 'service cassandra restart'} ] , |
| 81 | (FRONTEND): [ (START) : { NEW_VAG ? 'sudo service jettyFE start' : 'service catalog-fe start' } , |
| 82 | (STOP) : { NEW_VAG ? 'sudo service jettyFE stop' : 'service catalog-fe stop'} , |
| 83 | (RESTART) : { NEW_VAG ? 'sudo service jettyFE restart' : 'service catalog-fe restart' } ] , |
| 84 | (CACHING): [ (START) : { NEW_VAG ? 'sudo service elasticsearch start' : 'echo "starting es is not yet supported"' } ], |
| 85 | (SECURITY): [ (START) : { NEW_VAG ? 'sudo docker start sdc-WebSeal-Simulator' : 'service webseal-simulator start' } , |
| 86 | (STOP) : { NEW_VAG ? 'sudo docker stop sdc-WebSeal-Simulator' : 'service webseal-simulator stop'} , |
| 87 | (RESTART) : { NEW_VAG ? 'sudo docker restart sdc-WebSeal-Simulator' : 'service webseal-simulator restart'}] |
| 88 | ] ) //abstraction level to shell scripts , support old and new vagrant bash commands |
| 89 | |
| 90 | //icons |
| 91 | project.ext.set("warnImg",'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAADvSURBVDhPY2RgYPgPxGQDiAGLXkB4UMD56DuD9YFUhj179oD5Li4uDEcdZjN8l+ME8+EgTgLTAJDm7zWKYPb/enUwzdh4E0xzttxHNQRoABOUCQYYmj+9QrCBACQHUoMM4AYga74ZDiRAmvnEwHwQGywGBOiGgA1A16wmJYjQDAJANkgMmyEosYBVMzIAuuTWs/cM6iuhfCCAGwDWrAHxKyFw68ZNuCE40wGygcga0AEkEEHRiIxxASzqUKKRHIAwAJgo4BgXwKIGxQUgf8MwOsAlh+EFUMDBMAxgE0MGoLwAignSMFQPzmgkDjAwAACSmn13nChk1QAAAABJRU5ErkJggg==') |
| 92 | project.ext.set("okImg1",'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAD4SURBVDhPY2RgYPgPxGQDiAGLXkB4UMD56DuD9YFUhj179oD5Li4uDEcdZjN8l+ME8+EgTgLTAJDm7zWKYLbSRh8wfc9/C5jmbLmPagjQACYoEwwwNLMxgzHMIJAcSA0ygBuArFm81gyi+ddfCAaywWJAgG4I2AB0zdxWkhCNMABkg8SwGYISC1g1IwOgS74ee87wsvkUVADJAJjpyIDbRAxMfz3zCkwjA5ghONMB2DVIBiDbigwggQiKRmSMC2BRhxKN5ACEAcBEAce4ABY1LFAaDLAFJAwgyyGHB4YXQAEHwzCATQwZgPICKCZIw1A9OKOROMDAAAA4gXvZorg7ZgAAAABJRU5ErkJggg==') |
| 93 | project.ext.set("okImg2" , 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAADjSURBVDhPY2RgYPgPxGQDiAGLXkB4UMD56DuD9YFUhj179oD5Li4uDEcdZjN8l+ME8+EgTgLTAJDm7zWKYPbWZ7Jg2lvqMZjmbLmPagjQACYoEwywaQYBGBskB1KDDOAGIGuetFsUTCMDmBi6IWAD0DUra3OA2cgAJIbNEJRYwKUZGdy9+oMhz/U1lIdkADZnwwwDaUIHMENwpgNk16DbigwggQiKRmSMC2BRhxKN5ACEAcBEAce4ABY1LFAaDLAFJAwgyyGHB4YXQAEHwzCATQwZgPICKCZIw1A9OKOROMDAAAAZD3X55epfOAAAAABJRU5ErkJggg==') |
| 94 | project.ext.set("errorImg" , 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAADlSURBVDhPY2RgYPgPxGQDiAGLXkB4UMD56DuD9YFUhj179oD5Li4uDEcdZjN8l+ME8+EgTgLTAJDm7zWKYPZbGRUwLfzkDpjmbLmPagjQACYoEwywaQYBGBskB1KDDOAGIGtexisCppEBTAzdELAB6Jrd+QXAbGQAEsNmCEos4NKMDHZ+/MAQ9fkNlIdkADZnwwwDaUIHyIaADMDAQAP/AwMPjEFsbGpAGGs6AEUPsnfgzsaiDiUayQUgF2A4jaAXoHpQXAByNgyjA1xyGF4A+RuGYQCbGDLA6gWCGKoHJSGRDhgYAL/hkunRq+joAAAAAElFTkSuQmCC') |
| 95 | project.ext.set("unavailableImg" , 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAABJ0AAASdAHeZh94AAAAB3RJTUUH4QwNDgEDrNoaqgAAAOhJREFUOMulkz8OgjAUhz8MQ7mBkwnnkBAH4mbCCdxcXLwAoxdwYXHjBCRupoMheg4TJ29QNhwshMofSfpLOry2v6/vta8OUGEhF4DsbUx6L8XytkNKCUAURTxWZ9TCM93buQb8mFXiI4E43gCQ5xeQPt7x2YG4fWa0OQwDhBANRCVdyGyKOQyDJhuV+HgvZQLGzABCiEGI036FPnNbZVlSFPfvnWg1gJpea72OjPh6lUZcQ5yhPkjTkxHv94fpfcB23t81PftmWMr9e+pQZjobd6zuobX2fViXAFCRvSv9GtOH9ji23/kDswRrCVqtQOAAAAAASUVORK5CYII=') |
| 96 | |
| 97 | |
| 98 | //health params |
| 99 | project.ext.set("trayIcon", null) |
| 100 | project.ext.set("lastStatus", null) |
| 101 | project.ext.set("isStopHealthCheck", false) |
| 102 | project.ext.set("isHaltHealth", new AtomicBoolean(false) ) |
| 103 | project.ext.set("startedAwait", Long.MAX_VALUE) |
| 104 | project.ext.set("logFile", 'C:/ProgramData/all.log') |
| 105 | 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 |
| 106 | project.ext.set("pomChangesMap" , [:] ) |
| 107 | project.ext.set("beConfigFilesToCopyMapping" , [ 'src/main/resources/config/*.yaml' : 'config/catalog-be/' , |
| 108 | 'src/main/resources/config/*.properties' : 'config/catalog-be/'] ) |
| 109 | |
| 110 | //menu item strings |
| 111 | project.ext.set("toggleHealthString" , "Halt Health" ) |
| 112 | //menu item |
| 113 | project.ext.set("toggleHealthItemView" , null ) |
| 114 | |
| 115 | //other |
| 116 | project.ext.set("IS_MVN_INSTALL",false) |
| 117 | project.ext.set("executor" , null ) |
| 118 | project.ext.set("lockObj" , new Object() ) |
| 119 | /*compile?.doLast { |
| 120 | println "2. hello compile2" |
| 121 | }*/ |
| 122 | |
| 123 | /*def post(String host , String serviceName,String msg){ |
| 124 | // POST |
| 125 | def post = new URL("$host/$serviceName").openConnection(); |
| 126 | def message = '{"message":"this is a message"}' |
| 127 | post.setRequestMethod("POST") |
| 128 | post.setDoOutput(true) |
| 129 | post.setRequestProperty("Content-Type", "application/json") |
| 130 | post.getOutputStream().write(message.getBytes("UTF-8")); |
| 131 | def postRC = post.getResponseCode(); |
| 132 | println(postRC); |
| 133 | if( postRC.equals(200)) { |
| 134 | println(post.getInputStream().getText()); |
| 135 | } |
| 136 | } |
| 137 | |
| 138 | def postStat( long operationTime, String user , String meta ){ |
| 139 | def host = 'http://135.76.123.70:8888' |
| 140 | def params = "user=$user&meta=$meta" |
| 141 | post host , "UserStats" , params |
| 142 | }*/ |
| 143 | |
| 144 | |
| 145 | def hash( List list ){ |
| 146 | def map = list?.collectEntries { File file -> [(file?.absolutePath) : file?.text?.hashCode() ]} |
| 147 | |
| 148 | map |
| 149 | } |
| 150 | |
| 151 | def pomChanges(){ |
| 152 | long started = System.currentTimeMillis() |
| 153 | if ( !pomList ) |
| 154 | listPom() |
| 155 | //find hash changes |
| 156 | def changes = pomList?.findAll { |
| 157 | def File file = new File(it); |
| 158 | pomChangesMap[it] != file?.text?.hashCode() |
| 159 | } |
| 160 | println "\n\n[MasterD][POM]--> detected changes for -> $changes" |
| 161 | //update changes in map |
| 162 | changes?.each { pomChangesMap[it] = new File(it)?.text?.hashCode() } |
| 163 | println "\n\n[MasterD][POM]--> pom map -> $pomChangesMap" |
| 164 | |
| 165 | println """ |
| 166 | ****** POM changes detection finished after -> ${System.currentTimeMillis()- started}ms ****** |
| 167 | """ |
| 168 | |
| 169 | changes |
| 170 | } |
| 171 | //list pom with updated file hashes |
| 172 | def listPom(){ |
| 173 | long started = System.currentTimeMillis() |
| 174 | if (!pomList) { |
| 175 | def tree = fileTree( PROJECT_PATH ).include '**/pom.xml'//.filter { it.isFile() && it?.toString()?.toLowerCase()?.endsWith('pom.xml') } |
| 176 | //println "$PROJECT_PATH list is ->${ list?.collect { it?.absolutePath } }" |
| 177 | //flatten and filter openecomp poms |
| 178 | pomList = tree?.flatten()?.findAll { File file -> file?.text?.contains('org.openecomp.sdc') }?.collect {File file -> file?.absolutePath } |
| 179 | } |
| 180 | pomChangesMap = pomList.collectEntries { absolutePath ->[ ( absolutePath ) : new File(absolutePath)?.text?.hashCode() ] } |
| 181 | |
| 182 | println """ [MasterD][Init] intializing POM detector |
| 183 | |
| 184 | ********* POM listing finished after -> ${System.currentTimeMillis()- started}ms ********* |
| 185 | """ |
| 186 | return pomList |
| 187 | } |
| 188 | |
| 189 | |
| 190 | task initialization(){ |
| 191 | listPom() |
| 192 | executor = Executors.newCachedThreadPool(); |
| 193 | } |
| 194 | |
| 195 | def parallel( closure ){ |
| 196 | executor?.submit(new Callable<Object>(){ |
| 197 | @Override |
| 198 | public Object call() { |
| 199 | closure(); |
| 200 | return null; |
| 201 | } |
| 202 | }) |
| 203 | } |
| 204 | /*class Preferences { |
| 205 | def String Username |
| 206 | def String IsNewVagrant |
| 207 | def String IsRapidMode |
| 208 | } |
| 209 | |
| 210 | def initXFolder(){ |
| 211 | def folder = new File(X_FOLDER); |
| 212 | folder?.exists() ?: folder?.mkdirs() |
| 213 | |
| 214 | new File("${folder?.absolutePath}/$PREFERENCES_FILENAME") |
| 215 | }*/ |
| 216 | |
| 217 | task tester{ |
| 218 | /*doLast{ |
| 219 | //postStat(10000, "shay" , "report/index") |
| 220 | listPom() |
| 221 | new File('catalog-be\\pom.xml') << "#hello" |
| 222 | pomChanges() |
| 223 | }*/ |
| 224 | } |
| 225 | |
| 226 | |
| 227 | def fetchFilesByExtention(remote, local , ext ){ |
| 228 | ssh.run { |
| 229 | def started = System.currentTimeMillis() |
| 230 | println "folder diff" |
| 231 | session(remotes.vagrant) { |
| 232 | //execute "cd /home/vagrant/catalog-be/tmp ; ls -lt | grep catalog-be" //todo- use my dates to filter |
| 233 | get from: remote , into: local , filter: { it?.absolutePath =~ /jetty.*catalog-be.*\.dir.*\.$ext/ } // { it?.absolutePath =~ /.*catalog-be.*dir.*classes.*/ } |
| 234 | } |
| 235 | println "fetched files in ${System.currentTimeMillis() - started} ms" |
| 236 | } |
| 237 | } |
| 238 | |
| 239 | def updateRemoteFile(String remote , String local){ |
| 240 | ssh.run { |
| 241 | def to = "$BE_REMOTE${remote[remote?.indexOf("tmp\\")..remote.size()-1].replaceAll("\\\\","/")}" |
| 242 | println "copying $local \nto\n $to" |
| 243 | session(remotes.vagrant) { |
| 244 | put from: local , into: to } |
| 245 | } |
| 246 | } |
| 247 | |
| 248 | def compareAndSwap(){ |
| 249 | def final LIMIT = 10 |
| 250 | def newClasses = new File("$PROJECT_PATH\\catalog-be\\target\\classes") |
| 251 | def File jettyClasses ; |
| 252 | //locate classes |
| 253 | println "traversing.." |
| 254 | new File("build/hotswap").traverse { if (it?.directory && it?.name?.equals("classes")){ |
| 255 | jettyClasses = it |
| 256 | return; |
| 257 | } } |
| 258 | def jettyClassesList = [] |
| 259 | jettyClasses?.traverse { jettyClassesList << it } |
| 260 | |
| 261 | println "$jettyClasses" |
| 262 | //Sort compiled classes |
| 263 | def files = [] |
| 264 | newClasses?.traverse { files << it } |
| 265 | def result = files.sort{ a,b -> b.lastModified() <=> a.lastModified() } |
| 266 | println "show only last $LIMIT changes" |
| 267 | result[0..LIMIT]?.each{ println it?.lastModified() +" | "+ it?.name + (it?.directory ? "[Directory]" : "") } //show only last 10 changes |
| 268 | |
| 269 | //update |
| 270 | def changesMap = [ : ] //<old,new> |
| 271 | println "updating changes" |
| 272 | result[0..LIMIT]?.each { File f -> def File other = jettyClassesList.find{ File other-> other?.absolutePath?.endsWith(f?.name) }; |
| 273 | if ( !(f.directory) && f?.text?.hashCode() != other?.text?.hashCode() ) |
| 274 | updateRemoteFile( other?.getAbsolutePath() , f?.getAbsolutePath() ) |
| 275 | } //use hashing |
| 276 | } |
| 277 | |
| 278 | task hotswap(){ |
| 279 | doLast { |
| 280 | new File("build/hotswap")?.deleteDir() |
| 281 | new File("build/hotswap")?.mkdirs() |
| 282 | ssh.settings { |
| 283 | knownHosts = allowAnyHosts |
| 284 | } |
| 285 | fetchFilesByExtention( "$BE_REMOTE/tmp/" , 'build/hotswap' , "class") |
| 286 | compareAndSwap() |
| 287 | } |
| 288 | } |
| 289 | |
| 290 | remotes { |
| 291 | vagrant { |
| 292 | host = '127.0.0.1' |
| 293 | port = 2222 |
| 294 | user = VAGRANT_USER |
| 295 | password = VAGRANT_PASSWORD |
| 296 | identity = NEW_VAG ? new File(RSA_PRIVATE_KEY_PATH) : null |
| 297 | } |
| 298 | |
| 299 | } |
| 300 | |
| 301 | def gitLatest(){ |
| 302 | |
| 303 | } |
| 304 | |
| 305 | def newEcoSystem(){ |
| 306 | //cleanTitan() |
| 307 | backupDB() //and clean all |
| 308 | //restoreDB() //restore latest |
| 309 | createSchema() |
| 310 | fillSchema() |
| 311 | postCreate() |
| 312 | startAll() |
| 313 | //todo- conside updating from git |
| 314 | updaterBEFull() |
| 315 | updaterFE() |
| 316 | } |
| 317 | def importHeatTypes(){ |
| 318 | //todo- impl |
| 319 | } |
| 320 | def postCreate(){ |
| 321 | importNormative() |
| 322 | importHeatTypes() |
| 323 | } |
| 324 | def fillSchema(){ |
| 325 | // add conformence level |
| 326 | } |
| 327 | def createSchemaPreStep(){ |
| 328 | //todo- DB up |
| 329 | } |
| 330 | def createSchemaPostStep(){ |
| 331 | ////todo- impl create amdocs dox |
| 332 | } |
| 333 | def createSchema(){ |
| 334 | createSchemaPreStep() |
| 335 | //todo- create schema |
| 336 | //todo- create titan |
| 337 | createSchemaPostStep() |
| 338 | } |
| 339 | |
| 340 | def cleanTitan(){ |
| 341 | execSafe{ |
| 342 | ssh.settings { |
| 343 | knownHosts = allowAnyHosts |
| 344 | } |
| 345 | ssh.run { |
| 346 | session(remotes.vagrant) { |
| 347 | execute "cqlsh -e 'DROP KEYSPACE titan;'" |
| 348 | println "[MasterD][DB_DROP]-> Dropped 'titan' KEYSPACE." |
| 349 | } |
| 350 | } |
| 351 | } |
| 352 | } |
| 353 | task cleanTitan { |
| 354 | doLast{ |
| 355 | cleanTitan() |
| 356 | } |
| 357 | } |
| 358 | |
| 359 | task fetchE2EDB(){ |
| 360 | doLast{ |
| 361 | fetchE2EDB() |
| 362 | } |
| 363 | } |
| 364 | def fetchE2EDB(){ |
| 365 | execSafe{ |
| 366 | ssh.settings { |
| 367 | knownHosts = allowAnyHosts |
| 368 | } |
| 369 | ssh.run { |
| 370 | session(remotes.vagrant) { |
| 371 | def tmp = '$CASSANDRA_HOME/backup/e2e' |
| 372 | //execute 'mkdir $CASSANDRA_HOME/backup/e2e/' |
| 373 | //execute 'wget http://135.76.210.202:8080/ETE_backup_files/latest_ETE_backup_file.zip -P /vagrant/db' |
| 374 | println "[MasterD] download finished, unzipping.." |
| 375 | execute "unzip -u $tmp/latest_ETE_backup_file.zip" //execute 'unzip -u /vagrant/db/latest_ETE_backup_file.zip'//' |
| 376 | def folder = execute "cd $tmp; ls -d -- */" |
| 377 | println "[MasterD] unzipping finished into -> $folder , untaring.." |
| 378 | execute "tar zxf $tmp/$folder/* --strip 3 -C" +'$CASSANDRA_HOME/data | pv -l >/dev/null' |
| 379 | println "[MasterD][E2E_DB]-> Downloaded & unzipped e2e data successfully." |
| 380 | } |
| 381 | } |
| 382 | } |
| 383 | } |
| 384 | def copyExplodedBE() { |
| 385 | execSafe{ |
| 386 | println "[MasterD][BackEnd] copying exploded war." |
| 387 | ssh.settings { |
| 388 | knownHosts = allowAnyHosts |
| 389 | } |
| 390 | long started = System.currentTimeMillis() |
| 391 | def dirPath = "${PROJECT_PATH}/catalog-be/target/catalog-be-1.1.0-SNAPSHOT" |
| 392 | def dir = new File(dirPath); |
| 393 | println "[MasterD][BackEnd] copying ${dir?.directorySize()/(1024*1024)} MB, from ${dir?.name} to $BE_REMOTE/webapps" |
| 394 | ssh.run { |
| 395 | session(remotes.vagrant) { |
| 396 | execute "rm -R $BE_REMOTE/webapps/catalog-be-1.1.0-SNAPSHOT" |
| 397 | put from: dir?.absolutePath , into: "$BE_REMOTE/webapps" |
| 398 | } |
| 399 | } |
| 400 | println "[MasterD][BackEnd] Successfully copied exploded war in ${System.currentTimeMillis()-started}ms." |
| 401 | } |
| 402 | } |
| 403 | task copyExplodedBE(){ |
| 404 | doLast{ |
| 405 | copyExplodedBE() |
| 406 | } |
| 407 | } |
| 408 | def backupDB() { |
| 409 | execSafe{ |
| 410 | ssh.settings { |
| 411 | knownHosts = allowAnyHosts |
| 412 | } |
| 413 | ssh.run { |
| 414 | session(remotes.vagrant) { |
| 415 | execute 'mkdir -p $CASSANDRA_HOME/backup' |
| 416 | def res = execute 'mv $CASSANDRA_HOME/data $CASSANDRA_HOME/backup/data_$(date +\'%Y_%m_%d__%H:%M:%S\')' |
| 417 | println "[MasterD][DB_BACKUP]-> snapshot DB finished. $res" |
| 418 | } |
| 419 | } |
| 420 | } |
| 421 | } |
| 422 | task backupDB{ |
| 423 | doLast{ |
| 424 | backupDB() |
| 425 | } |
| 426 | } |
| 427 | |
| 428 | def restoreDB(){ |
| 429 | execSafe{ |
| 430 | ssh.settings { |
| 431 | knownHosts = allowAnyHosts |
| 432 | } |
| 433 | ssh.run { |
| 434 | session(remotes.vagrant) { |
| 435 | println "[MasterD]-> restoring DB" |
| 436 | execute 'mkdir -p $CASSANDRA_HOME/data' |
| 437 | def res = execute 'mv $CASSANDRA_HOME/backup/data_*/* $CASSANDRA_HOME/data' |
| 438 | println "[MasterD]-> DB restore FINISHED!! $res" |
| 439 | } |
| 440 | } |
| 441 | } |
| 442 | } |
| 443 | task restoreDB() { |
| 444 | doLast { |
| 445 | restoreDB() |
| 446 | } |
| 447 | } |
| 448 | |
| 449 | def vm( ){ |
| 450 | exec{ |
| 451 | if (VAGRANT_HOME){ |
| 452 | workingDir VAGRANT_HOME //vagrant path |
| 453 | println "*****************\nworking dir -> $VAGRANT_HOME" |
| 454 | commandLine "cmd","/c", "vagrant up" |
| 455 | //args = [ ] |
| 456 | } else { |
| 457 | println "[MasterD]--> please define windows enviroment variable VAG pointing to vagrant project" |
| 458 | } |
| 459 | } |
| 460 | } |
| 461 | |
| 462 | task vm{ |
| 463 | doLast{ |
| 464 | vm() |
| 465 | } |
| 466 | } |
| 467 | |
| 468 | def copyFE() { |
| 469 | println "[MasterD][FrontEnd] starting war copy." |
| 470 | ssh.settings { |
| 471 | knownHosts = allowAnyHosts |
| 472 | } |
| 473 | long started = System.currentTimeMillis() |
| 474 | def target = "${PROJECT_PATH}/catalog-fe/target/" |
| 475 | def files = GFileUtils.listFiles( new File(target) , ["war"] as String[] , false); |
| 476 | files?.each{ File file -> |
| 477 | if (!file?.name?.contains('classes')){ |
| 478 | println "[MasterD][FrontEnd] copying ${file.length()/(1024*1024)} MB, from ${file?.name} to $FE_REMOTE/webapps" |
| 479 | ssh.run { |
| 480 | session(remotes.vagrant) { |
| 481 | put from: file?.absolutePath , into: "$FE_REMOTE/webapps" |
| 482 | } |
| 483 | } |
| 484 | } |
| 485 | |
| 486 | } |
| 487 | println "[MasterD][FrontEnd] Successfully copied war in ${System.currentTimeMillis()-started}ms." |
| 488 | } |
| 489 | |
| 490 | task deployFE{ |
| 491 | doLast { |
| 492 | copyFE() |
| 493 | } |
| 494 | } |
| 495 | |
| 496 | |
| 497 | def copyBE(){ |
| 498 | println "[MasterD][BackEnd] starting war copy." |
| 499 | ssh.settings { |
| 500 | knownHosts = allowAnyHosts |
| 501 | } |
| 502 | def target = "${PROJECT_PATH}/catalog-be/target/" |
| 503 | def files = GFileUtils.listFiles( new File(target) , ["war"] as String[] , false); |
| 504 | long started = System.currentTimeMillis() |
| 505 | files?.each{ File file -> |
| 506 | if (!file?.name?.contains('classes')){ |
| 507 | println "[MasterD][BackEnd] copying ${file.length()/(1024*1024)} MB, from ${file?.name} to $BE_REMOTE/webapps" |
| 508 | ssh.run { |
| 509 | session(remotes.vagrant) { |
| 510 | put from: file?.absolutePath , into: "$BE_REMOTE/webapps" |
| 511 | } |
| 512 | } |
| 513 | } |
| 514 | } |
| 515 | println "[MasterD][BackEnd] SUCCESSFULY copied be war in ${System.currentTimeMillis()-started}ms." |
| 516 | } |
| 517 | |
| 518 | task deployBE { |
| 519 | doLast { |
| 520 | copyBE() |
| 521 | } |
| 522 | } |
| 523 | def compileFE(){ |
| 524 | exec{ |
| 525 | println "[MasterD][FE]--> compiling project at -> ${PROJECT_PATH}\\catalog-fe" |
| 526 | workingDir "${PROJECT_PATH}" //vagrant path |
| 527 | commandLine 'cmd','/c','mvn -T 2 compile -pl catalog-fe,catalog-ui -am -Pcatalog -Dmaven.test.skip' |
| 528 | } |
| 529 | } |
| 530 | task compileFE(){ |
| 531 | doLast{ |
| 532 | compileFE() |
| 533 | } |
| 534 | } |
| 535 | def compileBE(){ |
| 536 | exec{ |
| 537 | println "[MasterD][BE]--> compiling project at -> ${PROJECT_PATH}\\catalog-be" |
| 538 | workingDir "${PROJECT_PATH}" //vagrant path |
| 539 | commandLine 'cmd','/c','mvn -T 2 compile -pl catalog-be -Pcatalog -Dmaven.test.skip' |
| 540 | } |
| 541 | } |
| 542 | task compileBE{ |
| 543 | doLast{ |
| 544 | compileBE() |
| 545 | } |
| 546 | } |
| 547 | |
| 548 | def compile(){ |
| 549 | exec{ |
| 550 | println "[MasterD]--> compiling project at -> ${PROJECT_PATH}" |
| 551 | workingDir "${PROJECT_PATH}" //vagrant path |
| 552 | commandLine 'cmd','/c','mvn -T 2 compile -am -Pcatalog -Dmaven.test.skip' |
| 553 | } |
| 554 | } |
| 555 | |
| 556 | task compile{ |
| 557 | doLast{ |
| 558 | compile() |
| 559 | } |
| 560 | } |
| 561 | def compileDependencies(){ |
| 562 | def cmd = IS_MVN_INSTALL ? 'install' : 'compile' |
| 563 | exec{ |
| 564 | println "[MasterD]--> compiling BE dependencies -> $BE_DEPENDENCIES [ SKIPPING TESTS!! ]" |
| 565 | workingDir "${PROJECT_PATH}" //vagrant path |
| 566 | 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' |
| 567 | } |
| 568 | } |
| 569 | task compileDependencies { |
| 570 | doLast{ |
| 571 | compileDependencies() |
| 572 | } |
| 573 | } |
| 574 | def compileWar(){ |
| 575 | def cmd = IS_MVN_INSTALL ? 'install' : 'compile' |
| 576 | exec{ |
| 577 | println "--> compiling project at -> ${PROJECT_PATH}\\catalog-be" |
| 578 | workingDir "${PROJECT_PATH}" //vagrant path |
| 579 | 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' |
| 580 | } |
| 581 | } |
| 582 | task compileWar(){ |
| 583 | doLast{ |
| 584 | compileWar() |
| 585 | } |
| 586 | } |
| 587 | |
| 588 | //deprecated - use deployBE() |
| 589 | task be() { |
| 590 | doLast{ |
| 591 | def started = System.currentTimeMillis(); |
| 592 | exec{ |
| 593 | println "[MasterD]--> copying be... [from $VAGRANT_HOME]" |
| 594 | workingDir VAGRANT_HOME //vagrant path |
| 595 | commandLine 'cmd','/c', 'copy_war_be.bat','localhost' , "$PROJECT_PATH\\catalog-be\\target\\catalog-be*.war" , "$BE_REMOTE/webapps" |
| 596 | //args = [ ] |
| 597 | } |
| 598 | println """ |
| 599 | **** copying finished in -> ${System.currentTimeMillis() - started}ms **** |
| 600 | """ |
| 601 | } |
| 602 | } |
| 603 | |
| 604 | task beConfig( ) { |
| 605 | doLast{ |
| 606 | exec{ |
| 607 | workingDir "${System.env.VAG}" //vagrant path |
| 608 | commandLine 'cmd','/c','copy_war_be_with_configuration','localhost' , "$PROJECT_PATH\\catalog-be\\target\\catalog-be*.war" , "$BE_REMOTE/webapps" |
| 609 | //args = [ ] |
| 610 | } |
| 611 | } |
| 612 | |
| 613 | } |
| 614 | task feConfig( ) { |
| 615 | doLast{ |
| 616 | exec{ |
| 617 | workingDir "${System.env.VAG}" //vagrant path |
| 618 | commandLine 'cmd','/c','copy_war_fe_with_configuration','localhost' , "$PROJECT_PATH\\catalog-fe\\target\\catalog-fe*.war" , "$FE_REMOTE/webapps" |
| 619 | //args = [ ] |
| 620 | } |
| 621 | } |
| 622 | |
| 623 | } |
| 624 | |
| 625 | task fe() { |
| 626 | doLast{ |
| 627 | exec { |
| 628 | workingDir "${System.env.VAG}" //vagrant path |
| 629 | commandLine 'cmd','/c', 'copy_war_fe.bat', 'localhost', "$PROJECT_PATH\\catalog-fe\\target\\catalog-fe*.war", "$FE_REMOTE/webapps" |
| 630 | //args = [ ] |
| 631 | } |
| 632 | } |
| 633 | } |
| 634 | |
| 635 | def installAllProject(){ |
| 636 | exec{ |
| 637 | println "[MasterD]--> Compiling&Installing project at -> ${PROJECT_PATH}" |
| 638 | workingDir "${PROJECT_PATH}" //vagrant path |
| 639 | commandLine 'cmd','/c','mvn -T 2 clean install -U -Pcatalog -Dmaven.test.skip' |
| 640 | } |
| 641 | } |
| 642 | task installAllProject { |
| 643 | doLast { |
| 644 | installAllProject() |
| 645 | } |
| 646 | } |
| 647 | |
| 648 | task installAll { |
| 649 | doLast{ |
| 650 | println '[MasterD]--> Finished!!' |
| 651 | } |
| 652 | } |
| 653 | installAll.dependsOn { tasks.findAll { task -> task.name.startsWith('install_') } } |
| 654 | |
| 655 | def install_BE(){ |
| 656 | exec { |
| 657 | println '[MasterD][Install]--> Installing BE!!' |
| 658 | workingDir "${PROJECT_PATH}" |
| 659 | commandLine 'cmd','/c', 'mvn clean install -pl catalog-be -am -Pcatalog -Dmaven.test.skip' |
| 660 | //args = [ ] |
| 661 | } |
| 662 | } |
| 663 | |
| 664 | task install_BE() { |
| 665 | doLast{ |
| 666 | install_BE() |
| 667 | } |
| 668 | } |
| 669 | |
| 670 | def install_FE() { |
| 671 | exec { |
| 672 | workingDir "${PROJECT_PATH}" |
| 673 | commandLine 'cmd','/c', 'mvn clean install -pl catalog-ui,catalog-fe -am -Pcatalog -Dmaven.test.skip' |
| 674 | } |
| 675 | } |
| 676 | task install_FE() { |
| 677 | doLast { |
| 678 | install_FE() |
| 679 | } |
| 680 | } |
| 681 | |
| 682 | def updaterBERapid(){ |
| 683 | /* if ( ticket() > PREVIOUS_BUILD_VAR ){ |
| 684 | PREVIOUS_BUILD_VAR = ticket()*/ |
| 685 | def started = System.currentTimeMillis(); |
| 686 | println "[MasterD][Rapid]--> compiling changes using maven" |
| 687 | compileWar() |
| 688 | println "[MasterD][Rapid]--> copying war" |
| 689 | copyBE() //use this if you want to deploy entire war //hotswap.execute() |
| 690 | restartBackend() |
| 691 | println msg(" redeploy finished in -> ${System.currentTimeMillis() - started}ms ") |
| 692 | } |
| 693 | task updaterBERapid(){ |
| 694 | doLast { |
| 695 | updaterBERapid() |
| 696 | } |
| 697 | } |
| 698 | def updaterBE(){ |
| 699 | def started = System.currentTimeMillis(); |
| 700 | IS_MVN_INSTALL = pomChanges() ? true : false |
| 701 | println "[MasterD]--> compiling changes using maven" |
| 702 | compileDependencies() |
| 703 | compileWar() |
| 704 | println "[MasterD]--> copying war" |
| 705 | IS_HOTSWAP ? copyExplodedBE() : copyBE() //execute() //use this if you want to deploy entire war //hotswap.execute() |
| 706 | restartBackend() |
| 707 | println msg("redeploy finished in -> ${System.currentTimeMillis() - started}ms ") |
| 708 | } |
| 709 | task updaterBE(){ |
| 710 | doLast { |
| 711 | updaterBE() |
| 712 | } |
| 713 | } |
| 714 | def copyBEConfiguration(){ |
| 715 | /* execSafe { |
| 716 | ssh.settings { |
| 717 | knownHosts = allowAnyHosts |
| 718 | } |
| 719 | ssh.run { |
| 720 | session(remotes.vagrant) { |
| 721 | println msg("Stopping BackEnd Server") |
| 722 | execute command[BACKEND][STOP]() |
| 723 | } |
| 724 | } |
| 725 | }*/ |
| 726 | } |
| 727 | def updaterBEFull(){ |
| 728 | def started = System.currentTimeMillis(); |
| 729 | compile() |
| 730 | println "[MasterD]--> copying war" |
| 731 | copyBE() //use this if you want to deploy entire war //hotswap.execute() |
| 732 | copyBEConfiguration() |
| 733 | println msg("redeploy finished in -> ${System.currentTimeMillis() - started}ms ") |
| 734 | } |
| 735 | task updaterBEFull(){ |
| 736 | doLast { |
| 737 | updaterBEFull() |
| 738 | } |
| 739 | } |
| 740 | def copyFEConfiguration(){ |
| 741 | //todo- implement |
| 742 | } |
| 743 | def updaterFE(){ |
| 744 | def started = System.currentTimeMillis(); |
| 745 | println "[MasterD]--> compiling changes using maven" |
| 746 | compileFE() |
| 747 | println "[MasterD]--> copying war" |
| 748 | copyFE() //.execute() //use this if you want to deploy entire war //hotswap.execute() |
| 749 | copyFEConfiguration() |
| 750 | println msg("redeploy finished in -> ${System.currentTimeMillis() - started}ms ") |
| 751 | } |
| 752 | task updaterFE(){ |
| 753 | doLast { |
| 754 | updaterFE() |
| 755 | } |
| 756 | } |
| 757 | def stopBackend(){ |
| 758 | execSafe { |
| 759 | ssh.settings { |
| 760 | knownHosts = allowAnyHosts |
| 761 | } |
| 762 | ssh.run { |
| 763 | session(remotes.vagrant) { |
| 764 | println msg("Stopping BackEnd Server") |
| 765 | execute command[BACKEND][STOP]() |
| 766 | } |
| 767 | } |
| 768 | } |
| 769 | } |
| 770 | task stopBackend(){ |
| 771 | doLast { |
| 772 | stopBackend() |
| 773 | } |
| 774 | } |
| 775 | |
| 776 | def startBackend(){ |
| 777 | execSafe { |
| 778 | ssh.settings { |
| 779 | knownHosts = allowAnyHosts |
| 780 | } |
| 781 | ssh.run { |
| 782 | session(remotes.vagrant) { |
| 783 | println msg("[MasterD] starting backend sever") |
| 784 | |
| 785 | execute command[BACKEND][START]() |
| 786 | } |
| 787 | } |
| 788 | } |
| 789 | println """[MasterD]-> finished !! |
| 790 | """ |
| 791 | } |
| 792 | task startBackend(){ |
| 793 | doLast{ |
| 794 | startBackend() |
| 795 | } |
| 796 | } |
| 797 | |
| 798 | def restartBackend(){ |
| 799 | execSafe { |
| 800 | ssh.settings { |
| 801 | knownHosts = allowAnyHosts |
| 802 | } |
| 803 | ssh.run { |
| 804 | session(remotes.vagrant) { |
| 805 | println msg("[MasterD] restarting backend sever") |
| 806 | |
| 807 | execute command[BACKEND][RESTART]() |
| 808 | } |
| 809 | } |
| 810 | } |
| 811 | println """[MasterD]-> finished !! |
| 812 | """ |
| 813 | } |
| 814 | //todo- remove this if you want to auto-deploy on every file save |
| 815 | /* |
| 816 | compileJava.doFirst{ |
| 817 | updater?.execute() |
| 818 | }*/ |
| 819 | |
| 820 | enum STATUS { UP, DOWN , UNKNOWN , UNAVAILABLE } |
| 821 | |
| 822 | task health(){ |
| 823 | doLast { |
| 824 | prepareTray() |
| 825 | } |
| 826 | } |
| 827 | |
| 828 | def execSafe( closure){ |
| 829 | if (!lockObj) { |
| 830 | [0..4].forEach( {println "Critical ERROR : lock object is not initialized\n\nCritical ERROR : cannot run tasks\n"}() ) |
| 831 | return; |
| 832 | } |
| 833 | synchronized (lockObj){ |
| 834 | boolean prev = isHaltHealth.get() |
| 835 | try { |
| 836 | isHaltHealth.set(true) |
| 837 | closure() |
| 838 | } catch (Exception e) { |
| 839 | println e |
| 840 | } finally { |
| 841 | isHaltHealth.set(prev) |
| 842 | } |
| 843 | } |
| 844 | } |
| 845 | |
| 846 | def fetchFiles( remote, local ){ |
| 847 | ssh.run { |
| 848 | session(remotes.vagrant) { |
| 849 | //execute "cd /home/vagrant/catalog-be/tmp ; ls -lt | grep catalog-be" //todo- use my dates to filter |
| 850 | def f = get from: remote , into: local |
| 851 | println f?.name |
| 852 | //return f |
| 853 | } |
| 854 | //println "fetched files in ${System.currentTimeMillis() - started} ms" |
| 855 | } |
| 856 | |
| 857 | //return null |
| 858 | } |
| 859 | |
| 860 | |
| 861 | def killJava(){ |
| 862 | execSafe { |
| 863 | def res |
| 864 | ssh.run { |
| 865 | session( remotes.vagrant ) { |
| 866 | println """ *-*-****************************-*-* |
| 867 | killing all java proccesses |
| 868 | *-*-****************************-*-* |
| 869 | """ |
| 870 | res = execute command[ALL][KILL]() |
| 871 | } |
| 872 | } |
| 873 | println res?.toString() |
| 874 | } |
| 875 | } |
| 876 | |
| 877 | def importNormative(){ |
| 878 | execSafe { |
| 879 | ssh.run { |
| 880 | session(remotes.vagrant) { |
| 881 | println """ *-*-************************************-*-* |
| 882 | importNormative |
| 883 | *-*-************************************-*-* |
| 884 | """ |
| 885 | execute "python -v $BE_REMOTE/scripts/import/tosca/importNormativeAll.py" |
| 886 | } |
| 887 | } |
| 888 | } |
| 889 | } |
| 890 | |
| 891 | def startAll(){ |
| 892 | def startCassandra = """ |
| 893 | #!/bin/bash |
| 894 | |
| 895 | cassandra& |
| 896 | elasticsearch -d |
| 897 | |
| 898 | #Wait until ES is up |
| 899 | until curl localhost:9200/_cluster/health; |
| 900 | do |
| 901 | printf "." |
| 902 | sleep 3 |
| 903 | done |
| 904 | |
| 905 | # Create Elastic Mapping if not exist in ES |
| 906 | createESMapping.sh |
| 907 | """ |
| 908 | execSafe { |
| 909 | ssh.run { |
| 910 | session(remotes.vagrant) { |
| 911 | println """ *-*-************************************-*-* |
| 912 | starting all SDC services(DB,BE,FE,Webseal) |
| 913 | *-*-************************************-*-* |
| 914 | """ |
| 915 | if ( NEW_VAG ){ |
| 916 | execute command[DB][START]() |
| 917 | Thread.sleep(5000) |
| 918 | execute command[CACHING][START]() |
| 919 | } |
| 920 | else |
| 921 | execute startCassandra |
| 922 | //[0..4]?.forEach( Thread?.sleep(2000) ) |
| 923 | Thread?.sleep(10000) |
| 924 | Thread?.sleep(10000) |
| 925 | execute command[BACKEND][START]() |
| 926 | execute command[FRONTEND][START]() |
| 927 | execute command[SECURITY][START]() |
| 928 | } |
| 929 | } |
| 930 | } |
| 931 | } |
| 932 | |
| 933 | |
| 934 | /*def clearLog(type: Delete){ |
| 935 | delete{ |
| 936 | delete 'C:/ProgramData/all.log' |
| 937 | followSymlinks = true |
| 938 | } |
| 939 | }*/ |
| 940 | task clearLog(type: Delete){ |
| 941 | doLast{ |
| 942 | delete 'C:/ProgramData/all.log' |
| 943 | followSymlinks = true |
| 944 | } |
| 945 | } |
| 946 | def logBE(){ |
| 947 | try{ |
| 948 | println "\n*** logging BE all.log ***\n" |
| 949 | |
| 950 | ssh.run { |
| 951 | session( remotes.vagrant ) { |
| 952 | //String now = execute 'echo \"\$(date +\'%Y_%m_%d\')\"' |
| 953 | //println "\n\n*******************************************************\n\n"+now?.toString() |
| 954 | clearLog?.execute() //todo- remove this .execute() |
| 955 | fetchFiles( '/home/vagrant/catalog-be/logs/SDC/SDC-BE/all.log' , 'C:/ProgramData') //"%USERPROFILE%\AppData\Local\") |
| 956 | //project.ext.set( "logFile" , 'C:/ProgramData/all.log' ) |
| 957 | |
| 958 | // -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*' |
| 959 | } |
| 960 | } |
| 961 | |
| 962 | parallel { |
| 963 | exec { |
| 964 | //if ( logFile ){ |
| 965 | String notepad = 'C:\\Program Files (x86)\\Notepad++\\notepad++.exe' |
| 966 | println "logging $logFile to notepad++ [$notepad]" |
| 967 | commandLine 'cmd','/c' , notepad ,logFile |
| 968 | } |
| 969 | } |
| 970 | }catch(Exception e){ |
| 971 | println "cannot open logs!!!" |
| 972 | e.printStackTrace() |
| 973 | } |
| 974 | } |
| 975 | task logBE(){ |
| 976 | doLast{ |
| 977 | logBE() |
| 978 | } |
| 979 | } |
| 980 | |
| 981 | def toggleHealthPolling(){ |
| 982 | isHaltHealth.set(!isHaltHealth.get()) |
| 983 | } |
| 984 | //converts predefined icon to Image |
| 985 | def Image convert( imageName ){ |
| 986 | String encodedimage = project.ext.get(imageName); |
| 987 | byte[] byteImage = encodedimage?.split(',')[1]?.decodeBase64() |
| 988 | Image image = ImageIO.read(new ByteArrayInputStream(byteImage)); |
| 989 | } |
| 990 | |
| 991 | def refreshMenu(String imageName){ |
| 992 | switch( imageName ) { |
| 993 | case 'unavailableImg' : toggleHealthString = "Resume Health"; break; |
| 994 | default : toggleHealthString = "Halt Health"; |
| 995 | } |
| 996 | if (((MenuItem)toggleHealthItemView).getLabel() != toggleHealthString) |
| 997 | ((MenuItem)toggleHealthItemView).setLabel(toggleHealthString); |
| 998 | } |
| 999 | def startDB(){ |
| 1000 | println "[MasterD] Starting database.." |
| 1001 | execSafe { |
| 1002 | ssh.settings { |
| 1003 | knownHosts = allowAnyHosts |
| 1004 | } |
| 1005 | ssh.run { |
| 1006 | session(remotes.vagrant) { |
| 1007 | execute command[DB][START]() |
| 1008 | } |
| 1009 | } |
| 1010 | } |
| 1011 | } |
| 1012 | task startDB(){ |
| 1013 | doLast { |
| 1014 | startDB() |
| 1015 | } |
| 1016 | } |
| 1017 | def stopDB(){ |
| 1018 | execSafe { |
| 1019 | ssh.settings { |
| 1020 | knownHosts = allowAnyHosts |
| 1021 | } |
| 1022 | ssh.run { |
| 1023 | session(remotes.vagrant) { |
| 1024 | execute command[DB][STOP]() |
| 1025 | } |
| 1026 | } |
| 1027 | } |
| 1028 | } |
| 1029 | task stopDB(){ |
| 1030 | doLast { |
| 1031 | stopDB() |
| 1032 | } |
| 1033 | } |
| 1034 | def startFE(){ |
| 1035 | execSafe { |
| 1036 | ssh.settings { |
| 1037 | knownHosts = allowAnyHosts |
| 1038 | } |
| 1039 | ssh.run { |
| 1040 | session(remotes.vagrant) { |
| 1041 | execute command[FRONTEND][START]() |
| 1042 | } |
| 1043 | } |
| 1044 | } |
| 1045 | } |
| 1046 | task startFE(){ |
| 1047 | doLast { |
| 1048 | startFE() |
| 1049 | } |
| 1050 | } |
| 1051 | def stopFE(){ |
| 1052 | execSafe { |
| 1053 | ssh.settings { |
| 1054 | knownHosts = allowAnyHosts |
| 1055 | } |
| 1056 | ssh.run { |
| 1057 | session(remotes.vagrant) { |
| 1058 | execute command[FRONTEND][STOP]() |
| 1059 | } |
| 1060 | } |
| 1061 | } |
| 1062 | } |
| 1063 | task stopFE(){ |
| 1064 | doLast { |
| 1065 | stopFE() |
| 1066 | } |
| 1067 | } |
| 1068 | |
| 1069 | def ActionListener newListener( closure ){ |
| 1070 | ActionListener listener = new ActionListener() { |
| 1071 | public void actionPerformed(ActionEvent e) { |
| 1072 | try { |
| 1073 | closure() |
| 1074 | } catch (AWTException e1) { |
| 1075 | System.err.println(e1); |
| 1076 | } |
| 1077 | } |
| 1078 | } |
| 1079 | |
| 1080 | listener |
| 1081 | } |
| 1082 | |
| 1083 | ext.updateTray = { STATUS status -> |
| 1084 | lastStatus = status |
| 1085 | if (SystemTray.isSupported()) { |
| 1086 | // get the SystemTray instance |
| 1087 | SystemTray tray = SystemTray.getSystemTray(); |
| 1088 | // load an image |
| 1089 | String imageName = status==STATUS.UP ? (Math.random()>0.5 ?'okImg1':'okImg2') : status==STATUS.UNAVAILABLE ? 'unavailableImg' : status==STATUS.DOWN ? 'errorImg' : 'warnImg' |
| 1090 | Image image = convert imageName |
| 1091 | if (trayIcon != null) { |
| 1092 | trayIcon.setImage(image) |
| 1093 | refreshMenu(imageName); |
| 1094 | return ; |
| 1095 | } |
| 1096 | //region -> Menu UI |
| 1097 | // create a popup menu |
| 1098 | PopupMenu popup = new PopupMenu(); |
| 1099 | // create menu item for the default action |
| 1100 | |
| 1101 | MenuItem hotswapItem = new MenuItem("===> WAR <==="); |
| 1102 | hotswapItem.setFont(new Font("MONOSPACED" , Font.BOLD ,15f )) |
| 1103 | |
| 1104 | //region Multilevel Menus |
| 1105 | Menu deployMasterMenu = new Menu("DeployMaster"); |
| 1106 | Menu backendMenu = new Menu("Backend"); |
| 1107 | Menu frontendMenu = new Menu("Frontend"); |
| 1108 | Menu dbMenu = new Menu("Database"); |
| 1109 | try{ |
| 1110 | deployMasterMenu.setFont(new Font("Cooper Black" ,Font.BOLD ,14f )) |
| 1111 | backendMenu.setFont(new Font("Cooper Black" ,Font.PLAIN ,13f )) |
| 1112 | frontendMenu.setFont(new Font("Cooper Black" ,Font.PLAIN ,13f )) |
| 1113 | dbMenu.setFont(new Font("Cooper Black" ,Font.PLAIN ,13f )) |
| 1114 | }catch(Exception e){ |
| 1115 | println e |
| 1116 | } |
| 1117 | |
| 1118 | //DeployMaster Menu |
| 1119 | MenuItem updaterBeWithDependenciesItem = new MenuItem("[BE] Quick Compile -> Deploy"); |
| 1120 | MenuItem updaterFullBeItem = new MenuItem("[BE] Full Install -> Deploy"); |
| 1121 | MenuItem updaterFeItem = new MenuItem("[FE] Quick Compile -> Deploy"); |
| 1122 | MenuItem updaterFullFeItem = new MenuItem("[FE] Full Install -> Deploy"); |
| 1123 | |
| 1124 | //Menu UI build |
| 1125 | |
| 1126 | deployMasterMenu.add(updaterFullBeItem); |
| 1127 | deployMasterMenu.add(updaterBeWithDependenciesItem); |
| 1128 | |
| 1129 | deployMasterMenu.addSeparator(); |
| 1130 | deployMasterMenu.add(updaterFullFeItem); |
| 1131 | deployMasterMenu.add(updaterFeItem); |
| 1132 | |
| 1133 | |
| 1134 | //BE menu |
| 1135 | MenuItem startItem = new MenuItem("[BE] Start"); |
| 1136 | MenuItem stopItem = new MenuItem("[BE] Stop BackEnd"); |
| 1137 | MenuItem copyBeWarItem = new MenuItem("[BE] Copy War"); |
| 1138 | backendMenu.add(startItem); |
| 1139 | backendMenu.add(stopItem); |
| 1140 | backendMenu.add(copyBeWarItem); |
| 1141 | |
| 1142 | //FE menu |
| 1143 | MenuItem startFEItem = new MenuItem("[FE] Start"); |
| 1144 | MenuItem stopFEItem = new MenuItem("[FE] Stop"); |
| 1145 | MenuItem copyFeWarItem = new MenuItem("[FE] Copy War"); |
| 1146 | frontendMenu.add(startFEItem); |
| 1147 | frontendMenu.add(stopFEItem); |
| 1148 | frontendMenu.add(copyFeWarItem); |
| 1149 | |
| 1150 | //DB menu |
| 1151 | MenuItem startDBItem = new MenuItem("[DB] Start"); |
| 1152 | MenuItem stopDBItem = new MenuItem("[DB] Stop"); |
| 1153 | MenuItem backupDBItem = new MenuItem("[DB] Backup"); |
| 1154 | MenuItem restoreDBItem = new MenuItem("[DB] Restore"); |
| 1155 | dbMenu.add(startDBItem); |
| 1156 | dbMenu.add(stopDBItem); |
| 1157 | dbMenu.add(backupDBItem); |
| 1158 | dbMenu.add(restoreDBItem); |
| 1159 | //endregion |
| 1160 | |
| 1161 | |
| 1162 | MenuItem killItem = new MenuItem("Kill All"); |
| 1163 | MenuItem startAllItem = new MenuItem("Start All"); |
| 1164 | MenuItem importItem = new MenuItem("Import Normative"); |
| 1165 | MenuItem healthInfoItem = new MenuItem("[Info] Health"); |
| 1166 | MenuItem toggleHealthItem = new MenuItem(toggleHealthString); |
| 1167 | MenuItem logsItem = new MenuItem("Logs [Beta]"); |
| 1168 | MenuItem exitItem = new MenuItem("Exit"); |
| 1169 | |
| 1170 | toggleHealthItemView = toggleHealthItem; |
| 1171 | |
| 1172 | popup.add(hotswapItem); |
| 1173 | popup?.addSeparator(); |
| 1174 | popup.add(deployMasterMenu); |
| 1175 | popup?.addSeparator(); |
| 1176 | popup.add(backendMenu) |
| 1177 | popup.add(frontendMenu) |
| 1178 | popup.add(dbMenu) |
| 1179 | popup?.addSeparator(); |
| 1180 | popup.add(startAllItem); |
| 1181 | popup.add(killItem); |
| 1182 | popup?.addSeparator(); |
| 1183 | popup.add(toggleHealthItem); |
| 1184 | popup.add(healthInfoItem); |
| 1185 | popup?.addSeparator(); |
| 1186 | popup.add(importItem); |
| 1187 | popup.add(logsItem); |
| 1188 | popup?.addSeparator(); |
| 1189 | popup.add(exitItem); |
| 1190 | //endregion UI |
| 1191 | // construct a TrayIcon |
| 1192 | trayIcon = new TrayIcon(image, "HealthTray", popup); |
| 1193 | |
| 1194 | //region -> Button actions |
| 1195 | def listenerHotswap = newListener { project.ext.set("IS_HOTSWAP", !IS_HOTSWAP); hotswapItem?.setLabel( IS_HOTSWAP ? "==> HotSwap <==" : "===> WAR <===") } |
| 1196 | // create a action listener to listen for default action executed on the tray icon |
| 1197 | def listenerFullBE = newListener { parallel { install_BE(); IS_HOTSWAP ? copyExplodedBE() : copyBE(); restartBackend() } } |
| 1198 | def listenerFullFE = newListener { parallel { install_FE(); copyFE() } } |
| 1199 | ActionListener listenerFE = newListener { parallel { updaterFE() } } |
| 1200 | ActionListener listenerBE = newListener { parallel { updaterBE() } } |
| 1201 | ActionListener exitListener = newListener { |
| 1202 | executor?.isShutdown() ?: executor?.shutdown() |
| 1203 | tray.remove(trayIcon); |
| 1204 | project.ext.set("isStopHealthCheck", true) |
| 1205 | println "Shutting down.. bye bye.." |
| 1206 | } |
| 1207 | ActionListener stopBackendListener = newListener { stopBackend() } |
| 1208 | ActionListener startBEListener = newListener { parallel { startBackend() } } |
| 1209 | ActionListener killJavaListener = newListener { killJava() } |
| 1210 | |
| 1211 | ActionListener startAllListener = newListener { parallel { startAll() } } |
| 1212 | |
| 1213 | ActionListener listener5 = new ActionListener() { |
| 1214 | public void actionPerformed(ActionEvent e) { |
| 1215 | try { |
| 1216 | parallel { importNormative() } |
| 1217 | } catch (AWTException e1) { |
| 1218 | System.err.println(e1); |
| 1219 | } |
| 1220 | } |
| 1221 | }; |
| 1222 | |
| 1223 | ActionListener listener6 = new ActionListener() { |
| 1224 | public void actionPerformed(ActionEvent e) { |
| 1225 | try { |
| 1226 | parallel { healthPopup() } |
| 1227 | } catch (AWTException e1) { |
| 1228 | System.err.println(e1); |
| 1229 | } |
| 1230 | } |
| 1231 | }; |
| 1232 | |
| 1233 | ActionListener listener7 = new ActionListener() { |
| 1234 | public void actionPerformed(ActionEvent e) { |
| 1235 | try { |
| 1236 | logBE()//tasks.logger.execute() |
| 1237 | } catch (AWTException e1) { |
| 1238 | System.err.println(e1); |
| 1239 | } |
| 1240 | } |
| 1241 | }; |
| 1242 | ActionListener listener8 = new ActionListener() { |
| 1243 | public void actionPerformed(ActionEvent e) { |
| 1244 | try { |
| 1245 | toggleHealthPolling()//tasks.logger.execute() |
| 1246 | } catch (AWTException e1) { |
| 1247 | System.err.println(e1); |
| 1248 | } |
| 1249 | } |
| 1250 | }; |
| 1251 | ActionListener copyBeWarListener = new ActionListener() { |
| 1252 | public void actionPerformed(ActionEvent e) { |
| 1253 | try { |
| 1254 | parallel { copyBE() }//.execute()//tasks.logger.execute() |
| 1255 | } catch (AWTException e1) { |
| 1256 | System.err.println(e1); |
| 1257 | } |
| 1258 | } |
| 1259 | }; |
| 1260 | |
| 1261 | ActionListener startDBListener = new ActionListener() { |
| 1262 | public void actionPerformed(ActionEvent e) { |
| 1263 | try { |
| 1264 | parallel { |
| 1265 | startDB() |
| 1266 | }//tasks.logger.execute() |
| 1267 | } catch (AWTException e1) { |
| 1268 | System.err.println(e1); |
| 1269 | } |
| 1270 | } |
| 1271 | } |
| 1272 | |
| 1273 | ActionListener stopDBListener = new ActionListener() { |
| 1274 | public void actionPerformed(ActionEvent e) { |
| 1275 | try { |
| 1276 | stopDB()//tasks.logger.execute() |
| 1277 | } catch (AWTException e1) { |
| 1278 | System.err.println(e1); |
| 1279 | } |
| 1280 | } |
| 1281 | } |
| 1282 | |
| 1283 | ActionListener dbBackupListener = new ActionListener() { |
| 1284 | public void actionPerformed(ActionEvent e) { |
| 1285 | try { |
| 1286 | parallel { |
| 1287 | backupDB()//tasks.logger.execute() |
| 1288 | } |
| 1289 | } catch (AWTException e1) { |
| 1290 | System.err.println(e1); |
| 1291 | } |
| 1292 | } |
| 1293 | } |
| 1294 | |
| 1295 | ActionListener feStartListener = new ActionListener() { |
| 1296 | public void actionPerformed(ActionEvent e) { |
| 1297 | try { |
| 1298 | parallel { |
| 1299 | startFE() |
| 1300 | }//tasks.logger.execute() |
| 1301 | } catch (AWTException e1) { |
| 1302 | System.err.println(e1); |
| 1303 | } |
| 1304 | } |
| 1305 | } |
| 1306 | |
| 1307 | ActionListener feStopListener = new ActionListener() { |
| 1308 | public void actionPerformed(ActionEvent e) { |
| 1309 | try { |
| 1310 | stopFE()//tasks.logger.execute() |
| 1311 | } catch (AWTException e1) { |
| 1312 | System.err.println(e1); |
| 1313 | } |
| 1314 | } |
| 1315 | } |
| 1316 | |
| 1317 | ActionListener feCopyListener = new ActionListener() { |
| 1318 | public void actionPerformed(ActionEvent e) { |
| 1319 | try { |
| 1320 | parallel { |
| 1321 | copyFE() //.execute()//tasks.logger.execute() |
| 1322 | } |
| 1323 | } catch (AWTException e1) { |
| 1324 | System.err.println(e1); |
| 1325 | } |
| 1326 | } |
| 1327 | } |
| 1328 | |
| 1329 | |
| 1330 | //def listenerFullModules = newListener { parallel { installAllProject() } } |
| 1331 | //region -> Button<=Listener |
| 1332 | hotswapItem.addActionListener(listenerHotswap) |
| 1333 | updaterFeItem.addActionListener(listenerFE) |
| 1334 | updaterFullBeItem.addActionListener( listenerFullBE ) |
| 1335 | updaterBeWithDependenciesItem.addActionListener( listenerBE ) |
| 1336 | updaterFullFeItem.addActionListener( listenerFullFE ) |
| 1337 | stopItem.addActionListener(stopBackendListener) |
| 1338 | startItem.addActionListener(startBEListener) |
| 1339 | copyBeWarItem.addActionListener(copyBeWarListener); |
| 1340 | killItem.addActionListener(killJavaListener) |
| 1341 | startAllItem.addActionListener(startAllListener) |
| 1342 | importItem.addActionListener(listener5) |
| 1343 | healthInfoItem.addActionListener(listener6) |
| 1344 | toggleHealthItem.addActionListener(listener8) |
| 1345 | logsItem.addActionListener(listener7) |
| 1346 | exitItem.addActionListener(exitListener) |
| 1347 | |
| 1348 | startDBItem.addActionListener( startDBListener ) |
| 1349 | stopDBItem.addActionListener( stopDBListener ) |
| 1350 | backupDBItem.addActionListener( dbBackupListener ) |
| 1351 | copyFeWarItem.addActionListener( feCopyListener ) |
| 1352 | startFEItem.addActionListener( feStartListener ) |
| 1353 | stopFEItem.addActionListener( feStopListener ) |
| 1354 | //endregion |
| 1355 | //endregion |
| 1356 | // set the TrayIcon properties |
| 1357 | |
| 1358 | // ... |
| 1359 | // add the tray image |
| 1360 | try { |
| 1361 | tray.add(trayIcon); |
| 1362 | |
| 1363 | } catch (AWTException e) { |
| 1364 | System.err.println(e); |
| 1365 | } |
| 1366 | // ... |
| 1367 | } else { |
| 1368 | println "Java TrayIcon Option is not supported in your System, try enabling it. Bye Bye" |
| 1369 | } |
| 1370 | |
| 1371 | } |
| 1372 | |
| 1373 | def prepareTray(){ |
| 1374 | long UPDATE_THRESHOLD = 3500 |
| 1375 | float SCALAR = 1 |
| 1376 | ssh.settings { |
| 1377 | knownHosts = allowAnyHosts |
| 1378 | } |
| 1379 | while(!isStopHealthCheck) { |
| 1380 | if (!isHaltHealth.get()) { //if await or await is more then 60 second return health check |
| 1381 | ssh.run { |
| 1382 | session(remotes.vagrant) { |
| 1383 | try { |
| 1384 | def healthOutput = execute command[ALL][HEALTH]() |
| 1385 | if (healthOutput?.contains("Failed command .* with status 7") || healthOutput?.contains("Problem accessing /sdc2/rest/healthCheck")) |
| 1386 | updateTray(STATUS.DOWN) |
| 1387 | def statusCollecion = healthOutput?.findAll "\"healthCheckStatus\": \".*\"" |
| 1388 | def upCount = statusCollecion?.count { it?.contains("UP") } |
| 1389 | def downCount = statusCollecion?.count { it?.contains("DOWN") } |
| 1390 | def uknownCount = (statusCollecion?.size() - upCount) - downCount |
| 1391 | println " UP -> $upCount | downCount=$downCount | uknownCount=$uknownCount " |
| 1392 | (uknownCount > 0 || (downCount > 0 && upCount > 0)) ? updateTray(STATUS.UNKNOWN) : ((upCount > 0) ? updateTray(STATUS.UP) : updateTray(STATUS.DOWN)) |
| 1393 | SCALAR = 1 |
| 1394 | } catch (Exception e) { |
| 1395 | updateTray(STATUS.DOWN) |
| 1396 | println e |
| 1397 | SCALAR = Math.min(SCALAR * 1.1, 5) //slow down on errors |
| 1398 | } |
| 1399 | //green color effects |
| 1400 | if (lastStatus && lastStatus == STATUS.UP) { |
| 1401 | trayIcon.setImage(convert(Math.random() > 0.5 ? 'okImg1' : 'okImg2')) |
| 1402 | //randomly green change color |
| 1403 | } |
| 1404 | Thread.yield() |
| 1405 | Thread?.sleep((long) (UPDATE_THRESHOLD * SCALAR)) |
| 1406 | } |
| 1407 | } |
| 1408 | }else{ |
| 1409 | updateTray(STATUS.UNAVAILABLE) |
| 1410 | Thread.yield() |
| 1411 | } |
| 1412 | } |
| 1413 | } |
| 1414 | |
| 1415 | def healthPopup(){ |
| 1416 | ssh.run { |
| 1417 | session(remotes.vagrant) { |
| 1418 | def healthOutput = execute command[ALL][HEALTH]() |
| 1419 | JOptionPane.showMessageDialog(null, |
| 1420 | healthOutput, |
| 1421 | "HEALTH", |
| 1422 | JOptionPane.INFORMATION_MESSAGE); |
| 1423 | } |
| 1424 | } |
| 1425 | } |
| 1426 | |
| 1427 | project.ext.set("msg", { content -> """ |
| 1428 | ************************************************************************************************ |
| 1429 | ************************************************************************************************ |
| 1430 | ******* ********* |
| 1431 | ************** **************** |
| 1432 | $content |
| 1433 | |
| 1434 | ************************************************************************************************ |
| 1435 | ************************************************************************************************ |
| 1436 | """} ) |