API CHANGE:

Two new actions for the sysadm/update class: "listlogs" and "readlogs";

REST Request (example):
-------------------------------
PUT /sysadm/update
{
   "action" : "listlogs"
}

WebSocket Request:
-------------------------------
{
   "namespace" : "sysadm",
   "name" : "update",
   "args" : {
      "action" : "listlogs"
   },
   "id" : "fooid"
}

Response:
-------------------------------
{
  "args": {
    "listlogs": {
      "pc-updatemanager.log": {
        "finished": "1484127618",
        "name": "pc-updatemanager.log",
        "started": "1484127618"
      },
      "pc-updatemanager.log.prev": {
        "finished": "1484109171",
        "name": "pc-updatemanager.log.prev",
        "started": "1484109171"
      }
    }
  },
  "id": "fooid",
  "name": "response",
  "namespace": "sysadm"
}

===================================

REST Request (example):
-------------------------------
PUT /sysadm/update
{
   "logs" : [
      "pc-updatemanager.log"
   ],
   "action" : "readlogs"
}

WebSocket Request:
-------------------------------
{
   "id" : "fooid",
   "namespace" : "sysadm",
   "name" : "update",
   "args" : {
      "logs" : [
         "pc-updatemanager.log"
      ],
      "action" : "readlogs"
   }
}

Response:
-------------------------------
{
  "args": {
    "readlogs": {
      "pc-updatemanager.log": "pc-updatemanager: Tue Jan 10 23:32:51 EST 2017\nChecking for updates to ports-mgmt/pkg..\nUpdating the package repo database...\nCleaning old pkg upgrade cache...\n<Shortened For Example>\nDetermine new BE name...\nCleanup mounts..."
    }
  },
  "id": "fooid",
  "name": "response",
  "namespace": "sysadm"
}
This commit is contained in:
Ken Moore
2017-01-12 12:57:40 -05:00
parent 23bca07fac
commit 311bd579f3
3 changed files with 47 additions and 2 deletions

View File

@@ -603,6 +603,14 @@ RestOutputStruct::ExitCode WebSocket::EvaluateSysadmUpdateRequest(const QJsonVal
}else if(act=="changesettings"){
ok = true;
out->insert("changesettings", sysadm::Update::writeSettings(in_args.toObject()) );
}else if(act=="listlogs"){
ok = true;
out->insert("listlogs", sysadm::Update::listLogs() );
}else if(act=="readlogs" && in_args.toObject().contains("logs") ){
ok = true;
out->insert("readlogs", sysadm::Update::readLog(in_args.toObject()) );
}
} //end of "action" key usage

View File

@@ -310,3 +310,38 @@ QJsonObject Update::writeSettings(QJsonObject obj){
return ret;
}
//List/Read update logs
QJsonObject Update::listLogs(){
QJsonObject out;
QDir logdir("/var/log");
QFileInfoList logs = logdir.entryInfoList(QStringList() << "pc-updatemanager*", QDir::Files, QDir::Time);
for(int i=0; i<logs.length(); i++){
QJsonObject tmp;
tmp.insert("started", QString::number( logs[i].created().toTime_t() ) );
tmp.insert("finished", QString::number( logs[i].lastModified().toTime_t() ) );
tmp.insert("name", logs[i].fileName());
out.insert(logs[i].fileName(), tmp);
}
return out;
}
QJsonObject Update::readLog(QJsonObject obj){
QJsonObject ret;
//Check Inputs
if(obj.contains("logs")){
QJsonValue val = obj.value("logs");
QStringList logs;
if(val.isString()){ logs << val.toString(); }
else if(val.isArray()){ logs = General::JsonArrayToStringList(obj.value("logs").toArray()); }
QString logdir = "/var/log/";
for(int i=0; i<logs.length(); i++){
if(!logs[i].startsWith("pc-updatemanager")){ continue; } //wrong type of log file - this only handles pc-updatemanager logs
QStringList info = General::readTextFile(logdir+logs[i]);
if(!info.isEmpty()){
ret.insert(logs[i], info.join("\n"));
}
}
}
return ret;
}

View File

@@ -26,10 +26,12 @@ public:
//Read/write update settings
static QJsonObject readSettings();
static QJsonObject writeSettings(QJsonObject);
//List/Read update logs
static QJsonObject listLogs();
static QJsonObject readLog(QJsonObject);
};
} //end of pcbsd namespace
}
#endif