Branch 'devel' - caslib/cas.py caslib/rpmutils.py caslib/util.py
by Adam Stokes
caslib/cas.py | 61 ++++++++++++++++++++++++++++++++++-------------------
caslib/rpmutils.py | 2 +
caslib/util.py | 33 ----------------------------
3 files changed, 42 insertions(+), 54 deletions(-)
New commits:
commit e6aa037046bf7e22009e96f67dd27b5821ba82dd
Author: adam stokes <astokes(a)fedoraproject.org>
Date: Thu May 20 16:52:37 2010 -0400
logging
diff --git a/caslib/cas.py b/caslib/cas.py
index c01013e..d6bca2c 100755
--- a/caslib/cas.py
+++ b/caslib/cas.py
@@ -37,6 +37,7 @@ import hashlib
from urlgrabber import grabber
from subprocess import Popen, PIPE, call
import shutil
+import logging
from datetime import datetime
@@ -70,6 +71,20 @@ BUFFERSIZE=None
if config.has_option("advanced", "buffersize"):
BUFFERSIZE=config.get("advanced", "buffersize")
+# logging
+LEVELS={'DEBUG': logging.debug,
+ 'INFO': logging.info}
+
+clog = logging.getLogger("cas")
+clog.setLevel(LEVELS[settings['DEBUGLEVEL']])
+flog = logging.FileHandler("/var/log/cas.log")
+flog.setFormatter(logging.Formatter('%(asctime)s %(levelname)s: %(message)s'))
+clog.addHandler(flog)
+console = logging.StreamHandler(sys.stderr)
+console.setLevel(logging.INFO)
+console.setFormatter(logging.Formatter('%(name)s - %(message)s'))
+clog.addHandler(console)
+
def coreHandler(uri):
try:
downloadLocation = grabber.urlgrab(uri, filename=os.path.basename(uri), copy_local=1)
@@ -96,7 +111,8 @@ def timestampHandler(corefile):
timestamp_query = sess.query(Timestamp).filter(Timestamp.stampKey.like('%'+timestamp+'%')).first()
if timestamp_query:
return (timestamp_query)
- return _e[2]
+ clog.error(_e[2])
+ return False
class CasApplication(object):
def __init__(self, args):
@@ -141,7 +157,8 @@ class CasApplication(object):
if self.opts.compress_core:
out, err = coreCompress(os.path.abspath(self.opts.filename))
if err:
- return _e[8]
+ clog.error(_e[8])
+ return False
# we want to allow for multiple cores under same identifier
# so we base the hierarchy /workDirectory/identifier/datetime
@@ -188,6 +205,7 @@ class CasApplication(object):
self.jobRecord.msg = _i[5]
self.sess.commit()
if type(timestamp) == str:
+ clog.error(timestamp)
return False
corefileArch = self.util.getElfArch(corefile)
@@ -232,6 +250,7 @@ class CasApplication(object):
sts, out, err = (cmdPipe.returncode, cmdData[0].strip(),
cmdData[1].strip())
if sts:
+ clog.error(err)
return (out, err)
elif debugKernelArch == currentMachineArch:
import platform
@@ -251,28 +270,27 @@ class CasApplication(object):
# The machine running cas isn't capable of processing this core, lets
# attempt with paramiko. Assuming paramiko is installed and a server database
# is configured we attempt to process the core at another machine.
- try:
- serverList = self.sess.query(Server).all()
- ssh_obj = paramiko.SSHClient()
- ssh_obj.load_host_keys(os.path.expanduser("~/.ssh/known_hosts"))
- if serverList:
- for hostname, arch, port in serverList:
- if arch == debugKernelArch:
- # TODO: Randomize server selection
- cmd = ["cd " + os.path.join(self.storagePath) + "\n",
- "./crash -i crash.in > crash.out\n"]
- Executor(settings["SSHKEY"], hostname,
- port, settings["CASUSER"],
- cmd).run()
- break
- else:
- return False
+ serverList = self.sess.query(Server).all()
+ ssh_obj = paramiko.SSHClient()
+ ssh_obj.load_host_keys(os.path.expanduser("~/.ssh/known_hosts"))
+ if serverList:
+ for hostname, arch, port in serverList:
+ if arch == debugKernelArch:
+ # TODO: Randomize server selection
+ cmd = ["cd " + os.path.join(self.storagePath) + "\n",
+ "./crash -i crash.in > crash.out\n"]
+ Executor(settings["SSHKEY"], hostname,
+ port, settings["CASUSER"],
+ cmd).run()
+ break
+ else:
+ clog.error("server failure")
+ return False
else:
self.jobRecord.msg = _e[80]
self.sess.commit()
- return _e[80]
- except ImportError:
- return False
+ clog.error(_e[80])
+ return False
crashOutFile = os.path.join(self.storagePath,"modules")
if os.path.isfile(crashOutFile) and self.extractKernelModules:
# Here we extract kernel modules processed from crash.out
@@ -327,6 +345,7 @@ class CasApplication(object):
except (os.error, socket.error), e:
self.jobRecord.msg = e
self.sess.commit()
+ clog.error(e)
return False
self.jobRecord.msg = _i[4]
self.sess.commit()
diff --git a/caslib/rpmutils.py b/caslib/rpmutils.py
index 1a21c07..07e7c1f 100644
--- a/caslib/rpmutils.py
+++ b/caslib/rpmutils.py
@@ -24,6 +24,8 @@ def extractDebug(rpm, dst, tool="/usr/bin/rpm2cpio",
filter="*/vmlinux", return_results=True):
""" extract file(s) from rpm
"""
+ if not rpm.endswith('rpm'):
+ return
cpio = "/bin/cpio"
cpio_args = "-imudv"
filter_results = []
diff --git a/caslib/util.py b/caslib/util.py
index b79e131..7e794c0 100644
--- a/caslib/util.py
+++ b/caslib/util.py
@@ -14,7 +14,6 @@
import os
import re
import sys
-import logging
from caslib import error_messages as _e
@@ -29,38 +28,6 @@ def genprint(txt):
sys.stdout.write(":: %s\n" % (txt,))
sys.stdout.flush()
-class Logging(object):
- def __init__(self, dst, logger_id, debug_level='DEBUG'):
- self.debug_level = debug_level
- self.dst = dst
- self.logger_id = logger_id
- self.logfile = logger_id+".log"
- self.logfile = os.path.join(self.dst, self.logfile)
- self.log = logging.getLogger(self.logger_id)
- ch = logging.StreamHandler()
- # never fail if directory doesn't exist.
- if not os.path.exists(os.path.dirname(self.logfile)):
- os.makedirs(os.path.dirname(self.logfile))
- fh = logging.FileHandler(self.logfile)
- self.log.addHandler(ch)
- self.log.addHandler(fh)
- ch_fmt = logging.Formatter("%(message)s")
- fh_fmt = logging.Formatter("%(asctime)s %(process)d (%(levelname)s)\t: %(message)s")
- ch.setFormatter(ch_fmt)
- fh.setFormatter(fh_fmt)
- logging_level = {'DEBUG': logging.DEBUG,
- 'INFO' : logging.INFO}
- self.log.setLevel(logging_level[self.debug_level])
-
- def debug(self, msg):
- if self.debug_level == 'DEBUG':
- self.log.debug("debug :: %s" % (msg,))
-
- def info(self, msg):
- """ function to print procedure
- """
- self.log.info(":: %s" % (msg,))
-
class UtilException(Exception): pass
class Utility(object):
14 years
Branch 'devel' - cas-admin caslib/cas.py cas.spec
by Adam Stokes
cas-admin | 2 +-
cas.spec | 8 ++++----
caslib/cas.py | 4 ++--
3 files changed, 7 insertions(+), 7 deletions(-)
New commits:
commit 31655597bb269b50556657c5eb5e03d91dea6cc5
Author: adam stokes <astokes(a)fedoraproject.org>
Date: Thu May 20 14:55:26 2010 -0400
prep 1.0
diff --git a/cas-admin b/cas-admin
index 71a63cd..22740e1 100755
--- a/cas-admin
+++ b/cas-admin
@@ -227,7 +227,7 @@ if __name__=="__main__":
if os.getuid() is not 0:
raise SystemExit(_e[100])
- genprint("Starting requirement processing and database creation.")
+ genprint("Starting requirement processing and database alterations.")
if not os.path.isdir(os.path.dirname(settings["DATABASE"])):
os.makedirs(os.path.dirname(settings["DATABASE"]))
diff --git a/cas.spec b/cas.spec
index ffdc316..b74454e 100644
--- a/cas.spec
+++ b/cas.spec
@@ -17,11 +17,8 @@ Requires: python-sqlite
Requires: python-paramiko
Requires: xz
Requires: crash
-Requires: python-cherrypy
-Requires: python-simplejson
Requires: python-urlgrabber
Requires: python-sqlalchemy
-Requires: python-mako
%description
CAS provides a user the ability to configure an environment for core analysis
@@ -42,6 +39,9 @@ Summary: Web frontend to CAS
Group: Applications/System
Requires: cas = %{version}-%{release}
Requires: cas-admin = %{version}-%{release}
+Requires: python-cherrypy
+Requires: python-simplejson
+Requires: python-mako
%description server
Provides web frontend to CAS to allow for a much simpler user experience when
@@ -83,7 +83,7 @@ rm -rf ${RPM_BUILD_ROOT}
%{_bindir}/cas-server
%changelog
-* Tue May 12 2010 Adam Stokes <ajs at redhat dot com> - 1.0
+* Tue May 20 2010 Adam Stokes <ajs at redhat dot com> - 1.0
- Create 1.0 release
* Mon May 3 2010 Adam Stokes <ajs at redhat dot com> - 0.18
diff --git a/caslib/cas.py b/caslib/cas.py
index 4fa4299..c01013e 100755
--- a/caslib/cas.py
+++ b/caslib/cas.py
@@ -212,7 +212,7 @@ class CasApplication(object):
# setup crash file to finalize the processing of the core file
- self.util.buildCrashFile(self.storagePath, corefile, timestamp.debugPath)
+ self.util.buildCrashFile(self.storagePath, corefile, os.path.join('/',timestamp.debugPath))
# Pull the architecture from the elf file to match up with a
# server providing this architecture
debugKernelArch = self.util.getElfArch(timestamp.debugPath)
@@ -252,7 +252,7 @@ class CasApplication(object):
# attempt with paramiko. Assuming paramiko is installed and a server database
# is configured we attempt to process the core at another machine.
try:
- serverList = self.sess.query(Servers).all()
+ serverList = self.sess.query(Server).all()
ssh_obj = paramiko.SSHClient()
ssh_obj.load_host_keys(os.path.expanduser("~/.ssh/known_hosts"))
if serverList:
14 years
Branch 'devel' - 2 commits -
by Adam Stokes
0 files changed
New commits:
commit 0180b4ed341f1e697e48e7dece2c5a8e93deb993
Merge: 470d677... 5440fb3...
Author: adam stokes <astokes(a)fedoraproject.org>
Date: Thu May 20 13:57:28 2010 -0400
Merge branch 'devel' of ssh://fedorahosted.org/git/cas into devel
commit 470d677ba1c52b52df1a3948fc74f07a198eb754
Author: adam stokes <astokes(a)fedoraproject.org>
Date: Fri May 14 09:15:39 2010 -0400
Change rpm reference to debug
diff --git a/caslib/cas.py b/caslib/cas.py
index 5679fae..3699ec3 100755
--- a/caslib/cas.py
+++ b/caslib/cas.py
@@ -207,7 +207,7 @@ class CasApplication(object):
debugKernel = os.path.abspath("vmlinux")
else:
filterString = "*/%s" % (timestamp.debugPath,)
- extractDebug(timestamp.rpm.rpmPath, self.storagePath,
+ extractDebug(timestamp.debug.debugPath, self.storagePath,
filter=filterString,
return_results=False)
14 years
Branch 'devel' - caslib/cas.py
by Adam Stokes
caslib/cas.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
New commits:
commit 5440fb38515006b30169733e466136f3e526be54
Author: adam stokes <astokes(a)fedoraproject.org>
Date: Wed May 19 15:00:04 2010 -0400
do not search old servers database
diff --git a/caslib/cas.py b/caslib/cas.py
index d5e3a88..4fa4299 100755
--- a/caslib/cas.py
+++ b/caslib/cas.py
@@ -252,7 +252,7 @@ class CasApplication(object):
# attempt with paramiko. Assuming paramiko is installed and a server database
# is configured we attempt to process the core at another machine.
try:
- serverList = self.db.getServers()
+ serverList = self.sess.query(Servers).all()
ssh_obj = paramiko.SSHClient()
ssh_obj.load_host_keys(os.path.expanduser("~/.ssh/known_hosts"))
if serverList:
14 years
Branch 'devel' - caslib/cas.py cas.spec
by Adam Stokes
cas.spec | 1 +
caslib/cas.py | 2 +-
2 files changed, 2 insertions(+), 1 deletion(-)
New commits:
commit 68b3fc09e993bfabb44893e4c5d36db690206f31
Author: adam stokes <astokes(a)fedoraproject.org>
Date: Wed May 19 14:58:44 2010 -0400
clean up files in snippets dir causing traceback
diff --git a/cas.spec b/cas.spec
index dc3abe3..ffdc316 100644
--- a/cas.spec
+++ b/cas.spec
@@ -56,6 +56,7 @@ make
%install
rm -rf ${RPM_BUILD_ROOT}
make DESTDIR=${RPM_BUILD_ROOT} install
+for i in `find ${RPM_BUILD_ROOT} -iname Makefile`; do rm $i; done
%clean
rm -rf ${RPM_BUILD_ROOT}
diff --git a/caslib/cas.py b/caslib/cas.py
index 9878eef..d5e3a88 100755
--- a/caslib/cas.py
+++ b/caslib/cas.py
@@ -212,7 +212,7 @@ class CasApplication(object):
# setup crash file to finalize the processing of the core file
- self.util.buildCrashFile(self.storagePath, corefile, debugKernel)
+ self.util.buildCrashFile(self.storagePath, corefile, timestamp.debugPath)
# Pull the architecture from the elf file to match up with a
# server providing this architecture
debugKernelArch = self.util.getElfArch(timestamp.debugPath)
14 years
Branch 'devel' - caslib/cas.py
by Adam Stokes
caslib/cas.py | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
New commits:
commit ee9f7bc25a072f4c8dbfc1cd9e17b20892f0d8ca
Author: adam stokes <astokes(a)fedoraproject.org>
Date: Wed May 19 14:17:51 2010 -0400
update session
diff --git a/caslib/cas.py b/caslib/cas.py
index 3699ec3..9878eef 100755
--- a/caslib/cas.py
+++ b/caslib/cas.py
@@ -94,7 +94,6 @@ def timestampHandler(corefile):
# debugKernel
sess = Session()
timestamp_query = sess.query(Timestamp).filter(Timestamp.stampKey.like('%'+timestamp+'%')).first()
- sess.close()
if timestamp_query:
return (timestamp_query)
return _e[2]
@@ -162,10 +161,6 @@ class CasApplication(object):
if not self.opts.job:
parser.error("Job ID missing")
- else:
- # Pull job data from db
- self.sess = Session()
- self.jobRecord = self.sess.query(Job).filter_by(jobId=self.opts.job).first()
self.extractKernelModules = self.opts.kernel_modules
self.storagePath = os.path.join(settings["WORKDIRECTORY"],
@@ -173,6 +168,10 @@ class CasApplication(object):
self.storagePath = os.path.join(self.storagePath, dateFormatted)
def run(self):
+ # Pull job data from db
+ self.sess = Session()
+ self.jobRecord = self.sess.query(Job).filter_by(jobId=self.opts.job).first()
+
# setup directory structure
self.jobRecord.msg = _i[1]
self.sess.commit()
14 years
Branch 'devel' - caslib/cas.py
by Adam Stokes
caslib/cas.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
New commits:
commit 683005c7a33bbd4e5cfbfedbe15aea37d8c66a08
Author: adam stokes <astokes(a)fedoraproject.org>
Date: Wed May 19 11:33:47 2010 -0400
remove rpm reference in debug timestamp
diff --git a/caslib/cas.py b/caslib/cas.py
index 5679fae..3699ec3 100755
--- a/caslib/cas.py
+++ b/caslib/cas.py
@@ -207,7 +207,7 @@ class CasApplication(object):
debugKernel = os.path.abspath("vmlinux")
else:
filterString = "*/%s" % (timestamp.debugPath,)
- extractDebug(timestamp.rpm.rpmPath, self.storagePath,
+ extractDebug(timestamp.debug.debugPath, self.storagePath,
filter=filterString,
return_results=False)
14 years
Branch 'devel' - caslib/cas.py
by Adam Stokes
caslib/cas.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
New commits:
commit 87981ec0fe840e88b2ccfdbe56d0f9db13abb287
Author: adam stokes <astokes(a)fedoraproject.org>
Date: Fri May 14 09:13:16 2010 -0400
add abspath to opts.filename
diff --git a/caslib/cas.py b/caslib/cas.py
index e46e017..5679fae 100755
--- a/caslib/cas.py
+++ b/caslib/cas.py
@@ -132,7 +132,7 @@ class CasApplication(object):
if not self.opts.filename:
parser.error("A file object is missing.")
else:
- self.filename = self.opts.filename
+ self.filename = os.path.abspath(self.opts.filename)
# check if we want to strip the core
if self.opts.strip_core:
14 years
Branch 'devel' - cas-admin cas.conf doc/index.html doc/index.rst doc/searchindex.js doc/_sources man/en overseer/command.py overseer/static
by Adam Stokes
cas-admin | 15 ++++-----
cas.conf | 2 -
doc/_sources/index.txt | 40 +++++++++++++++++--------
doc/index.html | 43 +++++++++++++++++----------
doc/index.rst | 32 ++++++++++++++------
doc/searchindex.js | 2 -
man/en/cas-admin.1 | 22 ++++++++-----
man/en/cas.1 | 43 +++++++++++++++++----------
man/en/cas.conf.5 | 73 +++++++++++++++++++++++++++++-----------------
overseer/command.py | 5 +--
overseer/static/base.html | 2 -
11 files changed, 178 insertions(+), 101 deletions(-)
New commits:
commit e9ade1df4f1362513d9f1820ac9af4f78ea3eff0
Author: adam stokes <astokes(a)fedoraproject.org>
Date: Thu May 13 17:25:37 2010 -0400
man page updates; documentation updates
diff --git a/cas-admin b/cas-admin
index d5f6cc6..71a63cd 100755
--- a/cas-admin
+++ b/cas-admin
@@ -79,12 +79,12 @@ def queryWorker(input):
debug_IN_DB = session.query(Debug).filter_by(debugPath=debug).first()
session.close()
if not debug_IN_DB:
- # add RPM to database
+ # add debug to database
session = Session()
- debug_record = Debug(debug, mime="application/x-rpm")
+ debug_record = Debug(debug)
session.add(debug_record)
session.commit()
- if util.testMimetype(debug):
+ if util.testMimetype(debug, "application/x-rpm") == True:
genprint("(extracting) %-50s" % (os.path.basename(debug),))
tmpkernel = extractDebug(debug, dst)
# Sort through extracted debug for each type
@@ -100,15 +100,16 @@ def queryWorker(input):
session.add(timestamp_record)
# commit to database
session.commit()
- elif util.testMimetype(debug, mime="application/x-executable"):
+ # cleanup debug kernel since we store it in RPM
+ os.remove(debugKernel)
+ if util.testMimetype(debug, "application/x-executable") == True:
+ genprint("(reading) %s" % (os.path.basename(debug),))
timestamp = coreTimestamp(debug, BUFFERSIZE)
timestamp_record = Timestamp(timestamp,
debug[1:],
debug_record.debugId)
session.add(timestamp_record)
session.commit()
- else:
- genprint(_e[6])
session.close()
def queryLocalRpms():
@@ -146,8 +147,6 @@ def queryLocalRpms():
for i in range(PROCESSES):
task_queue.put('STOP')
- # Cleanup extracted debugs
- shutil.rmtree(dst)
return
def queryServers():
diff --git a/cas.conf b/cas.conf
index 0c76527..b692b71 100644
--- a/cas.conf
+++ b/cas.conf
@@ -35,7 +35,7 @@ regexExcludeDir=*data*,*src*
# Compose -regextype regular expression for determining what
# kernel debug rpms you wish to search for
-rpmFilter=.*debuginfo.*
+rpmFilter=.*kernel-debuginfo.*
# debug level (DEBUG, INFO)
debugLevel=DEBUG
diff --git a/doc/_sources/index.txt b/doc/_sources/index.txt
index 1a0fdb9..3cdbf76 100644
--- a/doc/_sources/index.txt
+++ b/doc/_sources/index.txt
@@ -25,21 +25,25 @@ types to core dumps are automatically detected and processed.
Prerequisites
^^^^^^^^^^^^^
-CAS needs at least **Python 2.4** to run. For systems that are not running
-Fedora 9 or later (this would include RHEL 5) the EPEL repo needs to be
-installed. Visit `EPEL <https://fedoraproject.org/wiki/EPEL>`_ to enable
-this repository.
+CAS needs at least **Python 2.6** to run. If running RHEL 6 it may require
+the EPEL repo to be installed. Visit `EPEL <https://fedoraproject.org/wiki/EPEL>`_
+to enable this repository.
+
+``Note``: It is assumed (and untested) to run in python 2.4/2.5 as long as the
+backported multiprocessing library is installed. Please
+see `Multiprocessing backport <http://pypi.python.org/pypi/multiprocessing>`_
Other package requirements:
- python-urlgrabber
- python-sqlalchemy
- python-cherrypy
- python-simplejson
+- python-mako
The amount of storage needed can be determined base on the following
information:
-- The number of kernel-debuginfo packages needed
+- The number of kernel debug packages needed
- How many core dumps will be processed.
Typically it is recommended to have at least 1TB for cores and another 500GB for
@@ -60,8 +64,10 @@ each section and describe its meaning::
casuser=root
sshkey=dss
kernels=/mnt/kernels
+ regexExcludeDir=*data*,*src*
+ # regexExcludeFile=*tmp*
+ regexType=posix-extended
rpmFilter=.*kerne.+-debuginfo-[0-9].*\.rpm
- debugs=/cores/debugs
debugLevel=DEBUG
workDirectory=/cores/processed
smtphost=mail.example.com
@@ -81,14 +87,19 @@ each section and describe its meaning::
stored. This can range anywhere from an nfs mount, samba share, local disk or
any other type of media the cas server can access.
+``regexExcludeDir``: Directories that may be within the search path that doesn't need to be
+included. This is a shell format so globs like ``*/*/data`` are accepted.
+
+``regexExcludeFile``: Any files that need to be excluded from the search path. This is also
+a shell format ``*/*/badfile.txt``.
+
+``regexType``: (**Required**) Defines the regex syntax to use within ``find``. Doing a
+``man find`` and searching for regextype will give you the allowable syntaxess.
+
``rpmFilters``: (**Required**) This is a emacs based regular expression which is essentially
passed to a find command to locate the various kernel-debuginfo packages defined
in ``kernels`` directive.
-``debugs``: (**Required**) A temporary directory in which to store the extracted vmlinux files
-from the kernel-debuginfo packages for processing. Another solution would be to
-alter this to point an existing directory like ``/tmp``, for instance.
-
``debugLevel``: As the name suggest it will set the debug level for CAS output.
Currently the only accepted values are ``DEBUG|INFO``.
@@ -100,7 +111,8 @@ cores are processed in a given timeframe this area will fill up quickly.
this directive needs to be set. ``Note`` that the mail server should not
require smtp authentication.
-``database``: (**Required**) Define where the sqlite database will reside.
+``database``: (**Required**) Define where the sqlite database will reside. ``Note`` the ``casuser``
+will need to have read/write access to this database.
``purgeLimit``: Define amount of day(s) back wish to keep physical data on
system.
@@ -203,6 +215,7 @@ a few options to pass::
-m, --modules Extract associated kernel modules
--compress Compress file for transfer to another destination
--strip Strips unnecessary kernel pages
+ --job=JOB Attach to an existing job
CAS prepares its directory hierarchy based on the ``identifier`` this option is
therefore required. ``filename`` is also required as it tells CAS exactly which
@@ -211,13 +224,13 @@ CAS simply pass it the email parameter.
An example, of a user wanting to process a corefile named ``vmcore.12345``::
- $ cas -i 12345 -f vmcore.12345 -e user(a)cas-server.com
+ $ cas -i 12345 -f vmcore.12345 -e user(a)cas-server.com --job 1
In the above example an assumption is made that ``1`` is associated to some
form of ticketing system so to keep things organized an identifier was set of
that number.
-The directory hierarchy for the current job should look like ``/cores/1``.
+The directory hierarchy for the current job should look like ``/cores/1/datetime``.
In addition to the processing of core files there is also a ``process log`` contained
within this directory for each job processed. If multiple jobs for the same identifier
are issued they are placed within a sub directory marked by the current timestamp
@@ -375,6 +388,7 @@ Other various ways of compressing archive are as follows::
$ tar cvzf vmcore.tar.gz vmcore
$ gzip vmcore
$ bzip2 vmcore
+ $ xz vmcore
``Note``: please do not double compress or CAS will fail.
diff --git a/doc/index.html b/doc/index.html
index 1837648..fdc26ec 100644
--- a/doc/index.html
+++ b/doc/index.html
@@ -47,7 +47,7 @@
</tr>
<tr class="field"><th class="field-name">Release:</th><td class="field-body">1.0</td>
</tr>
-<tr class="field"><th class="field-name">Date:</th><td class="field-body">May 04, 2010</td>
+<tr class="field"><th class="field-name">Date:</th><td class="field-body">May 13, 2010</td>
</tr>
</tbody>
</table>
@@ -62,19 +62,22 @@ types to core dumps are automatically detected and processed.</p>
</div>
<div class="section" id="prerequisites">
<h3>Prerequisites<a class="headerlink" href="#prerequisites" title="Permalink to this headline">¶</a></h3>
-<p>CAS needs at least <strong>Python 2.4</strong> to run. For systems that are not running
-Fedora 9 or later (this would include RHEL 5) the EPEL repo needs to be
-installed. Visit <a class="reference external" href="https://fedoraproject.org/wiki/EPEL">EPEL</a> to enable
-this repository.</p>
+<p>CAS needs at least <strong>Python 2.6</strong> to run. If running RHEL 6 it may require
+the EPEL repo to be installed. Visit <a class="reference external" href="https://fedoraproject.org/wiki/EPEL">EPEL</a>
+to enable this repository.</p>
+<p><tt class="docutils literal"><span class="pre">Note</span></tt>: It is assumed (and untested) to run in python 2.4/2.5 as long as the
+backported multiprocessing library is installed. Please
+see <a class="reference external" href="http://pypi.python.org/pypi/multiprocessing">Multiprocessing backport</a></p>
<p>Other package requirements:
- python-urlgrabber
- python-sqlalchemy
- python-cherrypy
-- python-simplejson</p>
+- python-simplejson
+- python-mako</p>
<p>The amount of storage needed can be determined base on the following
information:</p>
<ul class="simple">
-<li>The number of kernel-debuginfo packages needed</li>
+<li>The number of kernel debug packages needed</li>
<li>How many core dumps will be processed.</li>
</ul>
<p>Typically it is recommended to have at least 1TB for cores and another 500GB for
@@ -92,8 +95,10 @@ each section and describe its meaning:</p>
casuser=root
sshkey=dss
kernels=/mnt/kernels
+regexExcludeDir=*data*,*src*
+# regexExcludeFile=*tmp*
+regexType=posix-extended
rpmFilter=.*kerne.+-debuginfo-[0-9].*\.rpm
-debugs=/cores/debugs
debugLevel=DEBUG
workDirectory=/cores/processed
smtphost=mail.example.com
@@ -110,12 +115,15 @@ autoPurge=Yes
<p><tt class="docutils literal"><span class="pre">kernels</span></tt>: (<strong>Required</strong>) Describes the location of where kernel-debuginfo packages are to be
stored. This can range anywhere from an nfs mount, samba share, local disk or
any other type of media the cas server can access.</p>
+<p><tt class="docutils literal"><span class="pre">regexExcludeDir</span></tt>: Directories that may be within the search path that doesn’t need to be
+included. This is a shell format so globs like <tt class="docutils literal"><span class="pre">*/*/data</span></tt> are accepted.</p>
+<p><tt class="docutils literal"><span class="pre">regexExcludeFile</span></tt>: Any files that need to be excluded from the search path. This is also
+a shell format <tt class="docutils literal"><span class="pre">*/*/badfile.txt</span></tt>.</p>
+<p><tt class="docutils literal"><span class="pre">regexType</span></tt>: (<strong>Required</strong>) Defines the regex syntax to use within <tt class="docutils literal"><span class="pre">find</span></tt>. Doing a
+<tt class="docutils literal"><span class="pre">man</span> <span class="pre">find</span></tt> and searching for regextype will give you the allowable syntaxess.</p>
<p><tt class="docutils literal"><span class="pre">rpmFilters</span></tt>: (<strong>Required</strong>) This is a emacs based regular expression which is essentially
passed to a find command to locate the various kernel-debuginfo packages defined
in <tt class="docutils literal"><span class="pre">kernels</span></tt> directive.</p>
-<p><tt class="docutils literal"><span class="pre">debugs</span></tt>: (<strong>Required</strong>) A temporary directory in which to store the extracted vmlinux files
-from the kernel-debuginfo packages for processing. Another solution would be to
-alter this to point an existing directory like <tt class="docutils literal"><span class="pre">/tmp</span></tt>, for instance.</p>
<p><tt class="docutils literal"><span class="pre">debugLevel</span></tt>: As the name suggest it will set the debug level for CAS output.
Currently the only accepted values are <tt class="docutils literal"><span class="pre">DEBUG|INFO</span></tt>.</p>
<p><tt class="docutils literal"><span class="pre">workDirectory</span></tt>: (<strong>Required</strong>) Defines where all processed cores will be placed. This mount
@@ -124,7 +132,8 @@ cores are processed in a given timeframe this area will fill up quickly.</p>
<p><tt class="docutils literal"><span class="pre">smtphost</span></tt>: If wanting output of CAS processing email to a certain address
this directive needs to be set. <tt class="docutils literal"><span class="pre">Note</span></tt> that the mail server should not
require smtp authentication.</p>
-<p><tt class="docutils literal"><span class="pre">database</span></tt>: (<strong>Required</strong>) Define where the sqlite database will reside.</p>
+<p><tt class="docutils literal"><span class="pre">database</span></tt>: (<strong>Required</strong>) Define where the sqlite database will reside. <tt class="docutils literal"><span class="pre">Note</span></tt> the <tt class="docutils literal"><span class="pre">casuser</span></tt>
+will need to have read/write access to this database.</p>
<p><tt class="docutils literal"><span class="pre">purgeLimit</span></tt>: Define amount of day(s) back wish to keep physical data on
system.</p>
<p><tt class="docutils literal"><span class="pre">autoPurge</span></tt>: Yes/No setting if wanting cas-admin to auto purge stale data on
@@ -211,19 +220,20 @@ Options:
Define email for results (must be valid!)
-m, --modules Extract associated kernel modules
--compress Compress file for transfer to another destination
- --strip Strips unnecessary kernel pages</pre>
+ --strip Strips unnecessary kernel pages
+ --job=JOB Attach to an existing job</pre>
</div>
<p>CAS prepares its directory hierarchy based on the <tt class="docutils literal"><span class="pre">identifier</span></tt> this option is
therefore required. <tt class="docutils literal"><span class="pre">filename</span></tt> is also required as it tells CAS exactly which
core to process and associate with <tt class="docutils literal"><span class="pre">identifier</span></tt>. If wanting email results from
CAS simply pass it the email parameter.</p>
<p>An example, of a user wanting to process a corefile named <tt class="docutils literal"><span class="pre">vmcore.12345</span></tt>:</p>
-<div class="highlight-python"><pre>$ cas -i 12345 -f vmcore.12345 -e user(a)cas-server.com</pre>
+<div class="highlight-python"><pre>$ cas -i 12345 -f vmcore.12345 -e user(a)cas-server.com --job 1</pre>
</div>
<p>In the above example an assumption is made that <tt class="docutils literal"><span class="pre">1</span></tt> is associated to some
form of ticketing system so to keep things organized an identifier was set of
that number.</p>
-<p>The directory hierarchy for the current job should look like <tt class="docutils literal"><span class="pre">/cores/1</span></tt>.
+<p>The directory hierarchy for the current job should look like <tt class="docutils literal"><span class="pre">/cores/1/datetime</span></tt>.
In addition to the processing of core files there is also a <tt class="docutils literal"><span class="pre">process</span> <span class="pre">log</span></tt> contained
within this directory for each job processed. If multiple jobs for the same identifier
are issued they are placed within a sub directory marked by the current timestamp
@@ -359,7 +369,8 @@ one of the proper ways to do so is:</p>
<p>Other various ways of compressing archive are as follows:</p>
<div class="highlight-python"><pre>$ tar cvzf vmcore.tar.gz vmcore
$ gzip vmcore
-$ bzip2 vmcore</pre>
+$ bzip2 vmcore
+$ xz vmcore</pre>
</div>
<p><tt class="docutils literal"><span class="pre">Note</span></tt>: please do not double compress or CAS will fail.</p>
<p>Another issue, which isn’t primarily a fault of CAS, are
diff --git a/doc/index.rst b/doc/index.rst
index e906a15..09d9267 100644
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -25,21 +25,25 @@ types to core dumps are automatically detected and processed.
Prerequisites
^^^^^^^^^^^^^
-CAS needs at least **Python 2.4** to run. For systems that are not running
-Fedora 9 or later (this would include RHEL 5) the EPEL repo needs to be
-installed. Visit `EPEL <https://fedoraproject.org/wiki/EPEL>`_ to enable
-this repository.
+CAS needs at least **Python 2.6** to run. If running RHEL 6 it may require
+the EPEL repo to be installed. Visit `EPEL <https://fedoraproject.org/wiki/EPEL>`_
+to enable this repository.
+
+``Note``: It is assumed (and untested) to run in python 2.4/2.5 as long as the
+backported multiprocessing library is installed. Please
+see `Multiprocessing backport <http://pypi.python.org/pypi/multiprocessing>`_
Other package requirements:
- python-urlgrabber
- python-sqlalchemy
- python-cherrypy
- python-simplejson
+- python-mako
The amount of storage needed can be determined base on the following
information:
-- The number of kernel-debuginfo packages needed
+- The number of kernel debug packages needed
- How many core dumps will be processed.
Typically it is recommended to have at least 1TB for cores and another 500GB for
@@ -60,6 +64,8 @@ each section and describe its meaning::
casuser=root
sshkey=dss
kernels=/mnt/kernels
+ regexExcludeDir=*data*,*src*
+ # regexExcludeFile=*tmp*
regexType=posix-extended
rpmFilter=.*kerne.+-debuginfo-[0-9].*\.rpm
debugLevel=DEBUG
@@ -81,10 +87,16 @@ each section and describe its meaning::
stored. This can range anywhere from an nfs mount, samba share, local disk or
any other type of media the cas server can access.
+``regexExcludeDir``: Directories that may be within the search path that doesn't need to be
+included. This is a shell format so globs like ``*/*/data`` are accepted.
+
+``regexExcludeFile``: Any files that need to be excluded from the search path. This is also
+a shell format ``*/*/badfile.txt``.
+
``regexType``: (**Required**) Defines the regex syntax to use within ``find``. Doing a
``man find`` and searching for regextype will give you the allowable syntaxess.
-``rpmFilters``: (**Required**) This is a emacs based regular expression which is essentially
+``rpmFilter``: (**Required**) This is a emacs based regular expression which is essentially
passed to a find command to locate the various kernel-debuginfo packages defined
in ``kernels`` directive.
@@ -99,7 +111,8 @@ cores are processed in a given timeframe this area will fill up quickly.
this directive needs to be set. ``Note`` that the mail server should not
require smtp authentication.
-``database``: (**Required**) Define where the sqlite database will reside.
+``database``: (**Required**) Define where the sqlite database will reside. ``Note`` the ``casuser``
+will need to have read/write access to this database.
``purgeLimit``: Define amount of day(s) back wish to keep physical data on
system.
@@ -211,13 +224,13 @@ CAS simply pass it the email parameter.
An example, of a user wanting to process a corefile named ``vmcore.12345``::
- $ cas -i 12345 -f vmcore.12345 -e user(a)cas-server.com
+ $ cas -i 12345 -f vmcore.12345 -e user(a)cas-server.com --job 1
In the above example an assumption is made that ``1`` is associated to some
form of ticketing system so to keep things organized an identifier was set of
that number.
-The directory hierarchy for the current job should look like ``/cores/1``.
+The directory hierarchy for the current job should look like ``/cores/1/datetime``.
In addition to the processing of core files there is also a ``process log`` contained
within this directory for each job processed. If multiple jobs for the same identifier
are issued they are placed within a sub directory marked by the current timestamp
@@ -375,6 +388,7 @@ Other various ways of compressing archive are as follows::
$ tar cvzf vmcore.tar.gz vmcore
$ gzip vmcore
$ bzip2 vmcore
+ $ xz vmcore
``Note``: please do not double compress or CAS will fail.
diff --git a/doc/searchindex.js b/doc/searchindex.js
index dc8cce5..f3ec943 100644
--- a/doc/searchindex.js
+++ b/doc/searchindex.js
@@ -1 +1 @@
-Search.setIndex({desctypes:{},terms:{all:0,mnt:0,ffffffff8011d191:0,snip:0,abil:0,follow:0,disk:0,depend:0,wish:0,do_dlm_lock:0,those:0,aris:0,worth:0,sent:0,r14:0,r15:0,r12:0,r13:0,r10:0,r11:0,faq:0,ffffffff8010e789:0,vmcore:0,upstream:0,ticket:0,relev:0,administr:0,level:0,die:0,list:0,form:0,prepar:0,pleas:0,x86_64:0,core:0,direct:0,pass:0,download:0,further:0,keygen:0,sub:0,section:0,abl:0,access:0,version:0,hostkei:0,autogener:0,gener:0,here:0,address:0,path:0,sinc:0,valu:0,ffffffff80110bf5:0,rdx:0,amount:0,typic:0,rdi:0,smp_call_function_interrupt:0,chanc:0,"0000010001073f48":0,repositori:0,modul:0,prefer:0,crash_32:0,filenam:0,id_dsa:0,instal:0,from:0,describ:0,would:0,memori:0,doubl:0,visit:0,two:0,next:0,few:0,usr:0,recommend:0,type:0,tell:0,more:0,sort:0,wrapper:0,share:0,ffffffff803e9b80:0,"1tb":0,must:0,none:0,retriev:0,hous:0,setup:0,work:0,uniqu:0,can:0,root:0,sqlite:0,conf:0,tar:0,process:0,smtp:0,accept:0,want:0,occur:0,multipl:0,anoth:0,snippet:0,how:0,error_exit:0,purg:0,opt:0,verifi:0,negoti:0,perspect:0,ffffffff80528000:0,resourc:0,passwordless:0,"00000102000a4780":0,clone:0,reflect:0,date:0,data:0,physic:0,essenti:0,issu:0,inform:0,environ:0,suggest:0,order:0,help:0,over:0,major:0,i386:0,hierarchi:0,paramet:0,"100f57cb030":0,requir:0,mail:0,main:0,alter:0,crash:0,thei:0,python:0,auto:0,overal:0,dai:0,initi:0,"break":0,mention:0,itanium:0,now:0,introduct:0,name:0,edit:0,troubleshoot:0,authent:0,kern:0,each:0,debug:0,mean:0,mai:0,continu:0,happen:0,extract:0,buffers:0,out:0,shown:0,network:0,ffffffff8014cc1d:0,dss:0,content:0,fffffffffffffffa:0,dsa:0,advanc:0,orig_rax:0,given:0,base:0,releas:0,org:0,ffffffff80110e1d:0,traceback:0,keep:0,vmlinux:0,thing:0,yum:0,isn:0,assign:0,first:0,origin:0,rang:0,onc:0,number:0,swapper:0,instruct:0,done:0,least:0,rflag:0,differ:0,script:0,associ:0,interact:0,system:0,messag:0,ffffffff80112058:0,statement:0,ffffffff8047a0a0:0,"final":0,boil:0,editor:0,option:0,debuginfo:0,tool:0,copi:0,specifi:0,hassl:0,exactli:0,rsp:0,than:0,provid:0,urlgrabb:0,emac:0,structur:0,store:0,stale:0,"function":0,ani:0,packag:0,have:0,need:0,"101f3658030":0,rax:0,rsi:0,engin:0,bz2:0,lib:0,note:0,also:0,client:0,build:0,which:0,begin:0,normal:0,buffer:0,previou:0,compress:0,most:0,regular:0,deploi:0,everyth:0,prove:0,"101f21efb80":0,gather:0,place:0,determin:0,databas:0,usual:0,show:0,text:0,fine:0,find:0,current:0,onli:0,locat:0,configur:0,solut:0,state:0,should:0,analyz:0,local:0,variou:0,cvjf:0,express:0,autom:0,repo:0,mainten:0,ssh:0,ellargesmp:0,enabl:0,organ:0,cleanli:0,contain:0,where:0,wiki:0,kernel:0,set:0,dump:0,"10001073f48":0,see:0,result:0,arg:0,corrupt:0,subject:0,ffffffffa03183ff:0,detect:0,purgelimit:0,extend:0,irq:0,someth:0,enough:0,between:0,approach:0,email:0,altern:0,assumpt:0,kei:0,cpu_idl:0,default_idl:0,job:0,come:0,tue:0,addit:0,last:0,admin:0,fault:0,etc:0,instanc:0,mani:0,com:0,improp:0,load:0,simpli:0,point:0,"1000107bfb0":0,rpm:0,casus:0,coredump:0,been:0,mark:0,much:0,sshkei:0,popul:0,quickli:0,largesmp:0,anywher:0,try_crashdump:0,"0000000000000e86":0,present:0,therefor:0,look:0,rbx:0,solid:0,mount:0,rbp:0,defin:0,abov:0,error:0,"101f21efb20":0,ffffffff8047a0b0:0,timefram:0,rip:0,destin:0,call_function_interrupt:0,archiv:0,uncom:0,cherrypi:0,fedorahost:0,sever:0,fedora:0,author:0,media:0,same:0,binari:0,timestamp:0,x86:0,someon:0,temporari:0,user:0,"500gb":0,stack:0,task:0,"10001073e98":0,entri:0,do_invalid_op:0,exampl:0,command:0,thi:0,filesystem:0,gzip:0,fail:0,latest:0,identifi:0,execut:0,workdirectori:0,heavili:0,previous:0,samba:0,except:0,valid:0,match:0,bin:0,read:0,kmem:0,debuglevel:0,smtphost:0,mod:0,"1000107bfa0":0,resid:0,like:0,specif:0,anyon:0,manual:0,resolv:0,server:0,collect:0,necessari:0,either:0,"101f21efb60":0,"101f21efc40":0,output:0,page:0,some:0,back:0,gfs_quotad:0,proper:0,tmp:0,assum:0,ffffffff80529f08:0,exit:0,machin:0,intial:0,who:0,run:0,reach:0,usag:0,host:0,prerequisit:0,commun:0,unfortun:0,primarili:0,within:0,automat:0,down:0,"101f21efb50":0,strip:0,chang:0,start_disk_dump:0,storag:0,git:0,rcx:0,log:0,wai:0,area:0,transfer:0,support:0,question:0,avail:0,includ:0,suit:0,"var":0,rhel:0,analysi:0,properli:0,simplejson:0,pwd:0,sqlalchemi:0,line:0,analyst:0,info:0,made:0,possibl:0,"default":0,checkout:0,below:0,ffffffff80111c90:0,otherwis:0,problem:0,similar:0,epel:0,later:0,certain:0,dure:0,pid:0,incomplet:0,exist:0,file:0,cvzf:0,fill:0,bzip2:0,"00000100f57cb030":0,when:0,unnecessari:0,other:0,ffffffff8010e7a9:0,architectur:0,corefil:0,benefici:0,autopurg:0,ffffffff80529fb8:0,stoke:0,directori:0,descript:0,adam:0,time:0,ffffffff8010e81c:0,rpmfilter:0,cpu:0},titles:["Core Analysis System"],modules:{},descrefs:{},filenames:["index"]})
\ No newline at end of file
+Search.setIndex({desctypes:{},terms:{all:0,mnt:0,ffffffff8011d191:0,snip:0,abil:0,follow:0,disk:0,regexexcludedir:0,depend:0,wish:0,do_dlm_lock:0,those:0,aris:0,worth:0,sent:0,r14:0,r15:0,r12:0,r13:0,r10:0,r11:0,faq:0,ffffffff8010e789:0,vmcore:0,upstream:0,ticket:0,relev:0,administr:0,level:0,die:0,list:0,form:0,prepar:0,pleas:0,x86_64:0,core:0,direct:0,pass:0,download:0,further:0,keygen:0,sub:0,section:0,abl:0,access:0,version:0,hostkei:0,autogener:0,gener:0,here:0,address:0,path:0,sinc:0,valu:0,ffffffff80110bf5:0,search:0,rdx:0,datetim:0,amount:0,typic:0,rdi:0,smp_call_function_interrupt:0,chanc:0,"0000010001073f48":0,repositori:0,modul:0,prefer:0,crash_32:0,filenam:0,id_dsa:0,instal:0,txt:0,regex:0,from:0,describ:0,would:0,memori:0,doubl:0,visit:0,two:0,next:0,few:0,usr:0,recommend:0,type:0,tell:0,more:0,sort:0,wrapper:0,share:0,ffffffff803e9b80:0,"1tb":0,must:0,syntaxess:0,none:0,retriev:0,hous:0,setup:0,work:0,uniqu:0,can:0,root:0,regexexcludefil:0,sqlite:0,conf:0,tar:0,give:0,process:0,smtp:0,accept:0,want:0,occur:0,multipl:0,anoth:0,write:0,how:0,error_exit:0,purg:0,opt:0,verifi:0,negoti:0,perspect:0,ffffffff80528000:0,resourc:0,passwordless:0,"00000102000a4780":0,clone:0,reflect:0,date:0,data:0,physic:0,man:0,essenti:0,exclud:0,issu:0,inform:0,environ:0,allow:0,suggest:0,untest:0,order:0,help:0,over:0,major:0,i386:0,hierarchi:0,paramet:0,snippet:0,"100f57cb030":0,requir:0,mail:0,main:0,alter:0,crash:0,thei:0,python:0,auto:0,overal:0,dai:0,initi:0,"break":0,mention:0,itanium:0,now:0,introduct:0,multiprocess:0,name:0,edit:0,troubleshoot:0,authent:0,kern:0,each:0,debug:0,mean:0,mai:0,continu:0,backport:0,happen:0,extract:0,buffers:0,out:0,shown:0,network:0,ffffffff8014cc1d:0,dss:0,content:0,fffffffffffffffa:0,dsa:0,advanc:0,orig_rax:0,given:0,base:0,releas:0,org:0,ffffffff80110e1d:0,traceback:0,keep:0,vmlinux:0,thing:0,yum:0,isn:0,assign:0,first:0,origin:0,rang:0,onc:0,number:0,swapper:0,instruct:0,done:0,least:0,rflag:0,differ:0,script:0,associ:0,interact:0,system:0,messag:0,attach:0,ffffffff80112058:0,statement:0,ffffffff8047a0a0:0,"final":0,boil:0,editor:0,shell:0,option:0,debuginfo:0,tool:0,copi:0,specifi:0,hassl:0,exactli:0,rsp:0,than:0,provid:0,urlgrabb:0,emac:0,structur:0,posix:0,store:0,stale:0,"function":0,badfil:0,ani:0,fail:0,have:0,need:0,"101f3658030":0,rax:0,rsi:0,packag:0,engin:0,bz2:0,lib:0,note:0,also:0,client:0,build:0,which:0,begin:0,normal:0,buffer:0,glob:0,previou:0,compress:0,most:0,regular:0,deploi:0,"101f21efb80":0,gather:0,place:0,determin:0,irq:0,usual:0,show:0,text:0,syntax:0,fine:0,find:0,current:0,onli:0,locat:0,configur:0,solut:[],state:0,should:0,analyz:0,local:0,variou:0,cvjf:0,express:0,autom:0,repo:0,mainten:0,ssh:0,ellargesmp:0,enabl:0,organ:0,cleanli:0,contain:0,where:0,wiki:0,kernel:0,set:0,dump:0,"10001073f48":0,see:0,result:0,arg:0,corrupt:0,subject:0,ffffffffa03183ff:0,detect:0,purgelimit:0,extend:0,databas:0,someth:0,enough:0,between:0,approach:0,email:0,altern:0,assumpt:0,kei:0,cpu_idl:0,default_idl:0,job:0,come:0,tue:0,addit:0,last:0,admin:0,fault:0,etc:0,instanc:0,mani:0,com:0,improp:0,load:0,simpli:0,point:0,"1000107bfb0":0,rpm:0,casus:0,coredump:0,been:0,mark:0,much:0,sshkei:0,popul:0,quickli:0,largesmp:0,anywher:0,try_crashdump:0,"0000000000000e86":0,present:0,therefor:0,look:0,rbx:0,solid:0,mount:0,rbp:0,defin:0,abov:0,error:0,"101f21efb20":0,ffffffff8047a0b0:0,timefram:0,rip:0,destin:0,call_function_interrupt:0,archiv:0,uncom:0,cherrypi:0,fedorahost:0,sever:0,mako:0,fedora:[],author:0,media:0,same:0,binari:0,timestamp:0,x86:0,someon:0,temporari:0,user:0,"500gb":0,stack:0,task:0,"10001073e98":0,entri:0,do_invalid_op:0,exampl:0,command:0,thi:0,filesystem:0,gzip:0,everyth:0,latest:0,regextyp:0,identifi:0,execut:0,workdirectori:0,heavili:0,previous:0,samba:0,except:0,valid:0,match:0,bin:0,format:0,read:0,kmem:0,debuglevel:0,smtphost:0,mod:0,"1000107bfa0":0,resid:0,like:0,specif:0,anyon:0,manual:0,resolv:0,server:0,collect:0,necessari:0,either:0,"101f21efb60":0,"101f21efc40":0,output:0,page:0,some:0,back:0,gfs_quotad:0,proper:0,librari:0,tmp:0,assum:0,ffffffff80529f08:0,exit:0,machin:0,intial:0,who:0,run:0,reach:0,usag:0,host:0,prerequisit:0,src:0,prove:0,unfortun:0,primarili:0,within:0,automat:0,down:0,"101f21efb50":0,strip:0,chang:0,start_disk_dump:0,storag:0,git:0,rcx:0,log:0,wai:0,area:0,transfer:0,support:0,question:0,"long":0,avail:0,includ:0,suit:0,"var":0,rhel:0,analysi:0,properli:0,simplejson:0,pwd:0,sqlalchemi:0,line:0,analyst:0,info:0,commun:0,made:0,possibl:0,"default":0,checkout:0,below:0,ffffffff80111c90:0,otherwis:0,problem:0,similar:0,epel:0,later:[],certain:0,dure:0,pid:0,doesn:0,incomplet:0,exist:0,file:0,cvzf:0,fill:0,bzip2:0,"00000100f57cb030":0,when:0,unnecessari:0,other:0,ffffffff8010e7a9:0,you:0,architectur:0,corefil:0,benefici:0,autopurg:0,ffffffff80529fb8:0,stoke:0,directori:0,descript:0,adam:0,time:0,ffffffff8010e81c:0,rpmfilter:0,cpu:0},titles:["Core Analysis System"],modules:{},descrefs:{},filenames:["index"]})
\ No newline at end of file
diff --git a/man/en/cas-admin.1 b/man/en/cas-admin.1
index fcd57ea..7b63a20 100644
--- a/man/en/cas-admin.1
+++ b/man/en/cas-admin.1
@@ -1,4 +1,4 @@
-.TH CAS-ADMIN "1"
+.TH "CAS-ADMIN" "1" "CAS-ADMIN" "cas administration interface"
.SH NAME
cas-admin \- Administrator tools for building rpm/server database.
@@ -15,19 +15,25 @@ Populate server database for automatic processing of core files.
Purge data based on set days (see purge options)
.SH PURGE OPTIONS
.TP
-.B \-d
+.B \-d [days]
Define how many days back you wish to purge data, default is 90 days.
-.SH RESOURCES
-A configuration file is maintained in /etc/cas.conf.
+
+.SH SEE ALSO
+.sp
+cas-server(1)
+.in
+cas(1)
.SH AUTHOR
+.sp
Written by Adam Stokes
.SH "REPORTING BUGS"
-Report bugs to <astokes(a)redhat.com>.
+.sp
+Report bugs to <astokes(a)redhat.com> or https://fedorahosted.org/cas/report
.SH COPYRIGHT
+.sp
Copyright \(co 2007-2010 Adam Stokes
-.br
+.in
+
This is free software. You may redistribute copies of it under the terms of
the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.
There is NO WARRANTY, to the extent permitted by law.
-.SH "SEE ALSO"
-Full documentation should be found in /usr/share/doc/cas-<version>.
diff --git a/man/en/cas.1 b/man/en/cas.1
index 3097a1c..fd0b25a 100644
--- a/man/en/cas.1
+++ b/man/en/cas.1
@@ -1,43 +1,56 @@
-.TH CAS "1"
+.TH "CAS" "1" "CAS" "cas command line interface"
.SH NAME
cas \- Tool to configure core analysis environment.
.SH DESCRIPTION
-.TP
-\fIcas\fP is a tool used to automatically configure an environment for
-viewing coredumps.
+.sp
+.B cas
+is a tool used to automatically configure an environment for viewing coredumps.
.SH OPTIONS
+.sp
.TP
-.BI \-i " identifier"
+.B \-i identifier
Specify an id to associate with current cas job, normally a support ticket of
some sort.
.TP
-.BI \-f " file"
+.B \-f [file]
Define a core file to be processed.
.TP
-.BI \-e " email"
+.B \-e [email]
Provide an email address for result notification
.TP
.B \-m
Extract current loaded modules from debug kernels.
.TP
-.B \--compress " file"
+.B \--compress [file]
Compress file using system supplied compression utilties.
.TP
-.B \--strip " file"
+.B \--strip [file]
Strips vmcore of unecessary pages. (Not active for now)
-.SH RESOURCES
-A configuration file is maintained in /etc/cas.conf.
+.TP
+.B \--job [job-id]
+Define job to associate to this analysis (Normally this is handled by the
+web interface)
+
+.SH "SEE ALSO"
+.sp
+cas-admin(1)
+.in
+cas-server(1)
+.in
+cas.conf(5)
.SH AUTHOR
+.sp
Written by Adam Stokes
.SH "REPORTING BUGS"
-Report bugs to <astokes(a)redhat.com>.
+.sp
+Report bugs to <astokes(a)redhat.com> or https://fedorahosted.org/cas/report
.SH COPYRIGHT
+.sp
Copyright \(co 2007-2010 Adam Stokes
-.br
+.in
+
This is free software. You may redistribute copies of it under the terms of
the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.
There is NO WARRANTY, to the extent permitted by law.
-.SH "SEE ALSO"
-Full documentation should be found in /usr/share/doc/cas-<version>.
diff --git a/man/en/cas.conf.5 b/man/en/cas.conf.5
index e366089..bf1955c 100644
--- a/man/en/cas.conf.5
+++ b/man/en/cas.conf.5
@@ -7,48 +7,69 @@ cas.conf is the configuration file for cas.
.SH [settings] OPTIONS
.sp
.in
-.B casuser
-User to run cas as.
+.B casuser:
+(Required) User to run cas, recommended to run as someone other than root.
+
.in
-.B sshkey
-Used when deploying cas over several systems via ssh
+.B sshkey:
+(Required) Used for ssh negotiation, these are generated with ssh-keygen.
+
.in
-.B kernels
-Location of debug kernels
+.B kernels:
+(Required) Describes the location of where kernel-debuginfo packages are to be stored. This can range anywhere from an nfs mount, samba share, local disk or any other type of media the cas server can access.
+
.in
-.B rpmFilter
-Regular expression syntax when searching for kernels
+.B regexExcludeDir:
+Directories that may be within the search path that doesn’t need to be included. This is a shell format so globs like */*/data are accepted.
+
.in
-.B debugLevel
-Debug level for logging (DEBUG, INFO)
+.B regexExcludeFile:
+Any files that need to be excluded from the search path. This is also a shell format */*/badfile.txt.
+
.in
-.B workDirectory
-Work directory
+.B regexType:
+(Required) Defines the regex syntax to use within find. Doing a man find and searching for regextype will give you the allowable syntaxess.
+
.in
-.B smtphost
-Mail server for notifications
+.B rpmFilters:
+(Required) This is a emacs based regular expression which is essentially passed to a find command to locate the various kernel-debuginfo packages defined in kernels directive.
+
.in
-.B database
-Locate for database
+.B debugLevel:
+As the name suggest it will set the debug level for CAS output. Currently the only accepted values are DEBUG|INFO.
+
.in
-.B notify
-Receive notifications of core progress and result
+.B workDirectory:
+(Required) Defines where all processed cores will be placed. This mount point will need to have the most storage assigned to it. Depending on how many cores are processed in a given timeframe this area will fill up quickly.
+
+.in
+.B smtphost:
+If wanting output of CAS processing email to a certain address this directive needs to be set. Note that the mail server should not require smtp authentication.
+
+.in
+.B database:
+(Required) Define where the sqlite database will reside. Note the casuser will need to have read/write access to this database.
+
.SH [maintenance] OPTIONS
.sp
.in
-.B purgeLimit
-Time frame to keep data (days)
+.B purgeLimit:
+Define amount of day(s) back wish to keep physical data on system.
+
.in
-.B autoPurge
-Autopurge data when cas-admin is run
+.B autoPurge:
+Yes/No setting if wanting cas-admin to auto purge stale data on each run.
+
.SH [advanced] OPTIONS
.sp
.in
-.B crash_32
-Used when running a x86_64 and wanting to analyze a x86 core
+.B crash_32:
+Primarily used on x86_64 systems to process x86 cores. If x86 version of crash is installed this directive can be set to the crash binary and CAS will automatically process x86 cores on a x86_64 machine. Note this is only available if the CAS server is a x86_64 machine.
+
.in
-.B buffersize
-Buffersize for reading in a core file
+.B buffersize:
+Extend the read buffer when analyzing a core for a timestamp. Note this is normally needed for itanium cores, otherwise, the default is fine.
+
.SH FILES
.sp
/etc/cas.conf
diff --git a/overseer/command.py b/overseer/command.py
index 02cc040..91c892e 100755
--- a/overseer/command.py
+++ b/overseer/command.py
@@ -73,8 +73,7 @@ class Root:
if not session.query(Job).filter_by(identifier=data['identifier']).first():
jobRecord = Job(data['identifier'],
data['email'],
- data['vmcore'],
- cherrypy.request.headers['Remote-Addr'])
+ data['vmcore'])
session.add(jobRecord)
session.commit()
record = jobRecord
@@ -112,7 +111,7 @@ class Root:
return mytemplate.render(errors={'error' : 'Job Not Found'})
@cherrypy.expose
- def list(self, **data):
+ def jobs(self, **data):
""" list all jobs """
session = Session()
job_query = session.query(Job).order_by(Job.jobId.desc()).all()
diff --git a/overseer/static/base.html b/overseer/static/base.html
index 8ae71f2..91de0c3 100644
--- a/overseer/static/base.html
+++ b/overseer/static/base.html
@@ -11,7 +11,7 @@
<body class="index">
<div class="container">
<h1><img src="/enhance/cas_logo.png"/> - Overseer</h1>
-<a href="/">entrance</a> | <a href="/list">list recent jobs</a>
+<a href="/">entrance</a> | <a href="/jobs">list recent jobs</a>
<hr class="space"/>
${next.body()}
<hr class="space"/>
14 years