Add build time into --version string
This commit is contained in:
parent
9c6aae8ea7
commit
49095c3830
@ -6,16 +6,17 @@
|
|||||||
#
|
#
|
||||||
# Mailstats
|
# Mailstats
|
||||||
#
|
#
|
||||||
# optional arguments:
|
# Optional arguments:
|
||||||
# -h, --help show this help message and exit
|
# -h, --help show this help message and exit
|
||||||
# -d DATE, --date DATE Specify a valid date (yyyy-mm-dd) for the analysis
|
# -d DATE, --date DATE Specify a valid date (yyyy-mm-dd) for the analysis
|
||||||
# -ef EMAILFILE, --emailfile EMAILFILE
|
# -ef EMAILFILE, --emailfile EMAILFILE
|
||||||
# Save an html file of the email sent (y/N)
|
# Save an html file of the email sent (y/N)
|
||||||
# -tf TEXTFILE, --textfile TEXTFILE
|
# -tf TEXTFILE, --textfile TEXTFILE
|
||||||
# Save a txt file of the html page (y/N)
|
# Save a txt file of the html page (y/N)
|
||||||
|
# --version show program's version number and exit
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# Re-written in python from Mailstats.pl (Perl) to conform to SME11 / Postfix / qpsmtpd log formats
|
# (June 2024 - bjr) Re-written in Python from Mailstats.pl (Perl) to conform to SME11 / Postfix / qpsmtpd log formats
|
||||||
# and html output added
|
# and html output added
|
||||||
#
|
#
|
||||||
# Todo:
|
# Todo:
|
||||||
@ -24,7 +25,7 @@
|
|||||||
# 4. Percent char causes sort to fail - look at adding it in the template
|
# 4. Percent char causes sort to fail - look at adding it in the template
|
||||||
# 5. Chase disparity in counts betweeen old mailstats and this
|
# 5. Chase disparity in counts betweeen old mailstats and this
|
||||||
# 6. Count emails delivered over ports 25/587/465 (SMTPS?)
|
# 6. Count emails delivered over ports 25/587/465 (SMTPS?)
|
||||||
# 7. use tmp for txt file and copy to html dir if required.
|
# 7. Incorporate the (rpm) build date into the version
|
||||||
#
|
#
|
||||||
# Future:
|
# Future:
|
||||||
# 1. Write summary line for each transaction to DB and link to it through cell in main table
|
# 1. Write summary line for each transaction to DB and link to it through cell in main table
|
||||||
@ -54,6 +55,9 @@ import argparse
|
|||||||
import tempfile
|
import tempfile
|
||||||
|
|
||||||
Mailstats_version = '1.2'
|
Mailstats_version = '1.2'
|
||||||
|
build_date_time = "__BUILD_DATE_TIME__"
|
||||||
|
if build_date_time == "__BUILD_DATE_TIME__":
|
||||||
|
build_date_time = "Unknown"
|
||||||
|
|
||||||
script_dir = os.path.dirname(os.path.abspath(__file__))
|
script_dir = os.path.dirname(os.path.abspath(__file__))
|
||||||
data_file_path = script_dir+'/../..' #back to the top
|
data_file_path = script_dir+'/../..' #back to the top
|
||||||
@ -453,41 +457,41 @@ def render_sub_table(table_title,table_headers,found_values):
|
|||||||
return rendered_html
|
return rendered_html
|
||||||
|
|
||||||
|
|
||||||
def get_spamassassin_version():
|
# def get_spamassassin_version():
|
||||||
"""
|
# """
|
||||||
Get the installed SpamAssassin version.
|
# Get the installed SpamAssassin version.
|
||||||
|
|
||||||
Returns:
|
# Returns:
|
||||||
str: Version number of SpamAssassin if installed, otherwise an error message.
|
# str: Version number of SpamAssassin if installed, otherwise an error message.
|
||||||
"""
|
# """
|
||||||
try:
|
# try:
|
||||||
result = subprocess.run(['spamassassin', '--version'], capture_output=True, text=True)
|
# result = subprocess.run(['spamassassin', '--version'], capture_output=True, text=True)
|
||||||
if result.returncode == 0:
|
# if result.returncode == 0:
|
||||||
version_line = result.stdout.split('\n')[0]
|
# version_line = result.stdout.split('\n')[0]
|
||||||
version = version_line.split()[1]
|
# version = version_line.split()[1]
|
||||||
return version
|
# return version
|
||||||
else:
|
# else:
|
||||||
return "SpamAssassin is not installed or an error occurred."
|
# return "SpamAssassin is not installed or an error occurred."
|
||||||
except Exception as e:
|
# except Exception as e:
|
||||||
return f"Error: {e}"
|
# return f"Error: {e}"
|
||||||
|
|
||||||
def get_clamav_version():
|
# def get_clamav_version():
|
||||||
"""
|
# """
|
||||||
Get the installed ClamAV version.
|
# Get the installed ClamAV version.
|
||||||
|
|
||||||
Returns:
|
# Returns:
|
||||||
str: Version number of ClamAV if installed, otherwise an error message.
|
# str: Version number of ClamAV if installed, otherwise an error message.
|
||||||
"""
|
# """
|
||||||
try:
|
# try:
|
||||||
result = subprocess.run(['clamscan', '--version'], capture_output=True, text=True)
|
# result = subprocess.run(['clamscan', '--version'], capture_output=True, text=True)
|
||||||
if result.returncode == 0:
|
# if result.returncode == 0:
|
||||||
version_line = result.stdout.split('\n')[0]
|
# version_line = result.stdout.split('\n')[0]
|
||||||
version = version_line.split()[1]
|
# version = version_line.split()[1]
|
||||||
return version
|
# return version
|
||||||
else:
|
# else:
|
||||||
return "ClamAV is not installed or an error occurred."
|
# return "ClamAV is not installed or an error occurred."
|
||||||
except Exception as e:
|
# except Exception as e:
|
||||||
return f"Error: {e}"
|
# return f"Error: {e}"
|
||||||
|
|
||||||
def read_html_from_file(filepath):
|
def read_html_from_file(filepath):
|
||||||
"""
|
"""
|
||||||
@ -646,7 +650,9 @@ if __name__ == "__main__":
|
|||||||
parser.add_argument('-d', '--date', help='Specify a valid date (yyyy-mm-dd) for the analysis', default=formatted_yesterday)
|
parser.add_argument('-d', '--date', help='Specify a valid date (yyyy-mm-dd) for the analysis', default=formatted_yesterday)
|
||||||
parser.add_argument('-ef', '--emailfile', help='Save an html file of the email sent (y/N)', default='n')
|
parser.add_argument('-ef', '--emailfile', help='Save an html file of the email sent (y/N)', default='n')
|
||||||
parser.add_argument('-tf', '--textfile', help='Save a txt file of the html page (y/N)', default='n')
|
parser.add_argument('-tf', '--textfile', help='Save a txt file of the html page (y/N)', default='n')
|
||||||
|
parser.add_argument('--version', action='version', version='%(prog)s '+Mailstats_version+" built on "+build_date_time)
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
analysis_date = args.date
|
analysis_date = args.date
|
||||||
# and check its format is valid
|
# and check its format is valid
|
||||||
try:
|
try:
|
||||||
@ -660,8 +666,19 @@ if __name__ == "__main__":
|
|||||||
anaysis_date_obj = datetime.strptime(analysis_date, '%Y-%m-%d')
|
anaysis_date_obj = datetime.strptime(analysis_date, '%Y-%m-%d')
|
||||||
noemailfile = args.emailfile.lower() == 'n'
|
noemailfile = args.emailfile.lower() == 'n'
|
||||||
notextfile = args.textfile.lower() == 'n'
|
notextfile = args.textfile.lower() == 'n'
|
||||||
|
|
||||||
isThonny = is_running_under_thonny()
|
isThonny = is_running_under_thonny()
|
||||||
|
|
||||||
|
hello_string = "Mailstats:"+Mailstats_version+' for '+DomainName+" at "+formatted_datetime+" for "+analysis_date
|
||||||
|
print(hello_string)
|
||||||
|
version_string = "Chameleon:"+chameleon_version+" Python:"+python_version
|
||||||
|
if isThonny:
|
||||||
|
version_string = version_string + "...under Thonny"
|
||||||
|
if args.version:
|
||||||
|
print(f"{Mailstats_version} {version_string}")
|
||||||
|
quit()
|
||||||
|
|
||||||
|
print(version_string)
|
||||||
|
|
||||||
#E-Smith Config DBs
|
#E-Smith Config DBs
|
||||||
if isThonny:
|
if isThonny:
|
||||||
db_dir = "/home/brianr/SME11Build/GITFiles/smecontribs/smeserver-mailstats/"
|
db_dir = "/home/brianr/SME11Build/GITFiles/smecontribs/smeserver-mailstats/"
|
||||||
@ -691,8 +708,8 @@ if __name__ == "__main__":
|
|||||||
EMailSMTPUser = get_value(ConfigDB,"mailstats","EmailUser") #None = default => no authenticatioon needed
|
EMailSMTPUser = get_value(ConfigDB,"mailstats","EmailUser") #None = default => no authenticatioon needed
|
||||||
EMailSMTPPassword = get_value(ConfigDB,"mailstats","EmailPassword")
|
EMailSMTPPassword = get_value(ConfigDB,"mailstats","EmailPassword")
|
||||||
|
|
||||||
spamassassin_version = get_spamassassin_version()
|
#spamassassin_version = get_spamassassin_version()
|
||||||
clamav_version = get_clamav_version()
|
#clamav_version = get_clamav_version()
|
||||||
|
|
||||||
FetchmailIP = '127.0.0.200'; #Apparent Ip address of fetchmail deliveries
|
FetchmailIP = '127.0.0.200'; #Apparent Ip address of fetchmail deliveries
|
||||||
WebmailIP = '127.0.0.1'; #Apparent Ip of Webmail sender
|
WebmailIP = '127.0.0.1'; #Apparent Ip of Webmail sender
|
||||||
@ -701,12 +718,6 @@ if __name__ == "__main__":
|
|||||||
MAILMAN = "bounces"; #sender when mailman sending when orig is localhost
|
MAILMAN = "bounces"; #sender when mailman sending when orig is localhost
|
||||||
DMARCDomain="dmarc"; #Pattern to recognised DMARC sent emails (this not very reliable, as the email address could be anything)
|
DMARCDomain="dmarc"; #Pattern to recognised DMARC sent emails (this not very reliable, as the email address could be anything)
|
||||||
DMARCOkPattern="dmarc: pass"; #Pattern to use to detect DMARC approval
|
DMARCOkPattern="dmarc: pass"; #Pattern to use to detect DMARC approval
|
||||||
hello_string = "Mailstats:"+Mailstats_version+' for '+DomainName+" at "+formatted_datetime+" for "+analysis_date
|
|
||||||
print(hello_string)
|
|
||||||
version_string = "Chameleon:"+chameleon_version+" Python:"+python_version
|
|
||||||
if isThonny:
|
|
||||||
version_string = version_string + "...under Thonny"
|
|
||||||
print(version_string)
|
|
||||||
|
|
||||||
num_hours = 25 # Represents hours from 0 to 23 - adds extra one for column totals and another for percentages
|
num_hours = 25 # Represents hours from 0 to 23 - adds extra one for column totals and another for percentages
|
||||||
|
|
||||||
@ -757,18 +768,18 @@ if __name__ == "__main__":
|
|||||||
qpcodes_pattern = re.compile(r".*(\(.*\)).*'")
|
qpcodes_pattern = re.compile(r".*(\(.*\)).*'")
|
||||||
i = 0;
|
i = 0;
|
||||||
sorted_len= len(sorted_log_dict)
|
sorted_len= len(sorted_log_dict)
|
||||||
# Initial call to print the progress bar
|
|
||||||
#unless none to show
|
#unless none to show
|
||||||
|
spamavg = 0;
|
||||||
|
spamqueuedcount = 0
|
||||||
|
hamcount = 0
|
||||||
|
hamavg = 0
|
||||||
|
rejectspamcount = 0
|
||||||
|
rejectspamavg = 0
|
||||||
|
DMARCSendCount = 0
|
||||||
|
totalexamined = 0
|
||||||
if sorted_len > 0:
|
if sorted_len > 0:
|
||||||
spamavg = 0;
|
|
||||||
spamqueuedcount = 0
|
|
||||||
hamcount = 0
|
|
||||||
hamavg = 0
|
|
||||||
rejectspamcount = 0
|
|
||||||
rejectspamavg = 0
|
|
||||||
DMARCSendCount = 0
|
|
||||||
totalexamined = 0
|
|
||||||
if isThonny:
|
if isThonny:
|
||||||
|
# Initial call to print the progress bar
|
||||||
print_progress_bar(0, sorted_len, prefix='Progress:', suffix='Complete', length=50)
|
print_progress_bar(0, sorted_len, prefix='Progress:', suffix='Complete', length=50)
|
||||||
for timestamp, data in sorted_log_dict.items():
|
for timestamp, data in sorted_log_dict.items():
|
||||||
i += 1
|
i += 1
|
||||||
|
@ -1,17 +1,31 @@
|
|||||||
# $Id: smeserver-mailstats.spec,v 1.8 2023/02/15 09:40:09 brianr Exp $
|
# $Id: smeserver-mailstats.spec,v 1.7 2021/04/02 11:11:44 brianr Exp $
|
||||||
# Authority: brianread
|
# Authority: brianread
|
||||||
# Name: Brian Read
|
# Name: Brian Read
|
||||||
|
|
||||||
Summary: Daily mail statistics for SME Server
|
Summary: Daily mail statistics for SME Server
|
||||||
%define name smeserver-mailstats
|
%define name smeserver-mailstats
|
||||||
Name: %{name}
|
Name: %{name}
|
||||||
%define version 1.2
|
%define version 1.1
|
||||||
%define release 1
|
%define release 18
|
||||||
Version: %{version}
|
Version: %{version}
|
||||||
Release: %{release}%{?dist}
|
Release: %{release}%{?dist}
|
||||||
License: GPL
|
License: GPL
|
||||||
Group: SME/addon
|
Group: SME/addon
|
||||||
Source: %{name}-%{version}.tar.xz
|
Source: %{name}-%{version}.tgz
|
||||||
|
Patch0: smeserver-mailstats-1.1-random-cron_and_spamfilter-stats-7-update.patch
|
||||||
|
Patch1: smeserver-mailstats-1.1.bz8957.Create_the_mailstats_user.patch
|
||||||
|
Patch2: smeserver-mailstats-1.1.bz8656.Spamassassin_scores_and_tags.patch
|
||||||
|
Patch3: smeserver-mailstats-1.0-628.patch
|
||||||
|
Patch4: smeserver-mailstats-1.1.bz9588.qpsmtpd0_96compatible.patch
|
||||||
|
Patch5: smeserver-mailstats-1.1.bz9717-9716email_specific_stats.patch
|
||||||
|
Patch6: smeserver-mailstats-1.1.bz9888.geoip.patch
|
||||||
|
Patch7: smeserver-mailstats-1.1.bz10858_10327.cleanup_and_email_truncate.patch
|
||||||
|
Patch8: smeserver-mailstats-1.1-uninitialised-variable-on-no-data
|
||||||
|
Patch9: smeserver-mailstats-1.1-Clear-up-uninitialsed-use-of-lc.patch
|
||||||
|
Patch10:smeserver-mailstats-1.1-Add-Update-event-to-createlinks.patch
|
||||||
|
Patch11:smeserver-mailstats-1.1-Take-out-dot-in-cron-file-and-also-re-direct-errors-to-syslog.patch
|
||||||
|
Patch12:smeserver-mailstats-1.1-bz12327-Add-in-imap-authorisation-log-string.patch
|
||||||
|
Patch13:smeserver-mailstats-1.1-Pull-in-python-rewrite-from-sme11-dev.patch
|
||||||
|
|
||||||
BuildRoot: /var/tmp/%{name}-%{version}-%{release}-buildroot
|
BuildRoot: /var/tmp/%{name}-%{version}-%{release}-buildroot
|
||||||
BuildArchitectures: noarch
|
BuildArchitectures: noarch
|
||||||
@ -19,22 +33,19 @@ Requires: smeserver-release => 9.0
|
|||||||
Requires: qpsmtpd >= 0.96
|
Requires: qpsmtpd >= 0.96
|
||||||
BuildRequires: e-smith-devtools >= 1.13.1-03
|
BuildRequires: e-smith-devtools >= 1.13.1-03
|
||||||
Requires: perl-Switch
|
Requires: perl-Switch
|
||||||
|
BuildRequires: python36
|
||||||
|
Requires: python36
|
||||||
|
Requires: html2text
|
||||||
|
Requires: python3-chameleon
|
||||||
|
AutoReqProv: no
|
||||||
|
|
||||||
%description
|
%description
|
||||||
A script that via cron.d e-mails mail statistics to admin on a daily basis.
|
A script that via cron.d e-mails mail statistics to admin on a daily basis.
|
||||||
See http://www.contribs.org/bugzilla/show_bug.cgi?id=819
|
See http://www.contribs.org/bugzilla/show_bug.cgi?id=819
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
* Tue May 28 2024 Brian Read <brianr@koozali.org> 1.2-1.sme
|
* Fri Jun 07 2024 Brian Read <brianr@koozali.org> 1.1-18.sme
|
||||||
- Rewrite in python and conform to new postfix SME11 log format [SME: ]
|
- Pull in python re-write from SME11 dev [SME: ]
|
||||||
|
|
||||||
|
|
||||||
* Sun Jul 09 2023 cvs2git.sh aka Brian Read <brianr@koozali.org> 1.1-18.sme
|
|
||||||
- Roll up patches and move to git repo [SME: 12338]
|
|
||||||
|
|
||||||
* Sun Jul 09 2023 BogusDateBot
|
|
||||||
- Eliminated rpmbuild "bogus date" warnings due to inconsistent weekday,
|
|
||||||
by assuming the date is correct and changing the weekday.
|
|
||||||
|
|
||||||
* Wed Feb 15 2023 Brian Read <brianr@bjsystems.co.uk> 1.1-17.sme
|
* Wed Feb 15 2023 Brian Read <brianr@bjsystems.co.uk> 1.1-17.sme
|
||||||
- Add-in-imap-authorisation-log-string [SME: 12327]
|
- Add-in-imap-authorisation-log-string [SME: 12327]
|
||||||
@ -105,6 +116,20 @@ See http://www.contribs.org/bugzilla/show_bug.cgi?id=819
|
|||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup
|
%setup
|
||||||
|
%patch0 -p1
|
||||||
|
%patch1 -p1
|
||||||
|
%patch2 -p1
|
||||||
|
%patch3 -p1
|
||||||
|
%patch4 -p1
|
||||||
|
%patch5 -p1
|
||||||
|
%patch6 -p1
|
||||||
|
%patch7 -p1
|
||||||
|
%patch8 -p1
|
||||||
|
%patch9 -p1
|
||||||
|
%patch10 -p1
|
||||||
|
%patch11 -p1
|
||||||
|
%patch12 -p1
|
||||||
|
%patch13 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
perl createlinks
|
perl createlinks
|
||||||
@ -113,11 +138,19 @@ perl createlinks
|
|||||||
/bin/rm -rf $RPM_BUILD_ROOT
|
/bin/rm -rf $RPM_BUILD_ROOT
|
||||||
(cd root ; /usr/bin/find . -depth -print | /bin/cpio -dump $RPM_BUILD_ROOT)
|
(cd root ; /usr/bin/find . -depth -print | /bin/cpio -dump $RPM_BUILD_ROOT)
|
||||||
chmod +x $RPM_BUILD_ROOT/usr/bin/runmailstats.sh
|
chmod +x $RPM_BUILD_ROOT/usr/bin/runmailstats.sh
|
||||||
|
# Define the placeholder and generate the current date and time
|
||||||
|
now=$(date +"%Y-%m-%d %H:%M:%S")
|
||||||
|
|
||||||
|
# Replace the placeholder in the Python program located at %{BUILDROOT}/usr/bin
|
||||||
|
sed -i "s|__BUILD_DATE_TIME__|$now|" $RPM_BUILD_ROOT/usr/bin/mailstats.py
|
||||||
|
|
||||||
|
|
||||||
/bin/rm -f %{name}-%{version}-filelist
|
/bin/rm -f %{name}-%{version}-filelist
|
||||||
/sbin/e-smith/genfilelist $RPM_BUILD_ROOT > %{name}-%{version}-filelist
|
/sbin/e-smith/genfilelist $RPM_BUILD_ROOT | grep -v "\.pyc" | grep -v "\.pyo" > %{name}-%{version}-filelist
|
||||||
|
|
||||||
%clean
|
%clean
|
||||||
/bin/rm -rf $RPM_BUILD_ROOT
|
/bin/rm -rf $RPM_BUILD_ROOT
|
||||||
|
|
||||||
%files -f %{name}-%{version}-filelist
|
%files -f %{name}-%{version}-filelist
|
||||||
%defattr(-,root,root)
|
%defattr(-,root,root)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user