package org.yamcs.cli; import java.util.HashMap; import org.rocksdb.RocksDB; import org.yamcs.parameterarchive.ParameterArchive; import org.yamcs.parameterarchive.ParameterGroupIdDb; import org.yamcs.parameterarchive.ParameterIdDb; import org.yamcs.parameterarchive.ParameterIdDb.ParameterId; import org.yamcs.utils.SortedIntArray; import org.yamcs.utils.TimeEncoding; import com.beust.jcommander.Parameter; import com.beust.jcommander.Parameters; /** * Command line utility for doing general archive operations * * @author nm * */ @Parameters(commandDescription = "Parameter Archive operations (works offline, the yamcs server has to be stopped)") public class ParameterArchiveCli extends Command { @Parameter(names="--instance", description="yamcs instance", required=true) String yamcsInstance; public ParameterArchiveCli(YamcsCli yamcsCli) { super("parchive", yamcsCli); addSubCommand(new PrintPid()); addSubCommand(new PrintPgid()); TimeEncoding.setUp(); } @Parameters(commandDescription = "Print parameter name to parameter id mapping") class PrintPid extends Command { PrintPid() { super("print-pid", ParameterArchiveCli.this); } @Override public void execute() throws Exception { RocksDB.loadLibrary(); ParameterArchive parchive = new ParameterArchive(yamcsInstance, new HashMap<String, Object>()); ParameterIdDb pid = parchive.getParameterIdDb(); pid.print(System.out); } } @Parameters(commandDescription = "Print parameter group compositions") class PrintPgid extends Command { @Parameter(names="--name", description="fully qualified name of the parameter", required=true) String name; PrintPgid() { super("print-pgid", ParameterArchiveCli.this); } @Override public void execute() throws Exception { RocksDB.loadLibrary(); ParameterArchive parchive = new ParameterArchive(yamcsInstance, new HashMap<String, Object>()); ParameterIdDb pid = parchive.getParameterIdDb(); ParameterGroupIdDb pgid = parchive.getParameterGroupIdDb(); ParameterId[] pids = pid.get(name); if(pids==null) { console.println("No parameter named '"+name+"' in the parameter archive"); return; } for(ParameterId p: pids) { console.println("groups for "+p+": "); int[] groups = pgid.getAllGroups(p.pid); for(int g: groups) { console.print(g+": "); SortedIntArray sia = pgid.getParameterGroup(g); for(int a:sia.getArray()) { console.print(pid.getParameterbyId(a)+ " "); } console.println(""); } } } } }