Add script to extract and gather analytics event names.

// FREEBIE
This commit is contained in:
Matthew Chen 2017-07-27 09:56:54 -04:00
parent b4f348ad14
commit 8aff95c44e
4 changed files with 590 additions and 6 deletions

View File

@ -273,7 +273,7 @@ protocol CallServiceObserver: class {
let errorDescription = "\(TAG) call was unexpectedly already set."
Logger.error(errorDescription)
call.state = .localFailure
OWSProdError(OWSAnalyticsEvents.call_service_call_already_set(), file:#file, function:#function, line:#line)
OWSProdError("call_service_call_already_set", file:#file, function:#function, line:#line)
return Promise(error: CallError.assertionError(description:errorDescription))
}

View File

@ -28,6 +28,19 @@ def splitall(path):
allparts.insert(0, parts[1])
return allparts
def objc_name_for_event_name(event_name):
while True:
index = event_name.find('_')
if index < 0:
break
if index >= len(event_name) - 1:
break
nextChar = event_name[index + 1]
event_name = event_name[:index] + nextChar.upper() + event_name[index + 2:]
return event_name
event_names = []
def process(filepath, c_macros, swift_macros):
@ -89,13 +102,27 @@ def process(filepath, c_macros, swift_macros):
if not best_match:
break
event_name = best_match.group(1).strip()
event_names.append(event_name)
position = best_match.end(1)
if not has_printed_filename:
has_printed_filename = True
print short_filepath
raw_event_name = best_match.group(1).strip()
if is_swift:
pattern = r'^"(.+)"$'
else:
pattern = r'^@"(.+)"$'
# print 'pattern:', pattern
matcher = re.compile(pattern)
# matcher = re.compile(r'#define (OWSProd)')
match = matcher.search(raw_event_name)
if match:
event_name = match.group(1).strip()
else:
print '\t', 'Ignoring event: _%s_' % raw_event_name
continue
event_names.append(event_name)
print '\t', 'event_name', event_name
position = best_match.end(1)
# macros.append(macro)
@ -191,6 +218,124 @@ def extract_macros(filepath):
return macros
def update_event_names(header_file_path, source_file_path):
# global event_names
# event_names = sorted(set(event_names))
code_generation_marker = '#pragma mark - Code Generation Marker'
# Header
filepath = header_file_path
with open(filepath, 'rt') as f:
text = f.read()
code_generation_start = text.find(code_generation_marker)
code_generation_end = text.rfind(code_generation_marker)
if code_generation_start < 0:
print 'Could not find marker in file:', file
sys.exit(1)
if code_generation_end < 0 or code_generation_end == code_generation_start:
print 'Could not find marker in file:', file
sys.exit(1)
generated = code_generation_marker
for event_name in sorted(set(event_names)):
# Example:
# + (NSString *)call_service_call_already_set;
objc_name = objc_name_for_event_name(event_name)
text_for_event = '+ (NSString *)%s;' % (objc_name,)
generated = generated + '\n\n' + text_for_event
generated = generated + '\n\n' + code_generation_marker
print 'generated', generated
new_text = text[:code_generation_start] + generated + text[code_generation_end + len(code_generation_marker):]
print 'text', new_text
with open(filepath, 'wt') as f:
f.write(new_text)
# Source
filepath = source_file_path
with open(filepath, 'rt') as f:
text = f.read()
code_generation_start = text.find(code_generation_marker)
code_generation_end = text.rfind(code_generation_marker)
if code_generation_start < 0:
print 'Could not find marker in file:', file
sys.exit(1)
if code_generation_end < 0 or code_generation_end == code_generation_start:
print 'Could not find marker in file:', file
sys.exit(1)
event_name_map = {}
print
print 'Parsing old generated code'
print
old_generated = text[code_generation_start + len(code_generation_marker):code_generation_end]
# print 'old_generated', old_generated
for split in old_generated.split('+'):
split = split.strip()
# print 'split:', split
if not split:
continue
# Example:
#(NSString *)call_service_call_already_set
#{
# return @"call_service_call_already_set";
#}
pattern = r'\(NSString \*\)([^\s\r\n\t]+)[\s\r\n\t]'
matcher = re.compile(pattern)
match = matcher.search(split)
if not match:
print 'Could not parse:', split
print 'In file:', filepath
sys.exit(1)
method_name = match.group(1).strip()
print 'method_name:', method_name
pattern = r'return @"(.+)";'
matcher = re.compile(pattern)
match = matcher.search(split)
if not match:
print 'Could not parse:', split
print 'In file:', filepath
sys.exit(1)
event_name = match.group(1).strip()
print 'event_name:', event_name
event_name_map[event_name] = method_name
print
all_event_names = sorted(set(event_name_map.keys() + event_names))
print 'all_event_names', all_event_names
generated = code_generation_marker
for event_name in all_event_names:
# Example:
# + (NSString *)call_service_call_already_set;
if event_name in event_name_map:
objc_name = event_name_map[event_name]
else:
objc_name = objc_name_for_event_name(event_name)
text_for_event = '''+ (NSString *)%s
{
return @"%s";
}''' % (objc_name, event_name)
generated = generated + '\n\n' + text_for_event
generated = generated + '\n\n' + code_generation_marker
print 'generated', generated
new_text = text[:code_generation_start] + generated + text[code_generation_end + len(code_generation_marker):]
print 'text', new_text
with open(filepath, 'wt') as f:
f.write(new_text)
if __name__ == "__main__":
# print 'git_repo_path', git_repo_path
@ -207,6 +352,16 @@ if __name__ == "__main__":
sys.exit(1)
swift_macros = extract_macros(macros_header_file_path)
print 'swift_macros:', swift_macros
event_names_header_file_path = os.path.join(git_repo_path, 'SignalServiceKit', 'src', 'Util', 'OWSAnalyticsEvents.h')
if not os.path.exists(event_names_header_file_path):
print 'Macros header does not exist:', event_names_header_file_path
sys.exit(1)
event_names_source_file_path = os.path.join(git_repo_path, 'SignalServiceKit', 'src', 'Util', 'OWSAnalyticsEvents.m')
if not os.path.exists(event_names_source_file_path):
print 'Macros header does not exist:', event_names_source_file_path
sys.exit(1)
for rootdir, dirnames, filenames in os.walk(git_repo_path):
for filename in filenames:
@ -215,3 +370,4 @@ if __name__ == "__main__":
print
print 'event_names', sorted(set(event_names))
update_event_names(event_names_header_file_path, event_names_source_file_path)

View File

@ -8,7 +8,131 @@ NS_ASSUME_NONNULL_BEGIN
- (instancetype)init NS_UNAVAILABLE;
+ (NSString *)call_service_call_already_set;
#pragma mark - Code Generation Marker
+ (NSString *)accountsErrorRegisterPushTokensFailed;
+ (NSString *)accountsErrorUnregisterAccountRequestFailed;
+ (NSString *)accountsErrorVerificationCodeRequestFailed;
+ (NSString *)accountsErrorVerifyAccountRequestFailed;
+ (NSString *)appDelegateErrorFailedToRegisterForRemoteNotifications;
+ (NSString *)appLaunch;
+ (NSString *)appLaunchComplete;
+ (NSString *)callServiceCallAlreadySet;
+ (NSString *)callServiceCallIdMismatch;
+ (NSString *)callServiceCallMismatch;
+ (NSString *)callServiceCallMissing;
+ (NSString *)callServiceCallUnexpectedlyIdle;
+ (NSString *)callServiceCouldNotCreatePeerConnectionClientPromise;
+ (NSString *)callServiceCouldNotCreateReadyToSendIceUpdatesPromise;
+ (NSString *)callServiceMissingFulfillReadyToSendIceUpdatesPromise;
+ (NSString *)callServicePeerConnectionAlreadySet;
+ (NSString *)callServicePeerConnectionMissing;
+ (NSString *)contactsErrorContactsIntersectionFailed;
+ (NSString *)errorAttachmentRequestFailed;
+ (NSString *)errorEnableVideoCallingRequestFailed;
+ (NSString *)errorGetDevicesFailed;
+ (NSString *)errorPrekeysAvailablePrekeysRequestFailed;
+ (NSString *)errorPrekeysCurrentSignedPrekeyRequestFailed;
+ (NSString *)errorPrekeysUpdateFailedJustSigned;
+ (NSString *)errorPrekeysUpdateFailedSignedAndOnetime;
+ (NSString *)errorProvisioningCodeRequestFailed;
+ (NSString *)errorProvisioningRequestFailed;
+ (NSString *)errorUnlinkDeviceFailed;
+ (NSString *)errorUpdateAttributesRequestFailed;
+ (NSString *)messageManagerErrorCouldNotHandlePrekeyBundle;
+ (NSString *)messageManagerErrorCouldNotHandleSecureMessage;
+ (NSString *)messageManagerErrorEnvelopeTypeKeyExchange;
+ (NSString *)messageManagerErrorEnvelopeTypeOther;
+ (NSString *)messageManagerErrorEnvelopeTypeUnknown;
+ (NSString *)messageManagerErrorInvalidProtocolMessage;
+ (NSString *)messageManagerErrorMessageEnvelopeHasNoContent;
+ (NSString *)messageManagerErrorOversizeMessage;
+ (NSString *)messageManagerErrorPrekeyBundleEnvelopeHasNoContent;
+ (NSString *)messageSendErrorCouldNotSerializeMessageJson;
+ (NSString *)messageSendErrorFailedDueToPrekeyUpdateFailures;
+ (NSString *)messageSendErrorFailedDueToUntrustedKey;
+ (NSString *)messageSenderErrorCouldNotFindContacts1;
+ (NSString *)messageSenderErrorCouldNotFindContacts2;
+ (NSString *)messageSenderErrorCouldNotFindContacts3;
+ (NSString *)messageSenderErrorCouldNotLoadAttachment;
+ (NSString *)messageSenderErrorCouldNotParseMismatchedDevicesJson;
+ (NSString *)messageSenderErrorCouldNotWriteAttachment;
+ (NSString *)messageSenderErrorGenericSendFailure;
+ (NSString *)messageSenderErrorInvalidIdentityKeyLength;
+ (NSString *)messageSenderErrorInvalidIdentityKeyType;
+ (NSString *)messageSenderErrorNoMissingOrExtraDevices;
+ (NSString *)messageSenderErrorRecipientPrekeyRequestFailed;
+ (NSString *)messageSenderErrorSendOperationDidNotComplete;
+ (NSString *)messageSenderErrorUnexpectedKeyBundle;
+ (NSString *)prekeysDeletedOldSignedPrekey;
+ (NSString *)storageErrorCouldNotDecodeClass;
+ (NSString *)storageErrorCouldNotLoadDatabase;
+ (NSString *)storageErrorCouldNotLoadDatabaseSecondAttempt;
+ (NSString *)storageErrorCouldNotStoreDatabasePassword;
+ (NSString *)storageErrorDeserialization;
+ (NSString *)storageErrorFileProtection;
#pragma mark - Code Generation Marker
@end

View File

@ -8,11 +8,315 @@ NS_ASSUME_NONNULL_BEGIN
@implementation OWSAnalyticsEvents
+ (NSString *)call_service_call_already_set
#pragma mark - Code Generation Marker
+ (NSString *)accountsErrorRegisterPushTokensFailed
{
return @"accounts_error_register_push_tokens_failed";
}
+ (NSString *)accountsErrorUnregisterAccountRequestFailed
{
return @"accounts_error_unregister_account_request_failed";
}
+ (NSString *)accountsErrorVerificationCodeRequestFailed
{
return @"accounts_error_verification_code_request_failed";
}
+ (NSString *)accountsErrorVerifyAccountRequestFailed
{
return @"accounts_error_verify_account_request_failed";
}
+ (NSString *)appDelegateErrorFailedToRegisterForRemoteNotifications
{
return @"app_delegate_error_failed_to_register_for_remote_notifications";
}
+ (NSString *)appLaunch
{
return @"app_launch";
}
+ (NSString *)appLaunchComplete
{
return @"app_launch_complete";
}
+ (NSString *)callServiceCallAlreadySet
{
return @"call_service_call_already_set";
}
+ (NSString *)callServiceCallIdMismatch
{
return @"call_service_call_id_mismatch";
}
+ (NSString *)callServiceCallMismatch
{
return @"call_service_call_mismatch";
}
+ (NSString *)callServiceCallMissing
{
return @"call_service_call_missing";
}
+ (NSString *)callServiceCallUnexpectedlyIdle
{
return @"call_service_call_unexpectedly_idle";
}
+ (NSString *)callServiceCouldNotCreatePeerConnectionClientPromise
{
return @"call_service_could_not_create_peer_connection_client_promise";
}
+ (NSString *)callServiceCouldNotCreateReadyToSendIceUpdatesPromise
{
return @"call_service_could_not_create_ready_to_send_ice_updates_promise";
}
+ (NSString *)callServiceMissingFulfillReadyToSendIceUpdatesPromise
{
return @"call_service_missing_fulfill_ready_to_send_ice_updates_promise";
}
+ (NSString *)callServicePeerConnectionAlreadySet
{
return @"call_service_peer_connection_already_set";
}
+ (NSString *)callServicePeerConnectionMissing
{
return @"call_service_peer_connection_missing";
}
+ (NSString *)contactsErrorContactsIntersectionFailed
{
return @"contacts_error_contacts_intersection_failed";
}
+ (NSString *)errorAttachmentRequestFailed
{
return @"error_attachment_request_failed";
}
+ (NSString *)errorEnableVideoCallingRequestFailed
{
return @"error_enable_video_calling_request_failed";
}
+ (NSString *)errorGetDevicesFailed
{
return @"error_get_devices_failed";
}
+ (NSString *)errorPrekeysAvailablePrekeysRequestFailed
{
return @"error_prekeys_available_prekeys_request_failed";
}
+ (NSString *)errorPrekeysCurrentSignedPrekeyRequestFailed
{
return @"error_prekeys_current_signed_prekey_request_failed";
}
+ (NSString *)errorPrekeysUpdateFailedJustSigned
{
return @"error_prekeys_update_failed_just_signed";
}
+ (NSString *)errorPrekeysUpdateFailedSignedAndOnetime
{
return @"error_prekeys_update_failed_signed_and_onetime";
}
+ (NSString *)errorProvisioningCodeRequestFailed
{
return @"error_provisioning_code_request_failed";
}
+ (NSString *)errorProvisioningRequestFailed
{
return @"error_provisioning_request_failed";
}
+ (NSString *)errorUnlinkDeviceFailed
{
return @"error_unlink_device_failed";
}
+ (NSString *)errorUpdateAttributesRequestFailed
{
return @"error_update_attributes_request_failed";
}
+ (NSString *)messageManagerErrorCouldNotHandlePrekeyBundle
{
return @"message_manager_error_could_not_handle_prekey_bundle";
}
+ (NSString *)messageManagerErrorCouldNotHandleSecureMessage
{
return @"message_manager_error_could_not_handle_secure_message";
}
+ (NSString *)messageManagerErrorEnvelopeTypeKeyExchange
{
return @"message_manager_error_envelope_type_key_exchange";
}
+ (NSString *)messageManagerErrorEnvelopeTypeOther
{
return @"message_manager_error_envelope_type_other";
}
+ (NSString *)messageManagerErrorEnvelopeTypeUnknown
{
return @"message_manager_error_envelope_type_unknown";
}
+ (NSString *)messageManagerErrorInvalidProtocolMessage
{
return @"message_manager_error_invalid_protocol_message";
}
+ (NSString *)messageManagerErrorMessageEnvelopeHasNoContent
{
return @"message_manager_error_message_envelope_has_no_content";
}
+ (NSString *)messageManagerErrorOversizeMessage
{
return @"message_manager_error_oversize_message";
}
+ (NSString *)messageManagerErrorPrekeyBundleEnvelopeHasNoContent
{
return @"message_manager_error_prekey_bundle_envelope_has_no_content";
}
+ (NSString *)messageSendErrorCouldNotSerializeMessageJson
{
return @"message_send_error_could_not_serialize_message_json";
}
+ (NSString *)messageSendErrorFailedDueToPrekeyUpdateFailures
{
return @"message_send_error_failed_due_to_prekey_update_failures";
}
+ (NSString *)messageSendErrorFailedDueToUntrustedKey
{
return @"message_send_error_failed_due_to_untrusted_key";
}
+ (NSString *)messageSenderErrorCouldNotFindContacts1
{
return @"message_sender_error_could_not_find_contacts_1";
}
+ (NSString *)messageSenderErrorCouldNotFindContacts2
{
return @"message_sender_error_could_not_find_contacts_2";
}
+ (NSString *)messageSenderErrorCouldNotFindContacts3
{
return @"message_sender_error_could_not_find_contacts_3";
}
+ (NSString *)messageSenderErrorCouldNotLoadAttachment
{
return @"message_sender_error_could_not_load_attachment";
}
+ (NSString *)messageSenderErrorCouldNotParseMismatchedDevicesJson
{
return @"message_sender_error_could_not_parse_mismatched_devices_json";
}
+ (NSString *)messageSenderErrorCouldNotWriteAttachment
{
return @"message_sender_error_could_not_write_attachment";
}
+ (NSString *)messageSenderErrorGenericSendFailure
{
return @"message_sender_error_generic_send_failure";
}
+ (NSString *)messageSenderErrorInvalidIdentityKeyLength
{
return @"message_sender_error_invalid_identity_key_length";
}
+ (NSString *)messageSenderErrorInvalidIdentityKeyType
{
return @"message_sender_error_invalid_identity_key_type";
}
+ (NSString *)messageSenderErrorNoMissingOrExtraDevices
{
return @"message_sender_error_no_missing_or_extra_devices";
}
+ (NSString *)messageSenderErrorRecipientPrekeyRequestFailed
{
return @"message_sender_error_recipient_prekey_request_failed";
}
+ (NSString *)messageSenderErrorSendOperationDidNotComplete
{
return @"message_sender_error_send_operation_did_not_complete";
}
+ (NSString *)messageSenderErrorUnexpectedKeyBundle
{
return @"message_sender_error_unexpected_key_bundle";
}
+ (NSString *)prekeysDeletedOldSignedPrekey
{
return @"prekeys_deleted_old_signed_prekey";
}
+ (NSString *)storageErrorCouldNotDecodeClass
{
return @"storage_error_could_not_decode_class";
}
+ (NSString *)storageErrorCouldNotLoadDatabase
{
return @"storage_error_could_not_load_database";
}
+ (NSString *)storageErrorCouldNotLoadDatabaseSecondAttempt
{
return @"storage_error_could_not_load_database_second_attempt";
}
+ (NSString *)storageErrorCouldNotStoreDatabasePassword
{
return @"storage_error_could_not_store_database_password";
}
+ (NSString *)storageErrorDeserialization
{
return @"storage_error_deserialization";
}
+ (NSString *)storageErrorFileProtection
{
return @"storage_error_file_protection";
}
#pragma mark - Code Generation Marker
@end
NS_ASSUME_NONNULL_END