Questo articolo mostra come estrarre alcuni metadati descritti da ITSMO da un repository subversion.
ITSMO è un vocabolario per annotare servizi IT. Uno dei concetti introdotti da ITSMO è quello di "Configuration Item".
Uno degli attributi più importanti del Configuration item è senz'altro quello che lega il Configuration Item con la sua "configurazione" memorizzata in un CMDB .
Un modo efficace per gestire una configurazione è quello di memorizzarla come una directory in un repository Subversion.
Il comando svn info, lanciato in una directory sotto il controllo di subversion fornisce un output simile a questo:
Path: .
URL: https://subversion.assembla.com/svn/itsmo/trunk/v1
Repository Root: https://subversion.assembla.com/svn/itsmo
Repository UUID: aa9e2203-f931-4cdb-89b8-cce8243f9edb
Revision: 127
Node Kind: directory
Schedule: normal
Last Changed Author: e-artspace
Last Changed Rev: 127
Last Changed Date: 2011-09-04 10:01:38 +0000 (Sun, 04 Sep 2011)
Da queste informazioni possiamo ricavare preziosi metadati che possono essere annotati con l'ontologia ITSMO ed in particolare:
- l'URI della configurazione ( itsmo:hasConfiguration) dal campo URL
- l'URI del CMDB ( itsmo:hasCMDB) dal campo Repository Root
- L'URI della baseline ( itsmo:hasBaseline) che si può facilmente ottenere dal numero di Revisione (nel campo Revision). Un semplice sistema per ricavare un uri è quello di aggiungere un frammento all'URI della configurazione; ad esempio:
https://subversion.assembla.com/svn/itsmo/trunk/v1#127
Purtroppo un url così formato non è dereferenziato in modo ottimale. Un metodo più complicato ma efficace è di comporre l'URI della snapshot partenedo dalle informazioni già ricavate per CMDB, configuration e revision come nel seguente esempio:
https://subversion.assembla.com/svn/itsmo/trunk/!svn/bc/127/trunk/v1
vedi il questo articolo per maggiori informazioni .
Ecco una semplice classe php che estrae i metadati e come utilizzarla per generare linked data:
<?php
//Place this code in the configuration directory
class SvnITSMOMetadata{
protected function parseInfo($s){
return preg_match("/$s:\s+(.*)/",$this->svninfo, $matches)?trim($matches[1]):"unknown";
}
public function __construct($subject) {
$this->subject=$subject;
exec('svn info', $out);
$this->svninfo=implode("\n",$out);
$this->CMDB=$this->parseInfo('Repository Root');
$this->configuration=$this->parseInfo('URL');
$this->revision=$this->parseInfo('Revision');
$this->baselinePath=substr($this->configuration, strlen($this->CMDB));
$this->baselineURI= $this->CMDB.'/!svn/bc/'.$this->revision.$this->baselinePath;
}
public function showTurtle(){
echo "
@prefix itsmo: <http://ontology.it/itsmo/v1#>
<$metadata->subject> itsmo:hasConfiguration <$metadata->configuration>;
rdfs:comment 'The based subversion configuration for $this->subject'.
itsmo:hasCMDB <$metadata->CMDB>;
itsmo:hasBaseline <$this->baselineURI>;
<$this->baselineURI> rdfs:label 'Revision $this->revision';
rdfs:comment '$this->svninfo'.
";
}
}
$metadata= New SvnITSMOMetadata("http://example.com/MyConfigUri");
$metadata->showTurtle();