All Downloads are FREE. Search and download functionalities are using the official Maven repository.

groovity.servlet.admin.ui.compiler.grvt Maven / Gradle / Ivy

There is a newer version: 2.1.0-beta.1
Show newest version
/*******************************************************************************
 * © 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
}
<~   



User
${userName}
Hosts
Files
Comment

warning: not for casual use
${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}
~>




© 2015 - 2024 Weber Informatics LLC | Privacy Policy