groovity.servlet.admin.ui.compiler.grvt Maven / Gradle / Ivy
/*******************************************************************************
* © 2018 Disney | ABC Television Group
*
* Licensed under the Apache License, Version 2.0 (the "Apache License")
* with the following modification; you may not use this file except in
* compliance with the Apache License and the following modification to it:
* Section 6. Trademarks. is deleted and replaced with:
*
* 6. Trademarks. This License does not grant permission to use the trade
* names, trademarks, service marks, or product names of the Licensor
* and its affiliates, except as required to comply with Section 4(c) of
* the License and to reproduce the content of the NOTICE file.
*
* You may obtain a copy of the Apache License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the Apache License with the above modification is
* distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the Apache License for the specific
* language governing permissions and limitations under the Apache License.
*******************************************************************************/
import com.disney.groovity.servlet.admin.ClusterMember;
import javax.servlet.http.Cookie;
static args = [
selectedHosts:new String[0],
selectedFiles:new String[0],
userName:null,
comment:null,
forceAll:false
]
load '/groovity/servlet/admin/lib/compilerSupport'
@Field dateLib = load('/groovity/servlet/admin/lib/date');
@Field clusterClient = run('/groovity/servlet/admin/lib/clusterClient')
Map sources = [:];
getClass().classLoader.groovity.sourceLocators.each{ it.each{
source ->
sources.put(source.path,source.lastModified);
}}
members = new ArrayList(clusterClient.clusterProvider.members)
//TODO this is for testing only
//members << new ClusterMember(InetAddress.getLocalHost(),898989,UUID.nameUUIDFromBytes("SampleHost".bytes));
if(!selectedHosts){
selectedHosts = members.collect{ it.uuid.toString() }
}
if(userName){
//username being set, update the cookie
Cookie userCookie = new Cookie("groovityUser",userName);
userCookie.setPath('/groovity/servlet/admin/');
if(userName=='DELETE_ME'){
//blank, actually deleting the cookie
userCookie.maxAge=0;
userName = null;
}
else{
//10 years
userCookie.maxAge=315360000;
}
response.addCookie(userCookie);
}
else{
//look for user name in cookies
Cookie userCookie = ((request.cookies) as List).find{it.name=='groovityUser'};
if(userCookie){
userName = userCookie.value
}
}
if(request.method=='POST' && userName){
if(forceAll){
compilerSupport.compileAll(userName,members.findAll({ selectedHosts.contains(it.uuid.toString())}),comment);
}
else if(selectedFiles){
compilerSupport.compile(userName,members.findAll({ selectedHosts.contains(it.uuid.toString())}),comment,selectedFiles);
}
//now sleep briefly to let status update
Thread.sleep(100);
}
compilerStatus = compilerSupport.getCompilerStatus(members);
changedSources = new HashSet();
selectedHosts.each{uuid->
def member = members.find{ it.uuid.toString().equals(uuid)}
if(member!=null){
def compiledDates = compilerStatus.get(member)?.status;
if(compiledDates!=null && compiledDates.size() > 0){
sources.each{ path, lastMod ->
if(!changedSources.contains(path)){
def entry = compiledDates.find{it[0]==path};
if(entry!=null){
def compiledDate = entry[1];
if(compiledDate != lastMod){
changedSources << path;
}
}
else{
changedSources << path;
}
}
}
compiledDates.each{ path, lastMod ->
if(!changedSources.contains(path) && !sources.containsKey(path)){
//deleted file
changedSources << path;
}
}
}
}
}
if(!selectedFiles){
selectedFiles = changedSources
}
<~
${host.address.hostName}:${host.port}
${status.busy}
${errors.size()} errors
${dateLib.formatRelative(err.time)}
${err.path}
${err.error}
${successful.size()} successfully compiled
${dateLib.formatRelative(success.time)}
${success.path}
${deleted.size()} deleted classes
${dateLib.formatRelative(del.time)}
${del.path}
~>