% python zyppHist.py -h Usage: zyppHist.py [options] Report change log entries for recent installs (zypper/rpm). Options: -h, --help show this help message and exit -i INSTALLDAYS, --installed-since=INSTALLDAYS Include anything installed up to INSTALLDAYS days ago. -c CHANGEDAYS, --changedSince=CHANGEDAYS Report change log entries from up to CHANGEDAYS days ago.
Sample output:
python zyppHist.py -i 1 -c 30 ================================================== +Package: 2011-12-14 21:11:12 glibc ------------------------------ * Wed Nov 30 2011 aj@suse.de - Do not install INSTALL file. * Wed Nov 30 2011 rcoe@wi.rr.com - fix printf with many args and printf arg specifiers (bnc#733140) * Fri Nov 25 2011 aj@suse.de - Updated glibc-ports-2.14.1.tar.bz2 from ftp.gnu.org. * Fri Nov 25 2011 aj@suse.com - Create glibc-devel-static baselibs (bnc#732349). * Fri Nov 18 2011 aj@suse.de - Remove duplicated locales from glibc-2.3.locales.diff.bz2 ================================================== +Package: 2011-12-14 21:11:21 splashy ------------------------------ * Thu Dec 08 2011 hmacht@suse.de - update artwork for openSUSE 12.1 (bnc#730050) ================================================== +Package: 2011-12-14 21:11:23 libqt4 ------------------------------ * Wed Nov 23 2011 llunak@suse.com - do not assert on QPixmap usage in non-GUI threads if XInitThreads() has been called (bnc#731455) ================================================== +Package: 2011-12-14 21:11:23 libcolord1 ------------------------------ * Wed Dec 07 2011 vuntz@opensuse.org - Update to version 0.1.15: + This release fixes an important security bug: CVE-2011-4349. + New Features: - Add a native driver for the Hughski ColorHug hardware - Export cd-math as three projects are now using it + Bugfixes: - Documentation fixes and improvements - Do not crash the daemon if adding the device to the db failed - Do not match any sensor device with a kernel driver - Don't be obscure when the user passes a device-id to colormgr - Fix a memory leak when getting properties from a device - Fix colormgr device-get-default-profile ...
The script produces a summary by extracting a list of recent installs from /var/log/zypp/history. For each recent install the script issues an rpm changelog query to obtain each package's changelog. Each changelog is written out line by line and the output is truncated when a date is encountered that is more than the specified number of days in the past.
The code
#!/usr/bin/env python # # zypphist.py # # Copyright (C) 2011: Michael Hamilton # The code is GPL 3.0(GNU General Public License) ( http://www.gnu.org/copyleft/gpl.html ) # import csv import subprocess from datetime import date, datetime, timedelta from optparse import OptionParser zyppHistFilename = '/var/log/zypp/history' optParser = OptionParser(description='Report change log entries for recent installs (zypper/rpm).') optParser.add_option('-i', '--installed-since', dest='INSTALLDAYS', type='int', default=1, help='Include anything installed up to INSTALLDAYS days ago.') optParser.add_option('-c', '--changedSince', dest='CHANGEDAYS', type='int', default=60, help='Report change log entries from up to CHANGEDAYS days ago.') (options, args) = optParser.parse_args() installedSince = datetime.now() - timedelta(days=options.INSTALLDAYS) changedSince = datetime.now() - timedelta(days=options.CHANGEDAYS) zyppHistReader = csv.reader(open(zyppHistFilename, 'rb'), delimiter='|') for historyRec in zyppHistReader: if historyRec[0][0] != '#' and historyRec[1] == 'install': installDate = datetime.strptime(historyRec[0], '%Y-%m-%d %H:%M:%S') if installDate >= installedSince: packageName = historyRec[2] print '==================================================' print '+Package: ', installDate, packageName print '------------------------------' rpmProcess = subprocess.Popen(['rpm', '-q', '--changelog', packageName], shell=False, stdin=None, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True) rpmProcess.wait() if rpmProcess.returncode != 0: print '*** ERROR (return code was ', rpmProcess.returncode, ')' for line in rpmProcess.stderr: print line, for line in rpmProcess.stdout: try: if line[0] == '*' and line[1] == ' ' and len(line) > 17: changeDate = datetime.strptime(line[6:17], '%b %d %Y') if changeDate < changedSince: break except ValueError: pass # not a date - move on print line, rpmProcess.stdout.close() rpmProcess.stderr.close()
No comments:
Post a Comment
These days we're only getting spam, so comments are now disabled.
Note: Only a member of this blog may post a comment.