83 lines
3.0 KiB
Plaintext
83 lines
3.0 KiB
Plaintext
from urllib2_aws4auth import aws_urlopen, Request
|
|
from urllib2 import HTTPError
|
|
from urllib import urlencode
|
|
import json
|
|
import boto3
|
|
from pprint import pformat
|
|
|
|
REGION = 'us-east-2'
|
|
SERVICE = 'execute-api'
|
|
ENDPOINT = 'https://l7o38q47a6.execute-api.us-east-2.amazonaws.com/default/ScadaProductMetrics'
|
|
LOGGER = system.util.getLogger('activityLog')
|
|
|
|
def openSession():
|
|
CREDS = boto3.Session().get_credentials()
|
|
AWS_ACCESS_KEY_ID = CREDS.access_key
|
|
AWS_SECRET_ACCESS_KEY = CREDS.secret_key
|
|
TOKEN = CREDS.token
|
|
|
|
OPENER = aws_urlopen(
|
|
AWS_ACCESS_KEY_ID,
|
|
AWS_SECRET_ACCESS_KEY,
|
|
REGION,
|
|
SERVICE,
|
|
session_token=TOKEN,
|
|
verify=False)
|
|
return OPENER
|
|
|
|
def createActivityDetails(session, resource_type, resource, current_page, start_time, end_time = None):
|
|
user = session.props.auth.user.userName
|
|
session_id = session.props.id
|
|
site = session.custom.fc
|
|
start_time = system.date.format(start_time, 'yyyy-MM-dd HH:mm:ss')
|
|
end_time = system.date.format(end_time, 'yyyy-MM-dd HH:mm:ss') if end_time != None else end_time
|
|
user_UTCoffset = session.props.device.timezone.utcOffset
|
|
activityDetails = {'username':user,
|
|
'session_id':session_id,
|
|
'site': site,
|
|
'start_time': start_time,
|
|
'end_time':end_time,
|
|
'user_UTCoffset': user_UTCoffset,
|
|
'resource_type': resource_type,
|
|
'resource': resource,
|
|
'current_page': current_page}
|
|
return activityDetails
|
|
|
|
def logActivity(session, resource_type, resource, current_page, start_time, end_time = None):
|
|
activityDetails = createActivityDetails(session, resource_type, resource, current_page, start_time, end_time)
|
|
user = session.props.auth.user.userName
|
|
opener = openSession()
|
|
params = activityDetails
|
|
payload = json.dumps(params)
|
|
method = 'POST'
|
|
# in the headers the Ignition session username (session.props.auth.user.userName) must be supplied as 'X-Ignition-User'
|
|
headers = {
|
|
'Content-type': 'application/json',
|
|
'X-Ignition-User': user
|
|
}
|
|
req = Request(url=ENDPOINT, method=method, data=payload, headers=headers)
|
|
# open the request and process the read
|
|
try:
|
|
resp = opener(req)
|
|
response = json.loads(resp.read())
|
|
error = None
|
|
print pformat(response)
|
|
except HTTPError, e:
|
|
error = str(e)
|
|
response = None
|
|
print error
|
|
LOGGER.info(error)
|
|
return {'error': error, 'response':response }
|
|
|
|
def callLogger(self, resource_type, resource = None, current_page= None):
|
|
""" self is reference to the view. So if calling from shutdown script on the view, pass self.
|
|
If calling from a component, pass self.view"""
|
|
if self.session.custom.enable_activity_logging:
|
|
if self.session.props.device.type != 'designer':
|
|
end_time = system.date.now() if resource_type == 'page' else None
|
|
start_time = self.custom.activityLogger.start_time
|
|
pageid = self.custom.activityLogger.pageid
|
|
resource = pageid if resource == None else resource
|
|
current_page = pageid if current_page == None else current_page
|
|
logActivity(self.session, resource_type, resource, current_page, start_time, end_time)
|
|
|