On 3/12/2011 9:29 AM, ganiuszka wrote: > W dniu 11 marca 2011 21:45 użytkownik ganiuszka<ganius...@gmail.com> napisał: >> Hi, >> In my example jobid is putting in: >> ... File.JobId=8... >> but this "eight": >> >> base64_decode_lstat(8,File.LStat) >> >> is exactly eight field (encoded filesize field). I seem that you used >> standard base64 decoder to decode eighth field. Am I right? >> >> Bacula lstat is encoded by using non-standard base64 algorithm. Your >> decoded lstat shows like this: >> >> [dev] => 89 >> [inodes] => 1366434 >> [mode] => 33200 >> [links] => 1 >> [uid] => 80 >> [gid] => 91 >> [rdev] => 5481898 >> [size] => 315 >> [blksize] => 16384 >> [blocks] => 4 >> [atime] => 1299770037 >> [mtime] => 1299770037 >> [ctime] => 1299770066 >> [LinkFl] => 0 >> [flags] => 0 >> [data] => 2 >> >> I do not understand every field, but most fields is clear. Now, I >> wrote implementation of Bacula base64_decoder in PHP. I need finish it >> and make WebGUI for this and I will share this decoder here. For this >> I am using source code of base64 implementation in Bacula and this: >> >> http://old.nabble.com/The-File.LStat-field-td940366.html >> >> Regards. >> gani >> >> 2011/3/11 Dan Langille<d...@langille.org>: >>> On 3/9/2011 5:36 PM, ganiuszka wrote: >>> >>>> 2011/3/9 Mike Eggleston<mikee...@mac.com>: >>>>> >>>>> Afternoon, >>>>> >>>>> I just noticed one of my clients had a huge incremental (level 2) >>>>> backup. I want to see what file caused the huge increase. I tried 'list >>>>> files jobid=20097' and though I'm shown the files, I'm not shown the >>>>> size of each file. Is there a command or query that shows me the size >>>>> of the file? >>>>> >>>>> Mike >>> >>>> Hi, >>>> Here you have SQL function for PostgreSQL (I took it from bweb): >>>> >>>> CREATE PROCEDURAL LANGUAGE plpgsql; >>>> BEGIN; >>>> >>>> CREATE OR REPLACE FUNCTION base64_decode_lstat(int4, varchar) RETURNS int8 >>>> AS $$ >>>> DECLARE >>>> val int8; >>>> b64 varchar(64); >>>> size varchar(64); >>>> i int; >>>> BEGIN >>>> size := split_part($2, ' ', $1); >>>> b64 := 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; >>>> val := 0; >>>> FOR i IN 1..length(size) LOOP >>>> val := val + (strpos(b64, substr(size, i, 1))-1) * (64^(length(size)-i)); >>>> END LOOP; >>>> RETURN val; >>>> END; >>>> $$ language 'plpgsql'; >>>> >>>> COMMIT; >>>> >>>> and this is a query which lists file path, filename and size in Bytes >>>> (in this example for jobid=8): >>>> >>>> SELECT Path.Path, Filename.Name, base64_decode_lstat(8,File.LStat) AS >>>> size FROM Filename, File, Path WHERE File.JobId=8 AND >>>> File.PathId=Path.PathId AND Filename.FilenameId=File.FilenameId ORDER >>>> BY size ASC; >>>> >>>> I tested it. It works. >>> >>> For the record: >>> >>> In this query, I see base64_decode_lstat(8,File.LStat) >>> >>> What is 8? It is not jobid. It is a field id. This lstat value: >>> >>> BZ FNmi IGw B BQ Bb U6Wq E7 EAA E BNeOq1 BNeOq1 BNeOrS A A C >>> >>> The eight field, as defined by ' ', is E7. >>> >>> -- >>> Dan Langille - http://langille.org/ >>> > > >
> Hi, > > I wrote the Bacula LStat decoder implementation in PHP. I made WebGUI > for this also. Now online LStat decoder (beta version) is available on > my page Bacula.pl: > > http://www.bacula.pl/bacula-lstat-decoder/ > > In the near future I need to make description of fields. > > Here is Bacula LStat decoder function in PHP: > > function decode_bacula_lstat($lstat) { > $base64 = > 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; > $lstat = trim($lstat); > $lstat_fields = explode(' ', $lstat); > > if(count($lstat_fields) !== 16) { > die('Error! Number of lstat fields is invalid. Please make sure > that > it is valid lstat string.'); > } > > list($dev, $inode, $mode, $links, $uid, $gid, $rdev, $size, $blksize, > $blocks, $atime, $mtime, $ctime, $linkfi, $flags, $data) = > $lstat_fields; > $encoded_values = array('dev' => $dev, 'inode' => $inode, 'mode' => > $mode, 'links' => $links, 'uid' => $uid, 'gid' => $gid, 'rdev' => > $rdev, 'size' => $size, 'blksize' => $blksize, 'blocks' => $blocks, > 'atime' => $atime, 'mtime' => $mtime, 'ctime' => $ctime, 'linkfi' => > $linkfi, 'flags' => $flags, 'data' => $data); > > $ret = array(); > foreach($encoded_values as $key => $val) { > $result = 0; > $is_minus = false; > $start = 0; > > if(substr($val, 0, 1) === '-') { > $is_minus = true; > $start++; > } > > for($i = $start; $i < strlen($val); $i++) { > $result <<= 6; > $result += strpos($base64, substr($val, $i , 1)); > } > $ret[$key] = ($is_minus === true) ? -$result : $result; > } > return $ret; > } > > and here is usage for this: > > $lstat = 'gB DL+b IGg B A y A D5dZR BAA fN4 BNeR+z BNeR+7 BNeR+7 A A C'; > $decoded_lstat = decode_bacula_lstat($lstat); > print_r($decoded_lstat); > > Any suggestions and modifications are welcome. > Regards > gani > I tried this function. I got an interesting value for: Bn bIgF IGk B Pp Pp BsZ/o Cp7/ZH EAA VQLA BNachF BNacW5 BNachH A A C The PHP function returns: -1443891641 The pgsql function returns: bacula=# select base64_decode_lstat(8,'Bn bIgF IGk B Pp Pp BsZ/o Cp7/ZH EAA VQLA BNachF BNacW5 BNachH A A C') bacula-# ; base64_decode_lstat --------------------- 2851075655 (1 row) bacula=# Which is a more likely value.... FYI. -- Dan Langille - http://langille.org/ ------------------------------------------------------------------------------ Colocation vs. Managed Hosting A question and answer guide to determining the best fit for your organization - today and in the future. http://p.sf.net/sfu/internap-sfd2d _______________________________________________ Bacula-users mailing list Bacula-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bacula-users