def generateSysMessagesZipFile(emailAddress, dumpFileNamePrefix, sensorId,
                               sessionId):
    dumpFileName = sessionId + "/" + dumpFileNamePrefix + ".txt"
    zipFileName = sessionId + "/" + dumpFileNamePrefix + ".zip"
    dirname = util.getPath(STATIC_GENERATED_FILE_LOCATION + sessionId)
    if not os.path.exists(dirname):
        os.makedirs(dirname)
    dumpFilePath = util.getPath(STATIC_GENERATED_FILE_LOCATION) + dumpFileName
    zipFilePath = util.getPath(STATIC_GENERATED_FILE_LOCATION) + zipFileName
    if os.path.exists(dumpFilePath):
        os.remove(dumpFilePath)
    if os.path.exists(zipFilePath):
        os.remove(zipFilePath)
    systemMessages = DbCollections.getSystemMessages().find(
        {SENSOR_ID: sensorId})
    if systemMessages is None:
        util.debugPrint("generateZipFileForDownload: No system info found")
        return
    dumpFile = open(dumpFilePath, "a")
    zipFile = zipfile.ZipFile(zipFilePath, mode="w")
    try:
        for systemMessage in systemMessages:
            data = msgutils.getCalData(systemMessage)
            del systemMessage["_id"]
            if CAL in systemMessage and DATA_KEY in systemMessage[CAL]:
                del systemMessage[CAL][DATA_KEY]
            systemMessage[DATA_TYPE] = ASCII
            systemMessageString = json.dumps(systemMessage,
                                             sort_keys=False,
                                             indent=4) + "\n"
            length = len(systemMessageString)
            dumpFile.write(str(length))
            dumpFile.write("\n")
            dumpFile.write(systemMessageString)
            if data is not None:
                dataString = str(data)
                dumpFile.write(dataString)
                dumpFile.write("\n")
        zipFile.write(dumpFilePath,
                      arcname=dumpFileNamePrefix + ".txt",
                      compress_type=zipfile.ZIP_DEFLATED)
        zipFile.close()
        session = SessionLock.getSession(sessionId)
        if session is None:
            os.remove(dumpFilePath)
            os.remove(zipFilePath)
            return
        url = Config.getGeneratedDataPath() + "/" + zipFileName
        watchForFileAndSendMail(emailAddress, url, zipFileName)
    except:
        print "Unexpected error:", sys.exc_info()[0]
        print sys.exc_info()
        traceback.print_exc()
    finally:
        os.remove(dumpFilePath)
        zipFile.close()
def generateSysMessagesZipFileForDownload(sensorId, sessionId):
    util.debugPrint("generateSysMessagesZipFileForDownload")
    systemMessage = DbCollections.getSystemMessages().find_one(
        {SENSOR_ID: sensorId})
    if systemMessage is None:
        return {"status": "NOK", "ErrorMessage": "No data found"}
    else:
        emailAddress = SessionLock.getSession(sessionId)[USER_NAME]
        dumpFilePrefix = "dump-sysmessages-" + sensorId
        zipFileName = sessionId + "/" + dumpFilePrefix + ".zip"
        t = threading.Thread(target=generateSysMessagesZipFile,
                             args=(emailAddress, dumpFilePrefix, sensorId,
                                   sessionId))
        t.daemon = True
        t.start()
        url = Config.getGeneratedDataPath() + "/" + zipFileName
        # generateZipFile(sensorId,startTime,days,minFreq,maxFreq,dumpFileNamePrefix,sessionId)
        return {STATUS: "OK", "dump": zipFileName, URL: url}