001/* 002 * Copyright (C) Photon Vision. 003 * 004 * This program is free software: you can redistribute it and/or modify 005 * it under the terms of the GNU General Public License as published by 006 * the Free Software Foundation, either version 3 of the License, or 007 * (at your option) any later version. 008 * 009 * This program is distributed in the hope that it will be useful, 010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 012 * GNU General Public License for more details. 013 * 014 * You should have received a copy of the GNU General Public License 015 * along with this program. If not, see <https://www.gnu.org/licenses/>. 016 */ 017 018package org.photonvision.common.scripting; 019 020import java.io.IOException; 021import org.photonvision.common.logging.LogGroup; 022import org.photonvision.common.logging.Logger; 023import org.photonvision.common.util.ShellExec; 024 025public class ScriptEvent { 026 private static final ShellExec executor = new ShellExec(true, true); 027 028 public final ScriptConfig config; 029 private final Logger logger = new Logger(ScriptEvent.class, LogGroup.General); 030 031 public ScriptEvent(ScriptConfig config) { 032 this.config = config; 033 } 034 035 public int run() throws IOException { 036 int retVal = executor.executeBashCommand(config.command); 037 038 String output = executor.getOutput(); 039 String error = executor.getError(); 040 041 if (!error.isEmpty()) { 042 logger.error("Error when running \"" + config.eventType.name() + "\" script: " + error); 043 } else if (!output.isEmpty()) { 044 logger.info( 045 String.format("Output from \"%s\" script: %s\n", config.eventType.name(), output)); 046 } 047 logger.info( 048 String.format( 049 "Script for %s ran with command line: \"%s\", exit code: %d, output: %s, " 050 + "error: %s\n", 051 config.eventType.name(), config.command, retVal, output, error)); 052 return retVal; 053 } 054}