diff --git a/constants/constants.go b/constants/constants.go index 3f31cfb3..6080a474 100644 --- a/constants/constants.go +++ b/constants/constants.go @@ -5,136 +5,154 @@ import ( ) const ( - AccessConsortia = "consortia" - AccessInstitution = "institution" - AccessRestricted = "restricted" - ActionApproveDelete = "ApproveDelete" - ActionCreate = "Create" - ActionDelete = "Delete" - ActionFinishBulkDelete = "FinishBulkDelete" - ActionFixityCheck = "Fixity Check" - ActionRestoreFile = "Restore File" - ActionGlacierRestore = "Glacier Restore" - ActionIngest = "Ingest" - ActionRead = "Read" - ActionRequestDelete = "RequestDelete" - ActionRestoreObject = "Restore Object" - ActionUpdate = "Update" - AlertDeletionCancelled = "Deletion Cancelled" - AlertDeletionCompleted = "Deletion Completed" - AlertDeletionConfirmed = "Deletion Confirmed" - AlertDeletionRequested = "Deletion Requested" - AlertFailedFixity = "Failed Fixity Check" - AlertPasswordChanged = "Password Changed" - AlertPasswordReset = "Password Reset" - AlertRestorationCompleted = "Restoration Completed" - AlertStalledItems = "Stalled Work Items" - AlertWelcome = "Welcome New User" - AlgMd5 = "md5" - AlgSha1 = "sha1" - AlgSha256 = "sha256" - AlgSha512 = "sha512" - APIUserHeader = "X-Pharos-API-User" - APIKeyHeader = "X-Pharos-API-Key" - APIPrefixAdmin = "/admin-api/" - APIPrefixMember = "/member-api/" - APTrustOpsEmail = "ops@aptrust.org" - BTRProfileIdentifier = "https://github.com/dpscollaborative/btr_bagit_profile/releases/download/1.0/btr-bagit-profile.json" - CSRFCookieName = "csrf_token" - CSRFHeaderName = "X-CSRF-Token" - CSRFTokenName = "csrf_token" - DefaultProfileIdentifier = "https://raw.githubusercontent.com/APTrust/preservation-services/master/profiles/aptrust-v2.2.json" - EmailServiceSES = "SES" - EmailServiceSMTP = "SMTP" - EventAccessAssignment = "access assignment" - EventCapture = "capture" - EventCompression = "compression" - EventCreation = "creation" - EventDeaccession = "deaccession" - EventDecompression = "decompression" - EventDecryption = "decryption" - EventDeletion = "deletion" - EventDigestCalculation = "message digest calculation" - EventFixityCheck = "fixity check" - EventIdentifierAssignment = "identifier assignment" - EventIngestion = "ingestion" - EventMigration = "migration" - EventNormalization = "normalization" - EventReplication = "replication" - EventSignatureValidation = "digital signature validation" - EventValidation = "validation" - EventVirusCheck = "virus check" - IngestPreFetch = "ingest01_prefetch" - IngestValidation = "ingest02_bag_validation" - IngestReingestCheck = "ingest03_reingest_check" - IngestStaging = "ingest04_staging" - IngestFormatIdentification = "ingest05_format_identification" - IngestStorage = "ingest06_storage" - IngestStorageValidation = "ingest07_storage_validation" - IngestRecord = "ingest08_record" - IngestCleanup = "ingest09_cleanup" - InstTypeMember = "MemberInstitution" - InstTypeSubscriber = "SubscriptionInstitution" - MetaFixityAlertsLastRun = "fixity alerts last run" - MetaSpotTestsRunning = "spot restore is running" - MetaSpotTestsLastRun = "spot restore last run" - OutcomeFailure = "Failure" - OutcomeSuccess = "Success" - RoleInstAdmin = "institutional_admin" - RoleInstUser = "institutional_user" - RoleNone = "none" - RoleSysAdmin = "admin" - SecondFactorAuthy = "Authy" - SecondFactorBackupCode = "Backup Code" - SecondFactorSMS = "SMS" - StageAvailableInS3 = "Available in S3" - StageCleanup = "Cleanup" - StageCopyToStaging = "Copy To Staging" - StageFetch = "Fetch" - StageFormatIdentification = "Format Identification" - StagePackage = "Package" - StageReceive = "Receive" - StageRecord = "Record" - StageReingestCheck = "Reingest Check" - StageRequested = "Requested" - StageResolve = "Resolve" - StageRestoring = "Restoring" - StageStorageValidation = "Storage Validation" - StageStore = "Store" - StageUnpack = "Unpack" - StageValidate = "Validate" - StateActive = "A" - StateDeleted = "D" - StatusCancelled = "Cancelled" - StatusFailed = "Failed" - StatusPending = "Pending" - StatusStarted = "Started" - StatusSuccess = "Success" - StatusSuspended = "Suspended" - StorageOptionGlacierDeepOH = "Glacier-Deep-OH" - StorageOptionGlacierDeepOR = "Glacier-Deep-OR" - StorageOptionGlacierDeepVA = "Glacier-Deep-VA" - StorageOptionGlacierOH = "Glacier-OH" - StorageOptionGlacierOR = "Glacier-OR" - StorageOptionGlacierVA = "Glacier-VA" - StorageOptionStandard = "Standard" - StorageOptionWasabiOR = "Wasabi-OR" - StorageOptionWasabiTX = "Wasabi-TX" - StorageOptionWasabiVA = "Wasabi-VA" - SystemUser = "system@aptrust.org" - TopicDelete = "delete_item" - TopicE2EDelete = "e2e_deletion_post_test" - TopicE2EFixity = "e2e_fixity_post_test" - TopicE2EIngest = "e2e_ingest_post_test" - TopicE2EReingest = "e2e_reingest_post_test" - TopicE2ERestore = "e2e_restoration_post_test" - TopicFileRestore = "restore_file" - TopicFixity = "fixity_check" - TopicGlacierRestore = "restore_glacier" - TopicObjectRestore = "restore_object" - TwoFactorAuthy = "onetouch" - TwoFactorNone = "none" - TwoFactorSMS = "sms" + AccessConsortia = "consortia" + AccessInstitution = "institution" + AccessRestricted = "restricted" + ActionApproveDelete = "ApproveDelete" + ActionCreate = "Create" + ActionDelete = "Delete" + ActionFinishBulkDelete = "FinishBulkDelete" + ActionFixityCheck = "Fixity Check" + ActionRestoreFile = "Restore File" + ActionGlacierRestore = "Glacier Restore" + ActionIngest = "Ingest" + ActionRead = "Read" + ActionRequestDelete = "RequestDelete" + ActionRestoreObject = "Restore Object" + ActionUpdate = "Update" + AlertDeletionCancelled = "Deletion Cancelled" + AlertDeletionCompleted = "Deletion Completed" + AlertDeletionConfirmed = "Deletion Confirmed" + AlertDeletionRequested = "Deletion Requested" + AlertFailedFixity = "Failed Fixity Check" + AlertPasswordChanged = "Password Changed" + AlertPasswordReset = "Password Reset" + AlertRestorationCompleted = "Restoration Completed" + AlertStalledItems = "Stalled Work Items" + AlertWelcome = "Welcome New User" + AlgMd5 = "md5" + AlgSha1 = "sha1" + AlgSha256 = "sha256" + AlgSha512 = "sha512" + APIUserHeader = "X-Pharos-API-User" + APIKeyHeader = "X-Pharos-API-Key" + APIPrefixAdmin = "/admin-api/" + APIPrefixMember = "/member-api/" + APTrustOpsEmail = "ops@aptrust.org" + BTRProfileIdentifier = "https://github.com/dpscollaborative/btr_bagit_profile/releases/download/1.0/btr-bagit-profile.json" + CSRFCookieName = "csrf_token" + CSRFHeaderName = "X-CSRF-Token" + CSRFTokenName = "csrf_token" + DefaultProfileIdentifier = "https://raw.githubusercontent.com/APTrust/preservation-services/master/profiles/aptrust-v2.2.json" + EmailServiceSES = "SES" + EmailServiceSMTP = "SMTP" + EventAccessAssignment = 1 // "access assignment" + EventCapture = 4 // "capture" + EventCompression = 6 //"compression" + EventCreation = 7 //"creation" + EventDeaccession = 8 //"deaccession" + EventDecompression = 9 //"decompression" + EventDecryption = 10 //"decryption" + EventDeletion = 11 //"deletion" + EventDigestCalculation = 33 //"message digest calculation" + EventFixityCheck = 21 //"fixity check" + EventIdentifierAssignment = 24 //"identifier assignment" + EventIngestion = 29 //"ingestion" + EventMigration = 36 //"migration" + EventNormalization = 38 //"normalization" + EventReplication = 47 //"replication" + EventSignatureValidation = 13 //"digital signature validation" + EventValidation = 51 //"validation" + EventVirusCheck = 52 //"virus check" + EventAccessAssignmentString = "access assignment" + EventCaptureString = "capture" + EventCompressionString = "compression" + EventCreationString = "creation" + EventDeaccessionString = "deaccession" + EventDecompressionString = "decompression" + EventDecryptionString = "decryption" + EventDeletionString = "deletion" + EventDigestCalculationString = "message digest calculation" + EventFixityCheckString = "fixity check" + EventIdentifierAssignmentString = "identifier assignment" + EventIngestionString = "ingestion" + EventMigrationString = "migration" + EventNormalizationString = "normalization" + EventReplicationString = "replication" + EventSignatureValidationString = "digital signature validation" + EventValidationString = "validation" + EventVirusCheckString = "virus check" + IngestPreFetch = "ingest01_prefetch" + IngestValidation = "ingest02_bag_validation" + IngestReingestCheck = "ingest03_reingest_check" + IngestStaging = "ingest04_staging" + IngestFormatIdentification = "ingest05_format_identification" + IngestStorage = "ingest06_storage" + IngestStorageValidation = "ingest07_storage_validation" + IngestRecord = "ingest08_record" + IngestCleanup = "ingest09_cleanup" + InstTypeMember = "MemberInstitution" + InstTypeSubscriber = "SubscriptionInstitution" + MetaFixityAlertsLastRun = "fixity alerts last run" + MetaSpotTestsRunning = "spot restore is running" + MetaSpotTestsLastRun = "spot restore last run" + OutcomeFailure = "Failure" + OutcomeSuccess = "Success" + RoleInstAdmin = "institutional_admin" + RoleInstUser = "institutional_user" + RoleNone = "none" + RoleSysAdmin = "admin" + SecondFactorAuthy = "Authy" + SecondFactorBackupCode = "Backup Code" + SecondFactorSMS = "SMS" + StageAvailableInS3 = "Available in S3" + StageCleanup = "Cleanup" + StageCopyToStaging = "Copy To Staging" + StageFetch = "Fetch" + StageFormatIdentification = "Format Identification" + StagePackage = "Package" + StageReceive = "Receive" + StageRecord = "Record" + StageReingestCheck = "Reingest Check" + StageRequested = "Requested" + StageResolve = "Resolve" + StageRestoring = "Restoring" + StageStorageValidation = "Storage Validation" + StageStore = "Store" + StageUnpack = "Unpack" + StageValidate = "Validate" + StateActive = "A" + StateDeleted = "D" + StatusCancelled = "Cancelled" + StatusFailed = "Failed" + StatusPending = "Pending" + StatusStarted = "Started" + StatusSuccess = "Success" + StatusSuspended = "Suspended" + StorageOptionGlacierDeepOH = "Glacier-Deep-OH" + StorageOptionGlacierDeepOR = "Glacier-Deep-OR" + StorageOptionGlacierDeepVA = "Glacier-Deep-VA" + StorageOptionGlacierOH = "Glacier-OH" + StorageOptionGlacierOR = "Glacier-OR" + StorageOptionGlacierVA = "Glacier-VA" + StorageOptionStandard = "Standard" + StorageOptionWasabiOR = "Wasabi-OR" + StorageOptionWasabiTX = "Wasabi-TX" + StorageOptionWasabiVA = "Wasabi-VA" + SystemUser = "system@aptrust.org" + TopicDelete = "delete_item" + TopicE2EDelete = "e2e_deletion_post_test" + TopicE2EFixity = "e2e_fixity_post_test" + TopicE2EIngest = "e2e_ingest_post_test" + TopicE2EReingest = "e2e_reingest_post_test" + TopicE2ERestore = "e2e_restoration_post_test" + TopicFileRestore = "restore_file" + TopicFixity = "fixity_check" + TopicGlacierRestore = "restore_glacier" + TopicObjectRestore = "restore_object" + TwoFactorAuthy = "onetouch" + TwoFactorNone = "none" + TwoFactorSMS = "sms" ) var AccessSettings = []string{ @@ -179,7 +197,7 @@ var EventOutcomes = []string{ OutcomeSuccess, } -var EventTypes = []string{ +var EventTypes = []int{ EventAccessAssignment, EventCreation, EventDeletion, @@ -191,6 +209,18 @@ var EventTypes = []string{ EventValidation, } +var EventTypesString = []string{ + EventAccessAssignmentString, + EventCreationString, + EventDeletionString, + EventDigestCalculationString, + EventFixityCheckString, + EventIdentifierAssignmentString, + EventIngestionString, + EventReplicationString, + EventValidationString, +} + var GlacierOnlyOptions = []string{ StorageOptionGlacierDeepOH, StorageOptionGlacierDeepOR, diff --git a/db/fixtures/premis_events.csv b/db/fixtures/premis_events.csv index 073af6ba..1d1281ff 100644 --- a/db/fixtures/premis_events.csv +++ b/db/fixtures/premis_events.csv @@ -1,55 +1,55 @@ -"id","identifier","event_type","date_time","outcome_detail","detail","outcome_information","object","agent","intellectual_object_id","generic_file_id","created_at","updated_at","outcome","institution_id","old_uuid" -1,a966ca54-ee5b-4606-81bd-7653dd5f3a63,ingestion,"2016-08-26 18:47:20","7ed09b2efa794ce5a19507c504119aaa",Copy completed to S3,Put using md5 checksum,APTrust Go Exchange + Amazon S3 client,https://github.com/APTrust/exchange,5,14,2016-08-26 18:47:20,2016-08-26 18:47:20,Success,3, -2,"6e9e665a-4f7e-41f4-9594-d511f9fc1edf",ingestion,"2016-08-26 18:47:20","9ebb063d40b8444faad321c233f2d0ec",Copy completed to S3,Put using md5 checksum,APTrust Go Exchange + Amazon S3 client,https://github.com/APTrust/exchange,1,3,2016-08-26 18:47:20,2016-08-26 18:47:20,Success,2, -3,"65417f8d-1b3a-4669-88c6-3222e69f71f2",ingestion,"2016-08-26 18:47:20",e02639b4a29e40fb9b103dfddb5be0fa,Copy completed to S3,Put using md5 checksum,APTrust Go Exchange + Amazon S3 client,https://github.com/APTrust/exchange,2,6,2016-08-26 18:47:20,2016-08-26 18:47:20,Success,2, -4,"94057d0d-3707-4c9e-96f4-8128e35532a2",ingestion,"2016-08-26 18:47:20",fddd9c6450464f58be44d68388ecdd88,Copy completed to S3,Put using md5 checksum,APTrust Go Exchange + Amazon S3 client,https://github.com/APTrust/exchange,1,1,2016-08-26 18:47:20,2016-08-26 18:47:20,Success,2, -5,e4894350-ba38-4132-ba6e-f495c5171659,ingestion,"2016-08-26 18:47:20","909ec146fa6746469ea9e32dd96c0900",Copy completed to S3,Put using md5 checksum,APTrust Go Exchange + Amazon S3 client,https://github.com/APTrust/exchange,3,8,2016-08-26 18:47:20,2016-08-26 18:47:20,Success,2, -6,a39421b2-b535-4616-899d-f0a84a9cede2,ingestion,"2016-08-26 18:47:20",f9aa65db52474a6f8605626173e90a72,Copy completed to S3,Put using md5 checksum,APTrust Go Exchange + Amazon S3 client,https://github.com/APTrust/exchange,6,20,2016-08-26 18:47:20,2016-08-26 18:47:20,Success,3, -7,"35bb8181-6170-44e4-9e65-e118acfb348e",ingestion,"2016-08-26 18:47:20","7db0290ddf224a3f97ecf10d2e1f9b63",Copy completed to S3,Put using md5 checksum,APTrust Go Exchange + Amazon S3 client,https://github.com/APTrust/exchange,3,17,2016-08-26 18:47:20,2016-08-26 18:47:20,Success,2, -8,f76a2609-2989-4940-9dfe-ef4e3c33a27e,ingestion,"2016-08-26 18:47:20","190666c5249a472b93f9ccab35b8a746",Copy completed to S3,Put using md5 checksum,APTrust Go Exchange + Amazon S3 client,https://github.com/APTrust/exchange,5,15,2016-08-26 18:47:20,2016-08-26 18:47:20,Success,3, -9,f920af16-341a-47c5-99a0-e98b8d2f98a9,ingestion,"2016-08-26 18:47:20","82333bf817e1426a9cb96599e1273740",Copy completed to S3,Put using md5 checksum,APTrust Go Exchange + Amazon S3 client,https://github.com/APTrust/exchange,1,2,2016-08-26 18:47:20,2016-08-26 18:47:20,Success,2, -10,"15cc5b59-e32c-45bd-95a9-fbb3557e95ea",ingestion,"2016-08-26 18:47:20","373f30ba77784ff1b01a579ee79adcfe",Copy completed to S3,Put using md5 checksum,APTrust Go Exchange + Amazon S3 client,https://github.com/APTrust/exchange,6,18,2016-08-26 18:47:20,2016-08-26 18:47:20,Success,3, -11,d1dd9047-d25c-4ba3-adc4-e17914eda1e9,ingestion,"2016-08-26 18:47:20","12b0fcd863b443cd9e06d1299c81df9e",Copy completed to S3,Put using md5 checksum,APTrust Go Exchange + Amazon S3 client,https://github.com/APTrust/exchange,1,3,2016-08-26 18:47:20,2016-08-26 18:47:20,Success,2, -12,"56220d8b-978f-4a66-bc2e-2af4cdda7b3c",ingestion,"2016-08-26 18:47:20","0c4f5a96a5cd48348b2a5a568770655c",Copy completed to S3,Put using md5 checksum,APTrust Go Exchange + Amazon S3 client,https://github.com/APTrust/exchange,2,4,2016-08-26 18:47:20,2016-08-26 18:47:20,Success,2, -13,aafcc00a-93aa-434a-b1fe-7290fb1ffa2c,ingestion,"2016-08-26 18:47:20","7f6f7f82a59141d2afa2baadcf5f2327",Copy completed to S3,Put using md5 checksum,APTrust Go Exchange + Amazon S3 client,https://github.com/APTrust/exchange,1,1,2016-08-26 18:47:20,2016-08-26 18:47:20,Success,2, -14,"529ddb2e-62fd-422e-863a-e3f3c9af2622",ingestion,"2016-08-26 18:47:20",a9001c58219640c68fb3fea9b6745b0c,Copy completed to S3,Put using md5 checksum,APTrust Go Exchange + Amazon S3 client,https://github.com/APTrust/exchange,5,16,2016-08-26 18:47:20,2016-08-26 18:47:20,Success,3, -15,be86ea36-4642-4cf7-a29a-80a860ebea82,ingestion,"2016-08-26 18:47:20",f5f914c4ea23455a8fd5add0e2519586,Copy completed to S3,Put using md5 checksum,APTrust Go Exchange + Amazon S3 client,https://github.com/APTrust/exchange,2,5,2016-08-26 18:47:20,2016-08-26 18:47:20,Success,2, -16,"21380d8b-2411-46dc-9124-012d601e959b",ingestion,"2016-08-26 18:47:20","353f1c6f607545d7bbbea5010f88cbfb",Copy completed to S3,Put using md5 checksum,APTrust Go Exchange + Amazon S3 client,https://github.com/APTrust/exchange,1,2,2016-08-26 18:47:20,2016-08-26 18:47:20,Success,2, -17,cb8d4236-99b0-437f-b662-e6324c2f85eb,ingestion,"2016-08-26 18:47:20","4d8a927e923745b5b389511aaa366aad",Copy completed to S3,Put using md5 checksum,APTrust Go Exchange + Amazon S3 client,https://github.com/APTrust/exchange,3,10,2016-08-26 18:47:20,2016-08-26 18:47:20,Success,2, -18,ef916505-cd35-4e3c-a2b8-0711ddc8a199,ingestion,"2016-08-26 18:47:20",b9bf1633a8dd4edbb7eb9448c6bba56f,Copy completed to S3,Put using md5 checksum,APTrust Go Exchange + Amazon S3 client,https://github.com/APTrust/exchange,6,17,2016-08-26 18:47:20,2016-08-26 18:47:20,Success,3, -19,"08692a43-9581-454b-bd32-512bd7529967",message digest calculation,"2016-08-26 18:53:32","923220e7598c443ebe099beebd88b16d",Calculated new fixity value,New fixididdly,SHA-256 thingy,https://github.com/APTrust/exchange,5,14,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,3, -20,"3bd67ede-0fca-430a-9bb3-652c0a95b471",message digest calculation,"2016-08-26 18:53:32",c20df8e2b7f74e13a1640caa568eecc5,Calculated new fixity value,New fixididdly,SHA-256 thingy,https://github.com/APTrust/exchange,1,3,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,2, -21,"64b26bea-040c-4dc8-a361-642c91d4d5b9",message digest calculation,"2016-08-26 18:53:32","8565c10610124518acd91a2136cde152",Calculated new fixity value,New fixididdly,SHA-256 thingy,https://github.com/APTrust/exchange,2,6,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,2, -22,feee056d-ffc9-4931-8eef-8eb8dc9aa149,message digest calculation,"2016-08-26 18:53:32",ec35a0acf6d64d388fef40ec72c130b6,Calculated new fixity value,New fixididdly,SHA-256 thingy,https://github.com/APTrust/exchange,1,1,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,2, -23,"616abcd6-484e-4a7f-b494-19844044f73d",message digest calculation,"2016-08-26 18:53:32","8d3b5bd9fb7a47e6896a7c21781f8971",Calculated new fixity value,New fixididdly,SHA-256 thingy,https://github.com/APTrust/exchange,3,8,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,2, -24,"37031b0f-dbdd-4c3e-a1c5-9475261025bd",message digest calculation,"2016-08-26 18:53:32","188d817b338a4386877b5d15ff03425e",Calculated new fixity value,New fixididdly,SHA-256 thingy,https://github.com/APTrust/exchange,6,20,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,3, -25,c9ee7bd4-6450-40f1-b604-548cebacfc2d,message digest calculation,"2016-08-26 18:53:32",cfc3db92bac24d57a12d1f87857ed9de,Calculated new fixity value,New fixididdly,SHA-256 thingy,https://github.com/APTrust/exchange,3,7,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,2, -26,ccd738f7-c6d2-4ade-a00e-4acc064e9be9,message digest calculation,"2016-08-26 18:53:32",aa8f8821ff2245689ffbf90a5b2e73cb,Calculated new fixity value,New fixididdly,SHA-256 thingy,https://github.com/APTrust/exchange,5,15,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,3, -27,"5d7e3e60-32c0-46a5-a18e-88476ded5bbb",message digest calculation,"2016-08-26 18:53:32","1a126395da6447c0a7594e8a237cb57b",Calculated new fixity value,New fixididdly,SHA-256 thingy,https://github.com/APTrust/exchange,1,2,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,2, -28,"43d1009f-4319-45ba-aa04-11ec97ce55a9",message digest calculation,"2016-08-26 18:53:32",cda94f5accd74136b55ea6e7c244d245,Calculated new fixity value,New fixididdly,SHA-256 thingy,https://github.com/APTrust/exchange,6,18,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,3, -29,"549a9b7f-3a61-42b3-8af4-13d01ef13f41",message digest calculation,"2016-08-26 18:53:32","99e848dc5e7b4370a1157368ae18cbe1",Calculated new fixity value,New fixididdly,SHA-256 thingy,https://github.com/APTrust/exchange,1,3,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,2, -30,"63c64609-3359-4598-9c83-d61fea7f4874",message digest calculation,"2016-08-26 18:53:32",e2aa64a9309649908758729d7517caa8,Calculated new fixity value,New fixididdly,SHA-256 thingy,https://github.com/APTrust/exchange,2,4,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,2, -31,e2b0e887-d54d-4fd2-b4bc-71ea9311afd5,message digest calculation,"2016-08-26 18:53:32","12e6a5fc3c144b31bcf1d781912beb00",Calculated new fixity value,New fixididdly,SHA-256 thingy,https://github.com/APTrust/exchange,1,1,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,2, -32,"21776e71-d010-4f93-aed6-e989de8a9119",message digest calculation,"2016-08-26 18:53:32","7c832634ab7c4297b792fa9916024b2a",Calculated new fixity value,New fixididdly,SHA-256 thingy,https://github.com/APTrust/exchange,5,16,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,3, -33,daed489c-038e-4f85-8c48-77f69e61dce7,message digest calculation,"2016-08-26 18:53:32","72e4913c5e66403bb5fc1b24a828a647",Calculated new fixity value,New fixididdly,SHA-256 thingy,https://github.com/APTrust/exchange,2,5,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,2, -34,"8336060f-958c-443b-b7e6-458b209ad122",message digest calculation,"2016-08-26 18:53:32","268f52e6bb404a6b9304452ebb0eb336",Calculated new fixity value,New fixididdly,SHA-256 thingy,https://github.com/APTrust/exchange,1,2,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,2, -35,"274e230a-dc6b-48a1-a96c-709e5728632b",message digest calculation,"2016-08-26 18:53:32",b8a33eb112254f2ab37f325ab91f143d,Calculated new fixity value,New fixididdly,SHA-256 thingy,https://github.com/APTrust/exchange,3,10,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,2, -36,e8dce66a-f4a8-47a0-916e-f9847c76b59b,message digest calculation,"2016-08-26 18:53:32",a3d5210e455f4873a0520299b43aa8d6,Calculated new fixity value,New fixididdly,SHA-256 thingy,https://github.com/APTrust/exchange,6,17,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,3, -37,"929e3293-15e8-43cf-aa7c-92d3e6b5f497",ingestion,"2016-08-26 18:53:32",Object ingested successfully,We got the object into the repository,Object was ingested,Exchange ingest code,https://github.com/APTrust/exchange,1,,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,2, -38,ac6a2b51-a2f4-4380-a3ca-8fa1d45ed6a6,ingestion,"2016-08-26 18:53:32",Object ingested successfully,We got the object into the repository,Object was ingested,Exchange ingest code,https://github.com/APTrust/exchange,2,,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,2, -39,"20dd5b2c-64bf-4561-8ce7-e62614845cfe",ingestion,"2016-08-26 18:53:32",Object ingested successfully,We got the object into the repository,Object was ingested,Exchange ingest code,https://github.com/APTrust/exchange,3,,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,2, -40,ef64ad2e-d193-4c26-9e85-816be063cfcb,ingestion,"2016-08-26 18:53:32",Object ingested successfully,We got the object into the repository,Object was ingested,Exchange ingest code,https://github.com/APTrust/exchange,4,,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,3, -41,"57e7150d-3292-412f-a82b-da5dbd6a3d0a",ingestion,"2016-08-26 18:53:32",Object ingested successfully,We got the object into the repository,Object was ingested,Exchange ingest code,https://github.com/APTrust/exchange,5,,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,3, -42,d7e16041-8887-4739-af04-9d35e5cab4dc,ingestion,"2016-08-26 18:53:32",Object ingested successfully,We got the object into the repository,Object was ingested,Exchange ingest code,https://github.com/APTrust/exchange,6,,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,3, -43,11e16041-8887-4739-af04-9d35e5cab4dc,ingestion,"2016-08-27 18:53:32",Object ingested successfully,We got the object into the repository,Object was ingested,Exchange ingest code,https://github.com/APTrust/exchange,6,,2016-08-27 18:53:32,2016-08-27 18:53:32,Success,3, -44,22e16041-8887-4739-af04-9d35e5cab4dc,ingestion,"2016-08-28 18:53:32",Object ingested successfully,We got the object into the repository,Object was ingested,Exchange ingest code,https://github.com/APTrust/exchange,6,,2016-08-28 18:53:32,2016-08-28 18:53:32,Success,3, -45,33e16041-8887-4739-af04-9d35e5cab4dc,ingestion,"2016-08-29 18:53:32",Object ingested successfully,We got the object into the repository,Object was ingested,Exchange ingest code,https://github.com/APTrust/exchange,6,,2016-08-29 18:53:32,2016-08-29 18:53:32,Success,3, -46,44e16041-8887-4739-af04-9d35e5cab4dc,ingestion,"2016-08-30 18:53:32",Object ingested successfully,We got the object into the repository,Object was ingested,Exchange ingest code,https://github.com/APTrust/exchange,6,,2016-08-30 18:53:32,2016-08-30 18:53:32,Success,3, -47,55e16041-8887-4739-af04-9d35e5cab4dc,ingestion,"2016-08-31 18:53:32",Object ingested successfully,We got the object into the repository,Object was ingested,Exchange ingest code,https://github.com/APTrust/exchange,6,,2016-08-31 18:53:32,2016-08-31 18:53:32,Success,3, -48,66e16041-8887-4739-af04-9d35e5cab4dc,ingestion,"2016-09-01 18:53:32",Object ingested successfully,We got the object into the repository,Object was ingested,Exchange ingest code,https://github.com/APTrust/exchange,6,,2016-09-01 18:53:32,2016-09-01 18:53:32,Success,3, -49,77e16041-8887-4739-af04-9d35e5cab4dc,ingestion,"2016-09-02 18:53:32",Object ingested successfully,We got the object into the repository,Object was ingested,Exchange ingest code,https://github.com/APTrust/exchange,6,,2016-09-02 18:53:32,2016-09-02 18:53:32,Success,3, -50,88e16041-8887-4739-af04-9d35e5cab4dc,ingestion,"2016-09-03 18:53:32",Object ingested successfully,We got the object into the repository,Object was ingested,Exchange ingest code,https://github.com/APTrust/exchange,6,,2016-09-03 18:53:32,2016-09-03 18:53:32,Success,3, -51,99e16041-8887-4739-af04-9d35e5cab4dc,ingestion,"2016-09-04 18:53:32",Object ingested successfully,We got the object into the repository,Object was ingested,Exchange ingest code,https://github.com/APTrust/exchange,6,,2016-09-04 18:53:32,2016-09-04 18:53:32,Success,3, -52,aae16041-8887-4739-af04-9d35e5cab4dc,ingestion,"2016-09-05 18:53:32",Object ingested successfully,We got the object into the repository,Object was ingested,Exchange ingest code,https://github.com/APTrust/exchange,6,,2016-09-05 18:53:32,2016-09-05 18:53:32,Success,3, -53,bbe16041-8887-4739-af04-9d35e5cab4dc,ingestion,"2016-09-06 18:53:32",Object ingested successfully,We got the object into the repository,Object was ingested,Exchange ingest code,https://github.com/APTrust/exchange,6,,2016-09-06 18:53:32,2016-09-06 18:53:32,Success,3, -54,775af09e-87d1-42be-9fcd-4315c5836099,deletion,"2016-09-30 18:53:32",Object deleted,The dang thing was wiped out,Object was deleted (sorta),Deleterbot code,https://github.com/APTrust/exchange,6,,2016-09-30 18:53:32,2016-09-30 18:53:32,Success,3, +"id","identifier","event_type","date_time","outcome_detail","detail","outcome_information","object","agent","intellectual_object_id","generic_file_id","created_at","updated_at","outcome","institution_id" +1,a966ca54-ee5b-4606-81bd-7653dd5f3a63,29,"2016-08-26 18:47:20","7ed09b2efa794ce5a19507c504119aaa",Copy completed to S3,Put using md5 checksum,APTrust Go Exchange + Amazon S3 client,https://github.com/APTrust/exchange,5,14,2016-08-26 18:47:20,2016-08-26 18:47:20,Success,3 +2,"6e9e665a-4f7e-41f4-9594-d511f9fc1edf",29,"2016-08-26 18:47:20","9ebb063d40b8444faad321c233f2d0ec",Copy completed to S3,Put using md5 checksum,APTrust Go Exchange + Amazon S3 client,https://github.com/APTrust/exchange,1,3,2016-08-26 18:47:20,2016-08-26 18:47:20,Success,2 +3,"65417f8d-1b3a-4669-88c6-3222e69f71f2",29,"2016-08-26 18:47:20",e02639b4a29e40fb9b103dfddb5be0fa,Copy completed to S3,Put using md5 checksum,APTrust Go Exchange + Amazon S3 client,https://github.com/APTrust/exchange,2,6,2016-08-26 18:47:20,2016-08-26 18:47:20,Success,2 +4,"94057d0d-3707-4c9e-96f4-8128e35532a2",29,"2016-08-26 18:47:20",fddd9c6450464f58be44d68388ecdd88,Copy completed to S3,Put using md5 checksum,APTrust Go Exchange + Amazon S3 client,https://github.com/APTrust/exchange,1,1,2016-08-26 18:47:20,2016-08-26 18:47:20,Success,2 +5,e4894350-ba38-4132-ba6e-f495c5171659,29,"2016-08-26 18:47:20","909ec146fa6746469ea9e32dd96c0900",Copy completed to S3,Put using md5 checksum,APTrust Go Exchange + Amazon S3 client,https://github.com/APTrust/exchange,3,8,2016-08-26 18:47:20,2016-08-26 18:47:20,Success,2 +6,a39421b2-b535-4616-899d-f0a84a9cede2,29,"2016-08-26 18:47:20",f9aa65db52474a6f8605626173e90a72,Copy completed to S3,Put using md5 checksum,APTrust Go Exchange + Amazon S3 client,https://github.com/APTrust/exchange,6,20,2016-08-26 18:47:20,2016-08-26 18:47:20,Success,3 +7,"35bb8181-6170-44e4-9e65-e118acfb348e",29,"2016-08-26 18:47:20","7db0290ddf224a3f97ecf10d2e1f9b63",Copy completed to S3,Put using md5 checksum,APTrust Go Exchange + Amazon S3 client,https://github.com/APTrust/exchange,3,17,2016-08-26 18:47:20,2016-08-26 18:47:20,Success,2 +8,f76a2609-2989-4940-9dfe-ef4e3c33a27e,29,"2016-08-26 18:47:20","190666c5249a472b93f9ccab35b8a746",Copy completed to S3,Put using md5 checksum,APTrust Go Exchange + Amazon S3 client,https://github.com/APTrust/exchange,5,15,2016-08-26 18:47:20,2016-08-26 18:47:20,Success,3 +9,f920af16-341a-47c5-99a0-e98b8d2f98a9,29,"2016-08-26 18:47:20","82333bf817e1426a9cb96599e1273740",Copy completed to S3,Put using md5 checksum,APTrust Go Exchange + Amazon S3 client,https://github.com/APTrust/exchange,1,2,2016-08-26 18:47:20,2016-08-26 18:47:20,Success,2 +10,"15cc5b59-e32c-45bd-95a9-fbb3557e95ea",29,"2016-08-26 18:47:20","373f30ba77784ff1b01a579ee79adcfe",Copy completed to S3,Put using md5 checksum,APTrust Go Exchange + Amazon S3 client,https://github.com/APTrust/exchange,6,18,2016-08-26 18:47:20,2016-08-26 18:47:20,Success,3 +11,d1dd9047-d25c-4ba3-adc4-e17914eda1e9,29,"2016-08-26 18:47:20","12b0fcd863b443cd9e06d1299c81df9e",Copy completed to S3,Put using md5 checksum,APTrust Go Exchange + Amazon S3 client,https://github.com/APTrust/exchange,1,3,2016-08-26 18:47:20,2016-08-26 18:47:20,Success,2 +12,"56220d8b-978f-4a66-bc2e-2af4cdda7b3c",29,"2016-08-26 18:47:20","0c4f5a96a5cd48348b2a5a568770655c",Copy completed to S3,Put using md5 checksum,APTrust Go Exchange + Amazon S3 client,https://github.com/APTrust/exchange,2,4,2016-08-26 18:47:20,2016-08-26 18:47:20,Success,2 +13,aafcc00a-93aa-434a-b1fe-7290fb1ffa2c,29,"2016-08-26 18:47:20","7f6f7f82a59141d2afa2baadcf5f2327",Copy completed to S3,Put using md5 checksum,APTrust Go Exchange + Amazon S3 client,https://github.com/APTrust/exchange,1,1,2016-08-26 18:47:20,2016-08-26 18:47:20,Success,2 +14,"529ddb2e-62fd-422e-863a-e3f3c9af2622",29,"2016-08-26 18:47:20",a9001c58219640c68fb3fea9b6745b0c,Copy completed to S3,Put using md5 checksum,APTrust Go Exchange + Amazon S3 client,https://github.com/APTrust/exchange,5,16,2016-08-26 18:47:20,2016-08-26 18:47:20,Success,3 +15,be86ea36-4642-4cf7-a29a-80a860ebea82,29,"2016-08-26 18:47:20",f5f914c4ea23455a8fd5add0e2519586,Copy completed to S3,Put using md5 checksum,APTrust Go Exchange + Amazon S3 client,https://github.com/APTrust/exchange,2,5,2016-08-26 18:47:20,2016-08-26 18:47:20,Success,2 +16,"21380d8b-2411-46dc-9124-012d601e959b",29,"2016-08-26 18:47:20","353f1c6f607545d7bbbea5010f88cbfb",Copy completed to S3,Put using md5 checksum,APTrust Go Exchange + Amazon S3 client,https://github.com/APTrust/exchange,1,2,2016-08-26 18:47:20,2016-08-26 18:47:20,Success,2 +17,cb8d4236-99b0-437f-b662-e6324c2f85eb,29,"2016-08-26 18:47:20","4d8a927e923745b5b389511aaa366aad",Copy completed to S3,Put using md5 checksum,APTrust Go Exchange + Amazon S3 client,https://github.com/APTrust/exchange,3,10,2016-08-26 18:47:20,2016-08-26 18:47:20,Success,2 +18,ef916505-cd35-4e3c-a2b8-0711ddc8a199,29,"2016-08-26 18:47:20",b9bf1633a8dd4edbb7eb9448c6bba56f,Copy completed to S3,Put using md5 checksum,APTrust Go Exchange + Amazon S3 client,https://github.com/APTrust/exchange,6,17,2016-08-26 18:47:20,2016-08-26 18:47:20,Success,3 +19,"08692a43-9581-454b-bd32-512bd7529967",33,"2016-08-26 18:53:32","923220e7598c443ebe099beebd88b16d",Calculated new fixity value,New fixididdly,SHA-256 thingy,https://github.com/APTrust/exchange,5,14,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,3 +20,"3bd67ede-0fca-430a-9bb3-652c0a95b471",33,"2016-08-26 18:53:32",c20df8e2b7f74e13a1640caa568eecc5,Calculated new fixity value,New fixididdly,SHA-256 thingy,https://github.com/APTrust/exchange,1,3,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,2 +21,"64b26bea-040c-4dc8-a361-642c91d4d5b9",33,"2016-08-26 18:53:32","8565c10610124518acd91a2136cde152",Calculated new fixity value,New fixididdly,SHA-256 thingy,https://github.com/APTrust/exchange,2,6,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,2 +22,feee056d-ffc9-4931-8eef-8eb8dc9aa149,33,"2016-08-26 18:53:32",ec35a0acf6d64d388fef40ec72c130b6,Calculated new fixity value,New fixididdly,SHA-256 thingy,https://github.com/APTrust/exchange,1,1,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,2 +23,"616abcd6-484e-4a7f-b494-19844044f73d",33,"2016-08-26 18:53:32","8d3b5bd9fb7a47e6896a7c21781f8971",Calculated new fixity value,New fixididdly,SHA-256 thingy,https://github.com/APTrust/exchange,3,8,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,2 +24,"37031b0f-dbdd-4c3e-a1c5-9475261025bd",33,"2016-08-26 18:53:32","188d817b338a4386877b5d15ff03425e",Calculated new fixity value,New fixididdly,SHA-256 thingy,https://github.com/APTrust/exchange,6,20,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,3 +25,c9ee7bd4-6450-40f1-b604-548cebacfc2d,33,"2016-08-26 18:53:32",cfc3db92bac24d57a12d1f87857ed9de,Calculated new fixity value,New fixididdly,SHA-256 thingy,https://github.com/APTrust/exchange,3,7,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,2 +26,ccd738f7-c6d2-4ade-a00e-4acc064e9be9,33,"2016-08-26 18:53:32",aa8f8821ff2245689ffbf90a5b2e73cb,Calculated new fixity value,New fixididdly,SHA-256 thingy,https://github.com/APTrust/exchange,5,15,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,3 +27,"5d7e3e60-32c0-46a5-a18e-88476ded5bbb",33,"2016-08-26 18:53:32","1a126395da6447c0a7594e8a237cb57b",Calculated new fixity value,New fixididdly,SHA-256 thingy,https://github.com/APTrust/exchange,1,2,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,2 +28,"43d1009f-4319-45ba-aa04-11ec97ce55a9",33,"2016-08-26 18:53:32",cda94f5accd74136b55ea6e7c244d245,Calculated new fixity value,New fixididdly,SHA-256 thingy,https://github.com/APTrust/exchange,6,18,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,3 +29,"549a9b7f-3a61-42b3-8af4-13d01ef13f41",33,"2016-08-26 18:53:32","99e848dc5e7b4370a1157368ae18cbe1",Calculated new fixity value,New fixididdly,SHA-256 thingy,https://github.com/APTrust/exchange,1,3,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,2 +30,"63c64609-3359-4598-9c83-d61fea7f4874",33,"2016-08-26 18:53:32",e2aa64a9309649908758729d7517caa8,Calculated new fixity value,New fixididdly,SHA-256 thingy,https://github.com/APTrust/exchange,2,4,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,2 +31,e2b0e887-d54d-4fd2-b4bc-71ea9311afd5,33,"2016-08-26 18:53:32","12e6a5fc3c144b31bcf1d781912beb00",Calculated new fixity value,New fixididdly,SHA-256 thingy,https://github.com/APTrust/exchange,1,1,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,2 +32,"21776e71-d010-4f93-aed6-e989de8a9119",33,"2016-08-26 18:53:32","7c832634ab7c4297b792fa9916024b2a",Calculated new fixity value,New fixididdly,SHA-256 thingy,https://github.com/APTrust/exchange,5,16,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,3 +33,daed489c-038e-4f85-8c48-77f69e61dce7,33,"2016-08-26 18:53:32","72e4913c5e66403bb5fc1b24a828a647",Calculated new fixity value,New fixididdly,SHA-256 thingy,https://github.com/APTrust/exchange,2,5,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,2 +34,"8336060f-958c-443b-b7e6-458b209ad122",33,"2016-08-26 18:53:32","268f52e6bb404a6b9304452ebb0eb336",Calculated new fixity value,New fixididdly,SHA-256 thingy,https://github.com/APTrust/exchange,1,2,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,2 +35,"274e230a-dc6b-48a1-a96c-709e5728632b",33,"2016-08-26 18:53:32",b8a33eb112254f2ab37f325ab91f143d,Calculated new fixity value,New fixididdly,SHA-256 thingy,https://github.com/APTrust/exchange,3,10,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,2 +36,e8dce66a-f4a8-47a0-916e-f9847c76b59b,33,"2016-08-26 18:53:32",a3d5210e455f4873a0520299b43aa8d6,Calculated new fixity value,New fixididdly,SHA-256 thingy,https://github.com/APTrust/exchange,6,17,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,3 +37,"929e3293-15e8-43cf-aa7c-92d3e6b5f497",29,"2016-08-26 18:53:32",Object ingested successfully,We got the object into the repository,Object was ingested,Exchange ingest code,https://github.com/APTrust/exchange,1,,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,2 +38,ac6a2b51-a2f4-4380-a3ca-8fa1d45ed6a6,29,"2016-08-26 18:53:32",Object ingested successfully,We got the object into the repository,Object was ingested,Exchange ingest code,https://github.com/APTrust/exchange,2,,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,2 +39,"20dd5b2c-64bf-4561-8ce7-e62614845cfe",29,"2016-08-26 18:53:32",Object ingested successfully,We got the object into the repository,Object was ingested,Exchange ingest code,https://github.com/APTrust/exchange,3,,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,2 +40,ef64ad2e-d193-4c26-9e85-816be063cfcb,29,"2016-08-26 18:53:32",Object ingested successfully,We got the object into the repository,Object was ingested,Exchange ingest code,https://github.com/APTrust/exchange,4,,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,3 +41,"57e7150d-3292-412f-a82b-da5dbd6a3d0a",29,"2016-08-26 18:53:32",Object ingested successfully,We got the object into the repository,Object was ingested,Exchange ingest code,https://github.com/APTrust/exchange,5,,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,3 +42,d7e16041-8887-4739-af04-9d35e5cab4dc,29,"2016-08-26 18:53:32",Object ingested successfully,We got the object into the repository,Object was ingested,Exchange ingest code,https://github.com/APTrust/exchange,6,,2016-08-26 18:53:32,2016-08-26 18:53:32,Success,3 +43,11e16041-8887-4739-af04-9d35e5cab4dc,29,"2016-08-27 18:53:32",Object ingested successfully,We got the object into the repository,Object was ingested,Exchange ingest code,https://github.com/APTrust/exchange,6,,2016-08-27 18:53:32,2016-08-27 18:53:32,Success,3 +44,22e16041-8887-4739-af04-9d35e5cab4dc,29,"2016-08-28 18:53:32",Object ingested successfully,We got the object into the repository,Object was ingested,Exchange ingest code,https://github.com/APTrust/exchange,6,,2016-08-28 18:53:32,2016-08-28 18:53:32,Success,3 +45,33e16041-8887-4739-af04-9d35e5cab4dc,29,"2016-08-29 18:53:32",Object ingested successfully,We got the object into the repository,Object was ingested,Exchange ingest code,https://github.com/APTrust/exchange,6,,2016-08-29 18:53:32,2016-08-29 18:53:32,Success,3 +46,44e16041-8887-4739-af04-9d35e5cab4dc,29,"2016-08-30 18:53:32",Object ingested successfully,We got the object into the repository,Object was ingested,Exchange ingest code,https://github.com/APTrust/exchange,6,,2016-08-30 18:53:32,2016-08-30 18:53:32,Success,3 +47,55e16041-8887-4739-af04-9d35e5cab4dc,29,"2016-08-31 18:53:32",Object ingested successfully,We got the object into the repository,Object was ingested,Exchange ingest code,https://github.com/APTrust/exchange,6,,2016-08-31 18:53:32,2016-08-31 18:53:32,Success,3 +48,66e16041-8887-4739-af04-9d35e5cab4dc,29,"2016-09-01 18:53:32",Object ingested successfully,We got the object into the repository,Object was ingested,Exchange ingest code,https://github.com/APTrust/exchange,6,,2016-09-01 18:53:32,2016-09-01 18:53:32,Success,3 +49,77e16041-8887-4739-af04-9d35e5cab4dc,29,"2016-09-02 18:53:32",Object ingested successfully,We got the object into the repository,Object was ingested,Exchange ingest code,https://github.com/APTrust/exchange,6,,2016-09-02 18:53:32,2016-09-02 18:53:32,Success,3 +50,88e16041-8887-4739-af04-9d35e5cab4dc,29,"2016-09-03 18:53:32",Object ingested successfully,We got the object into the repository,Object was ingested,Exchange ingest code,https://github.com/APTrust/exchange,6,,2016-09-03 18:53:32,2016-09-03 18:53:32,Success,3 +51,99e16041-8887-4739-af04-9d35e5cab4dc,29,"2016-09-04 18:53:32",Object ingested successfully,We got the object into the repository,Object was ingested,Exchange ingest code,https://github.com/APTrust/exchange,6,,2016-09-04 18:53:32,2016-09-04 18:53:32,Success,3 +52,aae16041-8887-4739-af04-9d35e5cab4dc,29,"2016-09-05 18:53:32",Object ingested successfully,We got the object into the repository,Object was ingested,Exchange ingest code,https://github.com/APTrust/exchange,6,,2016-09-05 18:53:32,2016-09-05 18:53:32,Success,3 +53,bbe16041-8887-4739-af04-9d35e5cab4dc,29,"2016-09-06 18:53:32",Object ingested successfully,We got the object into the repository,Object was ingested,Exchange ingest code,https://github.com/APTrust/exchange,6,,2016-09-06 18:53:32,2016-09-06 18:53:32,Success,3 +54,775af09e-87d1-42be-9fcd-4315c5836099,11,"2016-09-30 18:53:32",Object deleted,The dang thing was wiped out,Object was deleted (sorta),Deleterbot code,https://github.com/APTrust/exchange,6,,2016-09-30 18:53:32,2016-09-30 18:53:32,Success,3 diff --git a/db/migrations/013_shrink_db_size.sql b/db/migrations/013_shrink_db_size.sql new file mode 100644 index 00000000..507235d9 --- /dev/null +++ b/db/migrations/013_shrink_db_size.sql @@ -0,0 +1,266 @@ +-- 013_shrink_db_size.sql +-- +-- This migration contains several optimizations that will reduce the size of the database. +-- They include: +-- Removing columns that are no longer used +-- Converting certain enumerated string fields to integer and adding lookup tables + +-- Note that we're starting the migration. +insert into schema_migrations ("version", started_at) values ('013_shrink_db_size', now()) +on conflict ("version") do update set started_at = now(); + +-- +-- We need to remove the created_at and updated_at columns from the view first. +DROP VIEW premis_events_view; +CREATE VIEW public.premis_events_view +AS SELECT pe.id, + pe.identifier, + pe.institution_id, + i.name AS institution_name, + pe.intellectual_object_id, + io.identifier AS intellectual_object_identifier, + pe.generic_file_id, + gf.identifier AS generic_file_identifier, + pe.event_type, + pe.date_time, + pe.detail, + pe.outcome, + pe.outcome_detail, + pe.outcome_information, + pe.object, + pe.agent, + pe.created_at, + pe.updated_at + FROM premis_events pe + LEFT JOIN institutions i ON pe.institution_id = i.id + LEFT JOIN intellectual_objects io ON pe.intellectual_object_id = io.id + LEFT JOIN generic_files gf ON pe.generic_file_id = gf.id; + +-- alter table premis_events drop column created_at; -- +-- alter table premis_events drop column updated_at; -- + +alter table premis_events drop column old_uuid; + +-- alter table premis_events event_type; -- + +alter table premis_events add COLUMN event_type_int smallint; + +-- IMPORTANT -- +-- TO DO: If there is a value in the current premis_events table -- +-- for eventType that is NOT a match for any values in this function, -- +-- probably we need to abort and roll back. If it converts to a 0, -- +-- we will lose whatever information was in there. Same for object and agent fields -- +create or replace function convert_event_types() +returns void as $$ +begin + update premis_events + set event_type_int = case event_type + when 'access assignment' then 1 + when 'accession' then 2 + when 'appraisal' then 3 + when 'capture' then 4 + when 'compiling' then 5 + when 'compression' then 6 + when 'creation' then 7 + when 'deaccession' then 8 + when 'decompression' then 9 + when 'decryption' then 10 + when 'deletion' then 11 + when 'digital signature generation' then 12 + when 'digital signature validation' then 13 + when 'displaying' then 14 + when 'dissemination' then 15 + when 'encryption' then 16 + when 'execution' then 17 + when 'exporting' then 18 + when 'extraction' then 19 + when 'filename change' then 20 + when 'fixity check' then 21 + when 'forensic feature analysis' then 22 + when 'format identification' then 23 + when 'identifier assignment' then 24 + when 'imaging' then 25 + when 'information package creation' then 26 + when 'information package merging' then 27 + when 'information package splitting' then 28 + when 'ingestion' then 29 + when 'ingestion end' then 30 + when 'ingestion start' then 31 + when 'interpreting' then 32 + when 'message digest calculation' then 33 + when 'metadata extraction' then 34 + when 'metadata modification' then 35 + when 'migration' then 36 + when 'modification' then 37 + when 'normalization' then 38 + when 'packing' then 39 + when 'policy assignment' then 40 + when 'printing' then 41 + when 'quarantine' then 42 + when 'recovery' then 43 + when 'redaction' then 44 + when 'refreshment' then 45 + when 'rendering' then 46 + when 'replication' then 47 + when 'transfer' then 48 + when 'unpacking' then 49 + when 'unquarantine' then 50 + when 'validation' then 51 + when 'virus check' then 52 + else 0 -- default + end; +end; +$$ language plpgsql; + +select convert_event_types(); + +-- if exists +alter table premis_events drop column event_type; +alter table premis_events rename column event_type_int TO event_type; +-- create table event_type_lookup +-- Most of these, we are not using at the moment +create table if not exists event_type_lookup ( + id int primary key, + event_type varchar not null +); + +insert into event_type_lookup (id, event_type) values +(0, "No Event Type"), +(1, "access assignment"), +(2, "accession"), +(3, "appraisal"), +(4, "capture"), +(5, "compiling"), +(6, "compression"), +(7, "creation"), +(8, "deaccession"), +(9, "decompression"), +(10, "decryption"), +(11, "deletion"), +(12, "digital signature generation"), +(13, "digital signature validation"), +(14, "displaying"), +(15, "dissemination"), +(16, "encryption"), +(17, "execution"), +(18, "exporting"), +(19, "extraction"), +(20, "filename change"), +(21, "fixity check"), +(22, "forensic feature analysis"), +(23, "format identification"), +(24, "identifier assignment"), +(25, "imaging"), +(26, "information package creation"), +(27, "information package merging"), +(28, "information package splitting"), +(29, "ingestion"), +(30, "ingestion end"), +(31, "ingestion start"), +(32, "interpreting"), +(33, "message digest calculation"), +(34, "metadata extraction"), +(35, "metadata modification"), +(36, "migration"), +(37, "modification"), +(38, "normalization"), +(39, "packing"), +(40, "policy assignment"), +(41, "printing"), +(42, "quarantine"), +(43, "recovery"), +(44, "redaction"), +(45, "refreshment"), +(46, "rendering"), +(47, "replication"), +(48, "transfer"), +(49, "unpacking"), +(50, "unquarantine"), +(51, "validation"), +(52, "virus check"); + +-- add foreign key restraint to event_type to map to event_type_lookup +alter table premis_events add constraint event_type_fk FOREIGN KEY event_type REFERENCES event_type_lookup(id) + +-- lookup table for object in premis + +-- alter table premis_events add COLUMN object_int smallint; + +-- IMPORTANT -- +-- TO DO: If there is a value in the current premis_events table -- +-- for object that is NOT a match for any values in this function, -- +-- probably we need to abort and roll back. If it converts to a 0, -- +-- we will lose whatever information was in there. -- +/* create or replace function convert_event_objects() +returns void as $$ +begin + update premis_events + set object_int = case "object" + when 'object' then 1 + + else 0 -- default + end; +end; +$$ language plpgsql; + +select convert_event_objects(); + +-- if exists +alter table premis_events drop column "object"; +alter table premis_events rename column object_int TO "object"; + + +create table if not exists object_lookup ( + id int primary key, + "object" varchar not null +); + +alter table premis_events add constraint object_fk FOREIGN KEY "object" REFERENCES object_lookup(id) + + +-- lookup table for agent in premis + +alter table premis_events add COLUMN agent_int smallint; + +-- IMPORTANT -- +-- TO DO: If there is a value in the current premis_events table -- +-- for agent that is NOT a match for any values in this function, -- +-- probably we need to abort and roll back. If it converts to a 0, -- +-- we will lose whatever information was in there. -- +create or replace function convert_event_agents() +returns void as $$ +begin + update premis_events + set agent_int = case agent + when 'agent' then 1 + else 0 -- default + end; +end; +$$ language plpgsql; + +select convert_event_agents(); + +-- if exists +alter table premis_events drop column agent; +alter table premis_events rename column agent_int TO agent; + + +create table if not exists agent_lookup ( + id int primary key, + agent varchar not null +); + +alter table premis_events add constraint agent_fk FOREIGN KEY agent REFERENCES agent_lookup(id) + + +-- checksums + +alter table checksums drop column created_at; +alter table checksums drop column updated_at; + +-- storage records url + +*/ + +-- Now mark the migration as completed. +update schema_migrations set finished_at = now() where "version" = '013_shrink_db_size'; diff --git a/forms/premis_event_filter_form.go b/forms/premis_event_filter_form.go index b2bb2c2e..fb21ac5c 100644 --- a/forms/premis_event_filter_form.go +++ b/forms/premis_event_filter_form.go @@ -48,7 +48,7 @@ func (f *PremisEventFilterForm) init() { Name: "event_type", Label: "Event Type", Placeholder: "Event Type", - Options: Options(constants.EventTypes), + Options: Options(constants.EventTypesString), } f.Fields["generic_file_identifier"] = &Field{ Name: "generic_file_identifier", diff --git a/forms/premis_event_filter_form_test.go b/forms/premis_event_filter_form_test.go index 2be9c137..a49810a7 100644 --- a/forms/premis_event_filter_form_test.go +++ b/forms/premis_event_filter_form_test.go @@ -15,7 +15,7 @@ func getPremisEventFilters() *pgmodels.FilterCollection { fc := pgmodels.NewFilterCollection() fc.Add("date_time__gteq", []string{"2020-01-01"}) fc.Add("date_time__lteq", []string{"2024-12-31"}) - fc.Add("event_type", []string{constants.EventAccessAssignment, constants.EventIngestion}) + fc.Add("event_type", []string{constants.EventAccessAssignmentString, constants.EventIngestionString}) fc.Add("generic_file_identifier", []string{"test.edu/obj/data/file.json"}) fc.Add("identifier", []string{"0000-0000-0000"}) fc.Add("institution_id", []string{"2"}) diff --git a/helpers/icons.go b/helpers/icons.go index c453899b..d99f0905 100644 --- a/helpers/icons.go +++ b/helpers/icons.go @@ -15,14 +15,14 @@ var IconMap = map[string]string{ // Premis Event Icons. // Note that we use only 7 or so event types, // so we don't define an icon for every type. - constants.EventAccessAssignment: "admin_panel_settings", - constants.EventCreate: "add_circle_outline", - constants.EventDeletion: "delete_forever", - constants.EventDigestCalculation: "description", - constants.EventFixityCheck: "fingerprint", - constants.EventIdentifierAssignment: "search", - constants.EventIngestion: "file_upload", - constants.EventReplication: "library_books", + constants.EventAccessAssignmentString: "admin_panel_settings", + constants.EventCreationString: "add_circle_outline", + constants.EventDeletionString: "delete_forever", + constants.EventDigestCalculationString: "description", + constants.EventFixityCheckString: "fingerprint", + constants.EventIdentifierAssignmentString: "search", + constants.EventIngestionString: "file_upload", + constants.EventReplicationString: "library_books", // WorkItem actions constants.ActionDelete: "delete_forever", diff --git a/helpers/templates_test.go b/helpers/templates_test.go index 0161de2b..668d79f0 100644 --- a/helpers/templates_test.go +++ b/helpers/templates_test.go @@ -127,8 +127,8 @@ func TestIconFor(t *testing.T) { // Should return item defined in map assert.Equal( t, - template.HTML(helpers.IconMap[constants.EventIngestion]), - helpers.IconFor(constants.EventIngestion)) + template.HTML(helpers.IconMap[constants.EventIngestionString]), + helpers.IconFor(constants.EventIngestionString)) // If item is not defined in map, should return IconMissing assert.Equal( diff --git a/pgmodels/factory.go b/pgmodels/factory.go index fd559c57..2e716402 100644 --- a/pgmodels/factory.go +++ b/pgmodels/factory.go @@ -180,16 +180,16 @@ func RandomGenericFile(objID int64, objIdentifier string) *GenericFile { // RandomPremisEvent returns a random premis event of the specified // type. Caller should set GenericFileID and IntellectualObjectID. -func RandomPremisEvent(eventType string) *PremisEvent { +func RandomPremisEvent(eventType int) *PremisEvent { now := time.Now().UTC() return &PremisEvent{ - Agent: gofakeit.FarmAnimal(), + Agent: gofakeit.Number(0, 10), DateTime: now, Detail: gofakeit.Sentence(4), EventType: eventType, Identifier: uuid.NewString(), InstitutionID: 4, - Object: gofakeit.Sentence(4), + Object: gofakeit.Number(0, 10), Outcome: gofakeit.Sentence(5), OutcomeDetail: gofakeit.BeerName(), OutcomeInformation: gofakeit.AppAuthor(), diff --git a/pgmodels/failed_fixity_summary_test.go b/pgmodels/failed_fixity_summary_test.go index 65d2fcb9..bfd5927b 100644 --- a/pgmodels/failed_fixity_summary_test.go +++ b/pgmodels/failed_fixity_summary_test.go @@ -54,7 +54,7 @@ func addDummyFailures(t *testing.T) { for i := 0; i < 3; i++ { file := files[i] failure := pgmodels.PremisEvent{ - Agent: "Registry Unit Test", + Agent: 0, // "Registry Unit Test", DateTime: June012025, Detail: "Failed fixity check for unit tests", EventType: constants.EventFixityCheck, @@ -62,8 +62,7 @@ func addDummyFailures(t *testing.T) { Identifier: uuid.NewString(), InstitutionID: instID, IntellectualObjectID: file.IntellectualObjectID, - Object: "Go language crypto/sha256", - OldUUID: "", + Object: 0, // "Go language crypto/sha256", Outcome: "Failed", OutcomeDetail: "Yadda yadda", OutcomeInformation: "Not a real failure. This is test data.", diff --git a/pgmodels/generic_file.go b/pgmodels/generic_file.go index 06f2c3fe..e08a6ff0 100644 --- a/pgmodels/generic_file.go +++ b/pgmodels/generic_file.go @@ -223,13 +223,13 @@ func (gf *GenericFile) saveEventsTx(tx *pg.Tx) error { event.SetTimestamps() validationErr := event.Validate() if validationErr != nil { - common.Context().Log.Error().Msgf("GenericFile save failed on validation of event (%s) - %s. Error: %s", gf.Identifier, event.EventType, validationErr.Error()) + common.Context().Log.Error().Msgf("GenericFile save failed on validation of event (%s) - %d. Error: %s", gf.Identifier, event.EventType, validationErr.Error()) return validationErr } // Premis events can only be inserted, not updated. _, err := tx.Model(event).Insert() if err != nil { - common.Context().Log.Error().Msgf("GenericFile batch insertion failed on insert of event (%s) - %s. Error: %s", gf.Identifier, event.EventType, err.Error()) + common.Context().Log.Error().Msgf("GenericFile batch insertion failed on insert of event (%s) - %d. Error: %s", gf.Identifier, event.EventType, err.Error()) return err } } @@ -435,11 +435,11 @@ func (gf *GenericFile) LastDeletionEvent() (*PremisEvent, error) { return gf.lastEvent(constants.EventDeletion) } -func (gf *GenericFile) lastEvent(eventType string) (*PremisEvent, error) { +func (gf *GenericFile) lastEvent(eventType int) (*PremisEvent, error) { query := NewQuery(). Where("generic_file_id", "=", gf.ID). Where("event_type", "=", eventType). - OrderBy("created_at", "desc"). + OrderBy("date_time", "desc"). Offset(0). Limit(1) return PremisEventGet(query) @@ -520,7 +520,7 @@ func (gf *GenericFile) NewDeletionEvent() (*PremisEvent, error) { } now := time.Now().UTC() return &PremisEvent{ - Agent: "APTrust preservation services", + Agent: 0, // "APTrust preservation services", DateTime: now, Detail: "All copies of this file have been deleted from preservation storage", EventType: constants.EventDeletion, @@ -528,7 +528,7 @@ func (gf *GenericFile) NewDeletionEvent() (*PremisEvent, error) { InstitutionID: gf.InstitutionID, IntellectualObjectID: gf.IntellectualObjectID, GenericFileID: gf.ID, - Object: "Minio S3 library", + Object: 0, // "Minio S3 library", Outcome: constants.OutcomeSuccess, OutcomeDetail: deletionRequestView.RequestedByEmail, OutcomeInformation: fmt.Sprintf("File deleted at the request of %s. Institutional approver: %s. This event confirms all preservation copies have been deleted.", deletionRequestView.RequestedByEmail, deletionRequestView.ConfirmedByEmail), diff --git a/pgmodels/intellectual_object.go b/pgmodels/intellectual_object.go index a57a5b35..e74920e0 100644 --- a/pgmodels/intellectual_object.go +++ b/pgmodels/intellectual_object.go @@ -140,7 +140,7 @@ func (obj *IntellectualObject) Delete() error { if err != nil { return err } - deletionEvent.SetTimestamps() + // deletionEvent.SetTimestamps() valErr = deletionEvent.Validate() if valErr != nil { return valErr @@ -186,12 +186,12 @@ func (obj *IntellectualObject) LastDeletionEvent() (*PremisEvent, error) { return obj.lastEvent(constants.EventDeletion) } -func (obj *IntellectualObject) lastEvent(eventType string) (*PremisEvent, error) { +func (obj *IntellectualObject) lastEvent(eventType int) (*PremisEvent, error) { query := NewQuery(). Where("intellectual_object_id", "=", obj.ID). Where("event_type", "=", eventType). IsNull("generic_file_id"). - OrderBy("created_at", "desc"). + OrderBy("date_time", "desc"). Offset(0). Limit(1) return PremisEventGet(query) @@ -360,14 +360,14 @@ func (obj *IntellectualObject) NewDeletionEvent() (*PremisEvent, error) { } now := time.Now().UTC() return &PremisEvent{ - Agent: "APTrust preservation services", + Agent: 0, // "APTrust preservation services", DateTime: now, Detail: "Object deleted from preservation storage", EventType: constants.EventDeletion, Identifier: uuid.NewString(), InstitutionID: obj.InstitutionID, IntellectualObjectID: obj.ID, - Object: "Minio S3 library", + Object: 0, //"Minio S3 library", Outcome: constants.OutcomeSuccess, OutcomeDetail: deletionRequestView.RequestedByEmail, OutcomeInformation: fmt.Sprintf("Object deleted at the request of %s. Institutional approver: %s.", deletionRequestView.RequestedByEmail, deletionRequestView.ConfirmedByEmail), diff --git a/pgmodels/premis_event.go b/pgmodels/premis_event.go index e0fb1c9a..a453792b 100644 --- a/pgmodels/premis_event.go +++ b/pgmodels/premis_event.go @@ -10,21 +10,25 @@ import ( type PremisEvent struct { TimestampModel - Agent string `json:"agent"` + Agent int `json:"agent"` DateTime time.Time `json:"date_time"` Detail string `json:"detail"` - EventType string `json:"event_type"` + EventType int `json:"event_type"` GenericFileID int64 `json:"generic_file_id"` Identifier string `json:"identifier"` InstitutionID int64 `json:"institution_id"` IntellectualObjectID int64 `json:"intellectual_object_id"` - Object string `json:"object"` - OldUUID string `json:"old_uuid"` + Object int `json:"object"` Outcome string `json:"outcome"` OutcomeDetail string `json:"outcome_detail"` OutcomeInformation string `json:"outcome_information"` } +type PremisEventType struct { + EventTypeID int `json:"event_type_id"` + EventType string `json:"event_type"` +} + // PremisEventByID returns the event with the specified id. // Returns pg.ErrNoRows if there is no match. func PremisEventByID(id int64) (*PremisEvent, error) { @@ -76,8 +80,8 @@ func (event *PremisEvent) Save() error { // Validate returns errors if this event isn't valid. func (event *PremisEvent) Validate() *common.ValidationError { errors := make(map[string]string) - if common.IsEmptyString(event.Agent) { - errors["Agent"] = "Event Agent cannot be empty" + if event.Agent <= 0 { + errors["Agent"] = "Event requires a valid Agent" } if event.DateTime.IsZero() { errors["DateTime"] = "Event DateTime is required" @@ -99,8 +103,8 @@ func (event *PremisEvent) Validate() *common.ValidationError { if event.IntellectualObjectID <= 0 { errors["IntellectualObjectID"] = "Event requires a valid intellectual object id" } - if common.IsEmptyString(event.Object) { - errors["Object"] = "Event Object cannot be empty" + if event.Object <= 0 { + errors["Object"] = "Event requires a valid Object" } if !slice.Contains(constants.EventOutcomes, event.Outcome) { errors["Outcome"] = "Event requires a valid Outcome value" @@ -127,3 +131,11 @@ func (event *PremisEvent) Validate() *common.ValidationError { func ObjectEventCount(intellectualObjectID int64) (int, error) { return common.Context().DB.Model((*PremisEvent)(nil)).Where(`intellectual_object_id = ? and generic_file_id is null`, intellectualObjectID).Count() } + +// Provides the full string description of an event type given its int code. +func LookupEventType(eventTypeID int) (string, error) { + query := NewQuery().Columns("id").Where(`"lookup_event_type"."eventType"`, "=", eventTypeID) + var premisEventType PremisEventType + err := query.Select(&premisEventType) + return premisEventType.EventType, err +} diff --git a/pgmodels/premis_event_test.go b/pgmodels/premis_event_test.go index 50355219..839051cc 100644 --- a/pgmodels/premis_event_test.go +++ b/pgmodels/premis_event_test.go @@ -58,7 +58,7 @@ func TestPremisEventSave(t *testing.T) { invalidEvent := event invalidEvent.ID = 0 - invalidEvent.EventType = "" + invalidEvent.EventType = 5000 err = invalidEvent.Save() assert.NotNil(t, err) } @@ -108,14 +108,14 @@ func TestEventValidate(t *testing.T) { assert.NotEmpty(t, valErr.Errors["OutcomeDetail"]) assert.NotEmpty(t, valErr.Errors["OutcomeInformation"]) - event.Agent = "Agent 99" + event.Agent = 5000 event.DateTime = time.Now().UTC() event.Detail = "Some little detail" - event.EventType = "*** Not a valid event type ***" + event.EventType = 6000 event.Identifier = "*** Not a valid uuid ***" event.InstitutionID = 4 event.IntellectualObjectID = 21 - event.Object = "The apple of my eye" + event.Object = 4000 event.Outcome = "*** Not a valid outcome ***" event.OutcomeDetail = "The proof is in the pudding" event.OutcomeInformation = "The info" diff --git a/pgmodels/premis_event_view.go b/pgmodels/premis_event_view.go index 6b7ad33c..3196fc40 100644 --- a/pgmodels/premis_event_view.go +++ b/pgmodels/premis_event_view.go @@ -22,10 +22,9 @@ type PremisEventView struct { tableName struct{} `pg:"premis_events_view"` ID int64 `json:"id" form:"id"` Agent string `json:"agent"` - CreatedAt time.Time `json:"created_at"` DateTime time.Time `json:"date_time"` Detail string `json:"detail"` - EventType string `json:"event_type"` + EventType int32 `json:"event_type"` GenericFileID int64 `json:"generic_file_id"` GenericFileIdentifier string `json:"generic_file_identifier"` Identifier string `json:"identifier"` @@ -34,11 +33,9 @@ type PremisEventView struct { IntellectualObjectID int64 `json:"intellectual_object_id"` IntellectualObjectIdentifier string `json:"intellectual_object_identifier"` Object string `json:"object"` - OldUUID string `json:"old_uuid"` Outcome string `json:"outcome"` OutcomeDetail string `json:"outcome_detail"` OutcomeInformation string `json:"outcome_information"` - UpdatedAt time.Time `json:"updated_at"` } // PremisEventViewByID returns the event with the specified id. diff --git a/pgmodels/premis_event_view_test.go b/pgmodels/premis_event_view_test.go index 5edcb717..5882455d 100644 --- a/pgmodels/premis_event_view_test.go +++ b/pgmodels/premis_event_view_test.go @@ -22,7 +22,7 @@ func TestPremisEventView(t *testing.T) { query := pgmodels.NewQuery(). Where("intellectual_object_id", "=", 1). - OrderBy("created_at", "asc") + OrderBy("date_time", "asc") eventViews, err := pgmodels.PremisEventViewSelect(query) require.Nil(t, err) assert.Equal(t, 13, len(eventViews)) diff --git a/web/webui/intellectual_objects_controller.go b/web/webui/intellectual_objects_controller.go index a9b8006e..08fad2e6 100644 --- a/web/webui/intellectual_objects_controller.go +++ b/web/webui/intellectual_objects_controller.go @@ -217,7 +217,7 @@ func loadEvents(req *Request, objID int64) error { eventQuery := pgmodels.NewQuery(). Where("intellectual_object_id", "=", objID). IsNull("generic_file_id"). - OrderBy("created_at", "desc"). + OrderBy("date_time", "desc"). Limit(pager.PerPage). Offset(pager.QueryOffset) events, err := pgmodels.PremisEventSelect(eventQuery)