summaryrefslogtreecommitdiffstats
path: root/src/main/webapp/controllers/Tasks.cfc
blob: 392b8c463367cb98d966032c3aa56c14dc13481b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<cfcomponent extends="Controller">

	<cffunction name="cleanup">
		<cfscript>
	
		var stale_schemas = model("Schema_Def").findAll(where="last_used < '#DateAdd('n', -30, Now())#' AND current_host_id IS NOT NULL", returnAs="objects", order="last_used", maxRows="100", select="db_type_id,short_code,current_host_id,id");
		var i = 0;
		for (i = 1; i<= ArrayLen(stale_schemas); i++)
		{
			lock name="#stale_schemas[i].db_type_id#_#stale_schemas[i].short_code#" type="exclusive" timeout="60"
			{
				stale_schemas[i].purgeDatabase(1);
			}
		}

		
		</cfscript>

		<cfobjectcache 
		    action = "clear" />

		<cfset renderNothing()>


	</cffunction>

	<cffunction name="cleanDatasources">
		<cfscript>
			var loc = {};
			loc.datasources = getDatasources(adminPassword=get('CFAdminPassword'));
			loc.dsnArray = structKeyArray(loc.datasources);

			for (loc.i = 1; loc.i <= ArrayLen(loc.dsnArray); loc.i++) {
				loc.dsnMatch = reFind("^(\d+)_([a-z0-9]+)$", loc.dsnArray[loc.i], 0, true);
				if (ArrayLen(loc.dsnMatch.len) IS 3) {
					loc.db_type_id = mid(loc.dsnArray[loc.i], loc.dsnMatch.pos[2], loc.dsnMatch.len[2]);
					loc.short_code = mid(loc.dsnArray[loc.i], loc.dsnMatch.pos[3], loc.dsnMatch.len[3]);
					loc.active_database = model("Schema_Def").findOne(where="current_host_id IS NOT NULL AND db_type_id = #loc.db_type_id# AND short_code = '#loc.short_code#'", returnAs="object", select="db_type_id,short_code,current_host_id,id");
					if (loc.active_database IS false) {
						loc.host = model("Host");
						loc.host.db_type_id = loc.db_type_id;
						loc.host.dropDSN(loc.short_code);
					}
				}
			}
			abort;
			renderNothing();
		</cfscript>
	</cffunction>


</cfcomponent>