/* * Copyright 2011 Future Systems * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.krakenapps.dom.script; import java.util.Map; import java.util.Random; import org.krakenapps.api.Script; import org.krakenapps.api.ScriptArgument; import org.krakenapps.api.ScriptContext; import org.krakenapps.api.ScriptUsage; import org.krakenapps.confdb.Config; import org.krakenapps.confdb.ConfigDatabase; import org.krakenapps.confdb.ConfigService; import org.krakenapps.confdb.Predicates; import org.krakenapps.dom.api.ApplicationApi; import org.krakenapps.dom.api.AreaApi; import org.krakenapps.dom.api.ConfigManager; import org.krakenapps.dom.api.GlobalConfigApi; import org.krakenapps.dom.api.HostApi; import org.krakenapps.dom.api.HostUpdateApi; import org.krakenapps.dom.api.OrganizationApi; import org.krakenapps.dom.api.OrganizationUnitApi; import org.krakenapps.dom.api.ProgramApi; import org.krakenapps.dom.api.RoleApi; import org.krakenapps.dom.api.UserApi; import org.krakenapps.dom.model.Host; import org.krakenapps.dom.model.HostExtension; import org.krakenapps.dom.model.HostType; import org.krakenapps.dom.model.OrganizationUnit; import org.krakenapps.dom.model.Program; import org.krakenapps.dom.model.ProgramPack; import org.krakenapps.dom.model.ProgramProfile; import org.krakenapps.dom.model.User; import org.krakenapps.dom.model.Vendor; public class DomScript implements Script { private ScriptContext context; private GlobalConfigApi globalConfigApi; private OrganizationApi orgApi; private OrganizationUnitApi orgUnitApi; private UserApi userApi; private RoleApi roleApi; private ProgramApi programApi; private AreaApi areaApi; private HostApi hostApi; private ApplicationApi appApi; private HostUpdateApi updateApi; private ConfigService conf; public DomScript(GlobalConfigApi globalConfigApi, OrganizationApi orgApi, OrganizationUnitApi orgUnitApi, UserApi userApi, RoleApi roleApi, ProgramApi programApi, AreaApi areaApi, HostApi hostApi, ApplicationApi appApi, HostUpdateApi updateApi, ConfigService conf) { this.globalConfigApi = globalConfigApi; this.orgApi = orgApi; this.orgUnitApi = orgUnitApi; this.userApi = userApi; this.roleApi = roleApi; this.programApi = programApi; this.areaApi = areaApi; this.hostApi = hostApi; this.appApi = appApi; this.updateApi = updateApi; this.conf = conf; } @Override public void setScriptContext(ScriptContext context) { this.context = context; } // can remove master user @ScriptUsage(description = "remove user", arguments = { @ScriptArgument(name = "domain", type = "string", description = "domain"), @ScriptArgument(name = "login name", type = "string", description = "target login name") }) public void removeUser(String[] args) { String domain = args[0]; String loginName = args[1]; try { ConfigDatabase db = conf.getDatabase("kraken-dom-" + domain); Config c = db.findOne(User.class, Predicates.field("login_name", loginName)); if (c == null) { context.println("user not found"); return; } db.remove(c, true); context.println("done"); } catch (RuntimeException e) { context.println("[kraken-dom-" + domain + "] not found"); } } @ScriptUsage(description = "reset user password", arguments = { @ScriptArgument(name = "domain", type = "string", description = "domain"), @ScriptArgument(name = "login name", type = "string", description = "target login name") }) public void resetPassword(String[] args) { User user = userApi.findUser(args[0], args[1]); if (user == null) { context.println("admin not found"); return; } try { context.print("New Password: "); String password = context.readPassword(); user.setPassword(password); userApi.updateUser(args[0], user, true); } catch (InterruptedException e) { context.println(""); context.println("interrupted"); } } @ScriptUsage(description = "reset password", arguments = { @ScriptArgument(name = "domain", type = "string", description = "org domain"), @ScriptArgument(name = "login name", type = "string", description = "login name"), @ScriptArgument(name = "password", type = "string", description = "new password"), @ScriptArgument(name = "password as hash", type = "string", description = "true if hash input or false. false by default", optional = false) }) public void passwd(String[] args) { String domain = args[0]; String loginName = args[1]; String password = args[2]; boolean updatePassword = true; if (args.length >= 4) { updatePassword = !Boolean.parseBoolean(args[3]); } User user = userApi.getUser(domain, loginName); user.setPassword(password); userApi.updateUser(domain, user, updatePassword); context.println("password reset"); } public void install(String[] args) { InitialSchema.generate(context, globalConfigApi, orgApi, roleApi, programApi, areaApi, userApi); context.println("install complete"); } public void hostTypes(String[] args) { context.println("Host Types"); context.println("------------"); for (HostType t : hostApi.getHostTypes("localhost")) { context.println(t); for (HostExtension ext : t.getDefaultExtensions()) { context.println("\t" + ext); } } } @ScriptUsage(description = "print all hosts in org domain", arguments = { @ScriptArgument(name = "org domain", type = "string", description = "org domain name. 'localhost' by default", optional = true) }) public void hosts(String[] args) { String orgDomain = "localhost"; if (args.length > 0) orgDomain = args[0]; context.println("Hosts"); context.println("--------"); for (Host h : hostApi.getHosts(orgDomain)) { context.println(h); } } @ScriptUsage(description = "add vendor", arguments = { @ScriptArgument(name = "domain", type = "string", description = "domain"), @ScriptArgument(name = "name", type = "string", description = "name") }) public void addVendor(String[] args) { Vendor vendor = new Vendor(); vendor.setName(args[1]); appApi.createVendor(args[0], vendor); context.println("added " + vendor.getGuid()); } @ScriptUsage(description = "add host type", arguments = { @ScriptArgument(name = "domain", type = "string", description = ""), @ScriptArgument(name = "vendor guid", type = "string", description = ""), @ScriptArgument(name = "name", type = "string", description = ""), @ScriptArgument(name = "version", type = "string", description = "") }) public void addHostType(String[] args) { Vendor vendor = appApi.getVendor(args[0], args[1]); HostType t = new HostType(); t.setVendor(vendor); t.setName(args[2]); t.setVersion(args[3]); hostApi.createHostType(args[0], t); context.println("added " + t.getGuid()); } @ScriptUsage(description = "add host extension", arguments = { @ScriptArgument(name = "domain", type = "string", description = ""), @ScriptArgument(name = "host type guid", type = "string", description = ""), @ScriptArgument(name = "type", type = "string", description = "host extension type"), @ScriptArgument(name = "ordinal", type = "string", description = "ordinal") }) public void addHostExtension(String[] args) { String domain = args[0]; String hostTypeGuid = args[1]; String type = args[2]; int ordinal = Integer.valueOf(args[3]); HostExtension ext = new HostExtension(); ext.setType(type); ext.setOrd(ordinal); HostType t = hostApi.getHostType(domain, hostTypeGuid); t.getDefaultExtensions().add(ext); hostApi.updateHostType(domain, t); context.println("added"); } @ScriptUsage(description = "list all programs", arguments = { @ScriptArgument(name = "domain", type = "string", description = "") }) public void programs(String[] args) { context.println("Programs"); context.println("----------"); for (Program p : programApi.getPrograms(args[0])) { context.println(p); } } @ScriptUsage(description = "add new program", arguments = { @ScriptArgument(name = "domain", type = "string", description = "org domain"), @ScriptArgument(name = "package name", type = "string", description = "package name"), @ScriptArgument(name = "name", type = "string", description = "program name"), @ScriptArgument(name = "type", type = "string", description = "program type") }) public void addProgram(String[] args) { String domain = args[0]; String packName = args[1]; String name = args[2]; String type = args[3]; Program p = new Program(); p.setPack(packName); p.setName(name); p.setPath(type); p.setVisible(true); programApi.createProgram(domain, p); ProgramProfile pp = programApi.getProgramProfile(domain, "all"); pp.getPrograms().add(p); programApi.updateProgramProfile(domain, pp); context.println("added"); } @ScriptUsage(description = "add new program", arguments = { @ScriptArgument(name = "domain", type = "string", description = "org domain"), @ScriptArgument(name = "package name", type = "string", description = "package name"), @ScriptArgument(name = "name", type = "string", description = "program name") }) public void updateProgram(String[] args) { String domain = args[0]; String packName = args[1]; String name = args[2]; Program program = programApi.findProgram(domain, packName, name); if (program == null) { context.println("not found"); return; } try { context.print("description: " + program.getDescription() + " -> "); String description = context.readLine(); if (!description.isEmpty()) program.setDescription(description); context.print("path: " + program.getDescription() + " -> "); String path = context.readLine(); if (!path.isEmpty()) program.setPath(path); context.print("visible: " + program.getDescription() + " -> "); String visible = context.readLine(); if (!visible.isEmpty()) program.setVisible(Boolean.parseBoolean(visible)); context.print("seq: " + program.getDescription() + " -> "); String seq = context.readLine(); if (!seq.isEmpty()) program.setSeq(Integer.parseInt(seq)); programApi.updateProgram(domain, program); } catch (InterruptedException e) { context.println("interrupted"); } } @ScriptUsage(description = "remove program", arguments = { @ScriptArgument(name = "domain", type = "string", description = "org domain"), @ScriptArgument(name = "package name", type = "string", description = "package name"), @ScriptArgument(name = "program name", type = "string", description = "program name") }) public void removeProgram(String[] args) { String domain = args[0]; String packName = args[1]; String programName = args[2]; ProgramProfile pp = programApi.getProgramProfile(domain, "all"); Program target = null; for (Program p : pp.getPrograms()) if (p.getPack().equals(packName) && p.getName().equals(programName)) target = p; pp.getPrograms().remove(target); programApi.updateProgramProfile(domain, pp); programApi.removeProgram(domain, packName, programName); context.println("removed"); } @ScriptUsage(description = "add new program pack", arguments = { @ScriptArgument(name = "domain", type = "string", description = "org domain"), @ScriptArgument(name = "pack name", type = "string", description = "pack name"), @ScriptArgument(name = "dll", type = "string", description = "dll") }) public void addProgramPack(String[] args) { String domain = args[0]; String packName = args[1]; String dll = args[2]; ProgramPack pack = new ProgramPack(); pack.setName(packName); pack.setDll(dll); programApi.createProgramPack(domain, pack); } @ScriptUsage(description = "set organization parameter", arguments = { @ScriptArgument(name = "domain", type = "string", description = "organization domain"), @ScriptArgument(name = "name", type = "string", description = "organization parameter name"), @ScriptArgument(name = "value", type = "string", description = "organization parameter value"), @ScriptArgument(name = "type", type = "string", description = "string or int") }) public void setOrgParam(String[] args) { Object value = null; if (args[3].equalsIgnoreCase("string")) value = args[2]; else if (args[3].equalsIgnoreCase("int")) value = Integer.valueOf(args[2]); orgApi.setOrganizationParameter(args[0], args[1], value); context.println("set"); } @ScriptUsage(description = "remove organization parameter", arguments = { @ScriptArgument(name = "domain", type = "string", description = "organization domain"), @ScriptArgument(name = "name", type = "string", description = "organization parameter name") }) public void unsetOrgParam(String[] args) { orgApi.unsetOrganizationParameter(args[0], args[1]); context.println("unset"); } @ScriptUsage(description = "set organization parameter", arguments = { @ScriptArgument(name = "domain", type = "string", description = "organization domain") }) public void orgParams(String[] args) { Map<String, Object> m = orgApi.getOrganizationParameters(args[0]); context.println("Organization Parameters"); for (String key : m.keySet()) context.println(key + "=" + m.get(key)); } @ScriptUsage(description = "current waiting host count") public void pendingUpdates(String[] args) { context.println("Waiting host count: " + updateApi.getPendingCount()); } @ScriptUsage(description = "update hosts", arguments = { @ScriptArgument(name = "count", type = "string", description = "host count") }) public void updateHosts(String[] args) { int count = Integer.parseInt(args[0]); if (count <= 0) { context.println("host count should be larger than 0"); return; } Random random = new Random(); while (count > 0) { Host host = new Host(); int id = random.nextInt(20000); host.setGuid(String.valueOf(id)); host.setName(String.valueOf(id)); HostType type = new HostType(); type.setGuid("0dd73318-6db5-49fd-aae4-7deff285da6b"); host.setType(type); updateApi.update(host); count--; } } @ScriptUsage(description = "print organization units", arguments = { @ScriptArgument(name = "domain", type = "string", description = "organization domain") }) public void orgUnits(String[] args) { context.println("DOM Organization Units"); context.println("-------------------------"); for (OrganizationUnit orgUnit : orgUnitApi.getOrganizationUnits(args[0])) { context.println(orgUnit); } } @ScriptUsage(description = "print users", arguments = { @ScriptArgument(name = "domain", type = "string", description = "organization domain") }) public void users(String[] args) { context.println("DOM Users"); context.println("-------------"); for (User user : userApi.getUsers(args[0])) { context.println(user); } } }