greenage
greenage

Reputation: 397

Match an approaching date In Lua

I'm looking for a little help on a Lua script. Essentially I'm looking to match an approaching date X number of minutes prior to today. In the example below I've used 9000 minutes.

alarm.get ()

message = "Certificate Expiry Warning - Do something"
SUPPKEY = "Certificate Expiry"
SUBSYS = "1.1"
SOURCE = "SERVERNAME"

--local pattern = "(%d-%m-%Y)"

local t = os.date('*t'); -- get current date and time

print(os.date("%d-%m-%Y")); --Prints todays date

t.min = t.min - 9000; -- subtract 9000 minutes

--print(os.date("%Y-%m-%d %H:%m:%S", os.time(t))); --Original Script

print(os.date("%d-%m-%Y", os.time(t))); --Prints alerting date

if string.match ~=t.min --Match string

--if string.match(a.message, pattern)

--then print (al.message)

then print ("We have a match")

--then nimbus.alarm (1, message , SUPPKEY , SUBSYS , SOURCE) --Sends alert

else print ("Everything is fine") --Postive, no alert

--else print (al.message)

end

The alarm.get grabs a line of text that looks like this:

DOMAIN\USERNAME,Web Server (WebServer),13/01/2017 09:13,13/01/2019,COMPANY_NAME,HOSTNAME_FQDN,SITE

So the line shown above is passed as an a.message variable and I'm looking to match the date highlighted in bold to today's date with 9000 minutes taken off it.

The commented out parts are just me testing different things.

Upvotes: 2

Views: 1493

Answers (1)

Electrix
Electrix

Reputation: 351

I'm not sure if I understood the question well, but from my perspective it seems you are trying to do two things:

  1. Retrieve current time minus 9000 minutes in format DD/MM/YYYY.
  2. Compare this time to the one your program reads from file and do something, when the two dates are equal.

Here goes my sample code:

-- Settings
local ALLOWED_AGE = 9000 -- In minutes

-- Input line (for testing only)
local inputstr = "DOMAIN\\USERNAME,Web Server (WebServer),13/01/2017 09:13,13/01/2019,COMPANY_NAME,HOSTNAME_FQDN,SITE"

-- Separate line into 7 variables by token ","
local path, server, time, date, company_name, hostname, site = string.match(inputstr, "([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+)")

-- Check, if the line is ok (not necessary, but should be here to handle possible errors)
-- Also note, some additional checks should be here (eg. regex to match DD/MM/YYYY format)
if date == nil then
   print("Error reading line: "..inputstr)
end

-- Get current time minus 9000 minutes (in format DD/MM/YYYY)
local target_date = os.date("%d/%m/%Y", os.time() - ALLOWED_AGE * 60)

-- Printing what we got (for testing purposes)
print("Target date: "..target_date..", Input date: "..date)

-- Testing the match
if target_date == date then
   print("Dates are matched!")
else
   print("Dates are not matched!")
end

Although I'm not sure, whether you shouldn't be instead checking for "one date is bigger/smaller then the other" in your case.

Then the code above should be modified to something like this:

-- Extract day, month and year from date in format DD/MM/YYYY
local d, m, y = string.match(date, "([^/]+)/([^/]+)/([^/]+)")
-- Note I'm adding one day, so the certificate will actually expire day after it's "valid until" date.
local valid_until = os.time({year = y, month = m, day = d + 1})
local expire_time = os.time() - ALLOWED_AGE * 60 -- All certificates older than this should expire.

-- Printing what we got (for testing purposes)
print("Expire time: "..expire_time..", Cert valid until: "..valid_until)

-- Is expired?
if valid_until <= expire_time then
   print("Oops! Certificate expired.")
else
   print("Certificate date is valid.")
end

Upvotes: 2

Related Questions