# the fully qualified module or class of the application
#application=socorro.processor.processor_app.ProcessorApp

[resource]

    #+include ./common_resource.ini

    [[fs]]

        #+include ./common_fs.ini

        # the default dump field
        #dump_field=upload_file_minidump

        # the suffix used to identify a dump file
        #dump_file_suffix=.dump

        # a path to a file system
        #fs_root=./crashes

        # the suffix used to identify a json file
        #json_file_suffix=.json

        # the suffix used to identify a gzipped json file
        #jsonz_file_suffix=.jsonz

        # the directory base name to use for the named radix tree storage
        #name_branch_base=name

        # umask to use for new files
        umask=2

    [[logging]]

        #+include ./common_logging.ini

        # logging level for the logging to stderr (10 - DEBUG, 20 - INFO, 30 - WARNING, 40 - ERROR, 50 - CRITICAL)
        #stderr_error_logging_level=10

        # python logging system format for logging to stderr
        #stderr_line_format_string={asctime} {levelname} - {threadName} - {message}

        # logging level for the log file (10 - DEBUG, 20 - INFO, 30 - WARNING, 40 - ERROR, 50 - CRITICAL)
        #syslog_error_logging_level=40

        # syslog facility string ("user", "local0", etc)
        #syslog_facility_string=user

        # syslog hostname
        #syslog_host=localhost

        # python logging system format for syslog entries
        #syslog_line_format_string=processor (pid {process}): {asctime} {levelname} - {threadName} - {message}

        # syslog port
        #syslog_port=514

    [[postgresql]]

        #+include ./common_postgresql.ini

        # the class of the database
        #database_class=socorro.external.postgresql.connection_context.ConnectionContext

        # the hostname of the database
        #database_hostname=localhost

        # the name of the database
        #database_name=breakpad

        # the port for the database
        #database_port=5432

        # a class that will manage transactions
        #transaction_executor_class=socorro.database.transaction_executor.TransactionExecutorWithInfiniteBackoff

    [[rabbitmq]]

        #+include ./common_rabbitmq.ini

        # delays in seconds between retries
        #backoff_delays=10, 30, 60, 120, 300

        # toggle for using or ignoring the throttling flag
        #filter_on_legacy_processing=False

        # the hostname of the RabbitMQ server
        #host=localhost

        # the port for the RabbitMQ server
        #port=5672

        # the name of priority crash queue name within RabbitMQ
        #priority_queue_name=socorro.priority

        # the class responsible for connecting to RabbitMQ
        #rabbitmq_class=socorro.external.rabbitmq.connection_context.ConnectionContextPooled

        # a classname for the type of wrapper for RabbitMQ connections
        #rabbitmq_connection_wrapper_class=socorro.external.rabbitmq.connection_context.Connection

        # the name of reprocessing crash queue name within RabbitMQ
        #reprocessing_queue_name=socorro.reprocessing

        # the name of the queue to recieve crashes
        #routing_key=socorro.reprocessing

        # the name of standard crash queue name within RabbitMQ
        #standard_queue_name=socorro.normal

        # a class that will manage transactions
        #transaction_executor_class=socorro.database.transaction_executor.TransactionExecutorWithInfiniteBackoff

        # the name of the RabbitMQ virtual host
        #virtual_host=/

        # seconds between log during retries
        #wait_log_interval=10

    [[redactor]]

        #+include ./common_redactor.ini

        # a list of keys not allowed in a redacted processed crash
        #forbidden_keys=url, email, user_id, exploitability,json_dump.sensitive,upload_file_minidump_flash1.json_dump.sensitive,upload_file_minidump_flash2.json_dump.sensitive,upload_file_minidump_browser.json_dump.sensitive,memory_info

        # the name of the class that implements a 'redact' method
        #redactor_class=socorro.external.crashstorage_base.Redactor

    [[statsd]]

        #+include ./common_statsd.ini

        # a comma delimeted list of counters
        #active_counters_list=

        # a string to be used as the prefix for statsd names
        #prefix=

        # the hostname of statsd
        #statsd_host=

        # the port number for statsd
        #statsd_port=8125

[secrets]

    #+include ./common_secrets.ini

    [[postgresql]]

        #+include ./common_postgresql.ini

        # the user's database password
        #database_password=aPassword

        # the name of the user within the database
        #database_username=breakpad_rw

    [[rabbitmq]]

        #+include ./common_rabbitmq.ini

        # the user's RabbitMQ password
        #rabbitmq_password=guest

        # the name of the user within the RabbitMQ instance
        #rabbitmq_user=guest

[destination]

    # the destination storage class
    crashstorage_class=socorro.external.crashstorage_base.PolyCrashStorage

    # a list of keys not allowed in a redacted processed crash
    # see "resource.redactor.forbidden_keys" for the default or override it here
    #forbidden_keys=url, email, user_id, exploitability,json_dump.sensitive,upload_file_minidump_flash1.json_dump.sensitive,upload_file_minidump_flash2.json_dump.sensitive,upload_file_minidump_browser.json_dump.sensitive,memory_info

    # the name of the class that implements a 'redact' method
    # see "resource.redactor.redactor_class" for the default or override it here
    #redactor_class=socorro.external.crashstorage_base.Redactor

    # a comma delimited list of storage classes
    storage_classes='socorro.external.fs.crashstorage.FSPermanentStorage, socorro.external.postgresql.crashstorage.PostgreSQLCrashStorage'

    [[storage0]]

        # None
        crashstorage_class=socorro.external.fs.crashstorage.FSPermanentStorage

        # the default dump field
        # see "resource.fs.dump_field" for the default or override it here
        #dump_field=upload_file_minidump

        # the suffix used to identify a dump file
        # see "resource.fs.dump_file_suffix" for the default or override it here
        #dump_file_suffix=.dump

        # a list of keys not allowed in a redacted processed crash
        # see "resource.redactor.forbidden_keys" for the default or override it here
        #forbidden_keys=url, email, user_id, exploitability

        # a path to a file system
        # see "resource.fs.fs_root" for the default or override it here
        fs_root=/home/socorro/primaryCrashStore

        # the suffix used to identify a json file
        # see "resource.fs.json_file_suffix" for the default or override it here
        #json_file_suffix=.json

        # the suffix used to identify a gzipped json file
        # see "resource.fs.jsonz_file_suffix" for the default or override it here
        #jsonz_file_suffix=.jsonz

        # the directory base name to use for the named radix tree storage
        # see "resource.fs.name_branch_base" for the default or override it here
        #name_branch_base=name

        # the name of the class that implements a 'redact' method
        # see "resource.redactor.redactor_class" for the default or override it here
        #redactor_class=socorro.external.crashstorage_base.Redactor

        # umask to use for new files
        # see "resource.fs.umask" for the default or override it here
        umask=2

    [[storage1]]

        # None
        crashstorage_class=socorro.external.postgresql.crashstorage.PostgreSQLCrashStorage

        # the class responsible for connecting to Postgres
        # see "resource.postgresql.database_class" for the default or override it here
        #database_class=socorro.external.postgresql.connection_context.ConnectionContext

        # the hostname of the database
        # see "resource.postgresql.database_hostname" for the default or override it here
        #database_hostname=localhost

        # the name of the database
        # see "resource.postgresql.database_name" for the default or override it here
        #database_name=breakpad

        # the user's database password
        # see "secrets.postgresql.database_password" for the default or override it here
        #database_password=aPassword

        # the port for the database
        # see "resource.postgresql.database_port" for the default or override it here
        #database_port=5432

        # the name of the user within the database
        # see "secrets.postgresql.database_username" for the default or override it here
        #database_username=breakpad_rw

        # a list of keys not allowed in a redacted processed crash
        # see "resource.redactor.forbidden_keys" for the default or override it here
        #forbidden_keys=url, email, user_id, exploitability,json_dump.sensitive,upload_file_minidump_flash1.json_dump.sensitive,upload_file_minidump_flash2.json_dump.sensitive,upload_file_minidump_browser.json_dump.sensitive,memory_info

        # the name of the class that implements a 'redact' method
        # see "resource.redactor.redactor_class" for the default or override it here
        #redactor_class=socorro.external.crashstorage_base.Redactor

        # a class that will manage transactions
        # see "resource.postgresql.transaction_executor_class" for the default or override it here
        #transaction_executor_class=socorro.database.transaction_executor.TransactionExecutor

[logging]

    # logging level for the logging to stderr (10 - DEBUG, 20 - INFO, 30 - WARNING, 40 - ERROR, 50 - CRITICAL)
    # see "resource.logging.stderr_error_logging_level" for the default or override it here
    #stderr_error_logging_level=10

    # python logging system format for logging to stderr
    # see "resource.logging.stderr_line_format_string" for the default or override it here
    #stderr_line_format_string={asctime} {levelname} - {threadName} - {message}

    # logging level for the log file (10 - DEBUG, 20 - INFO, 30 - WARNING, 40 - ERROR, 50 - CRITICAL)
    # see "resource.logging.syslog_error_logging_level" for the default or override it here
    #syslog_error_logging_level=40

    # syslog facility string ("user", "local0", etc)
    # see "resource.logging.syslog_facility_string" for the default or override it here
    #syslog_facility_string=user

    # syslog hostname
    # see "resource.logging.syslog_host" for the default or override it here
    #syslog_host=localhost

    # python logging system format for syslog entries
    # see "resource.logging.syslog_line_format_string" for the default or override it here
    #syslog_line_format_string=processor (pid {process}): {asctime} {levelname} - {threadName} - {message}

    # syslog port
    # see "resource.logging.syslog_port" for the default or override it here
    #syslog_port=514

[new_crash_source]

    # delays in seconds between retries
    # see "resource.rabbitmq.backoff_delays" for the default or override it here
    #backoff_delays=10, 30, 60, 120, 300, 300, 300, 300, 300, 300

    # the source storage class
    #crashstorage_class=socorro.external.rabbitmq.crashstorage.RabbitMQCrashStorage

    # toggle for using or ignoring the throttling flag
    # see "resource.rabbitmq.filter_on_legacy_processing" for the default or override it here
    #filter_on_legacy_processing=False

    # a list of keys not allowed in a redacted processed crash
    # see "resource.redactor.forbidden_keys" for the default or override it here
    #forbidden_keys=url, email, user_id, exploitability,json_dump.sensitive,upload_file_minidump_flash1.json_dump.sensitive,upload_file_minidump_flash2.json_dump.sensitive,upload_file_minidump_browser.json_dump.sensitive,memory_info

    # the hostname of the RabbitMQ server
    # see "resource.rabbitmq.host" for the default or override it here
    #host=localhost

    # an iterable that will stream crash_ids needing processing
    #new_crash_source_class=socorro.external.rabbitmq.rmq_new_crash_source.RMQNewCrashSource

    # the port for the RabbitMQ server
    # see "resource.rabbitmq.port" for the default or override it here
    #port=5672

    # the name of priority crash queue name within RabbitMQ
    # see "resource.rabbitmq.priority_queue_name" for the default or override it here
    #priority_queue_name=socorro.priority

    # the class responsible for connecting to RabbitMQ
    # see "resource.rabbitmq.rabbitmq_class" for the default or override it here
    #rabbitmq_class=socorro.external.rabbitmq.connection_context.ConnectionContextPooled

    # a classname for the type of wrapper for RabbitMQ connections
    # see "resource.rabbitmq.rabbitmq_connection_wrapper_class" for the default or override it here
    #rabbitmq_connection_wrapper_class=socorro.external.rabbitmq.connection_context.Connection

    # the user's RabbitMQ password
    # see "secrets.rabbitmq.rabbitmq_password" for the default or override it here
    #rabbitmq_password=guest

    # the name of the user within the RabbitMQ instance
    # see "secrets.rabbitmq.rabbitmq_user" for the default or override it here
    #rabbitmq_user=guest

    # the name of the class that implements a 'redact' method
    # see "resource.redactor.redactor_class" for the default or override it here
    #redactor_class=socorro.external.crashstorage_base.Redactor

    # the name of reprocessing crash queue name within RabbitMQ
    # see "resource.rabbitmq.reprocessing_queue_name" for the default or override it here
    #reprocessing_queue_name=socorro.reprocessing

    # the name of the queue to recieve crashes
    # see "resource.rabbitmq.routing_key" for the default or override it here
    #routing_key=socorro.reprocessing

    # the name of standard crash queue name within RabbitMQ
    # see "resource.rabbitmq.standard_queue_name" for the default or override it here
    #standard_queue_name=socorro.normal

    # a class that will manage transactions
    # see "resource.rabbitmq.transaction_executor_class" for the default or override it here
    #transaction_executor_class=socorro.database.transaction_executor.TransactionExecutorWithInfiniteBackoff

    # the name of the RabbitMQ virtual host
    # see "resource.rabbitmq.virtual_host" for the default or override it here
    #virtual_host=/

    # seconds between log during retries
    # see "resource.rabbitmq.wait_log_interval" for the default or override it here
    #wait_log_interval=1

[processor]

    # boolean indictating if information about add-ons should be collected
    #collect_addon=True

    # boolean indictating if information about process type should be collected
    #collect_crash_process=True

    # the number of frames to keep in the raw dump for the crashing thread
    #crashing_thread_frame_threshold=100

    # the number of frames to keep in the raw dump at the tail of the frame list
    #crashing_thread_tail_frame_threshold=10

    # the class of the database
    # see "resource.postgresql.database_class" for the default or override it here
    #database_class=socorro.external.postgresql.connection_context.ConnectionContext

    # the hostname of the database
    # see "resource.postgresql.database_hostname" for the default or override it here
    #database_hostname=localhost

    # the name of the database
    # see "resource.postgresql.database_name" for the default or override it here
    #database_name=breakpad

    # the user's database password
    # see "secrets.postgresql.database_password" for the default or override it here
    #database_password=aPassword

    # the port for the database
    # see "resource.postgresql.database_port" for the default or override it here
    #database_port=5432

    # the name of the user within the database
    # see "secrets.postgresql.database_username" for the default or override it here
    #database_username=breakpad_rw

    # the default name of a dump
    #dump_field=upload_file_minidump

    # the version of Firefox that is considered to be old enough to warrant a warning to the user
    #firefox_out_of_date_version=17

    # A subset of the known "debug identifiers" for flash versions, associated to the version
    #known_flash_identifiers=

    # the full pathname of the extern program stackwalker (quote path with embedded spaces)
    #minidump_stackwalk_pathname=/data/socorro/stackwalk/bin/stackwalker

    # the class that transforms raw crashes into processed crashes
    #processor_class=socorro.processor.hybrid_processor.HybridCrashProcessor

    # comma or space separated list of symbol files for minidump_stackwalk (quote paths with embedded spaces)
    #processor_symbols_pathname_list="/mnt/socorro/symbols/symbols_ffx" "/mnt/socorro/symbols/symbols_sea" "/mnt/socorro/symbols/symbols_tbrd" "/mnt/socorro/symbols/symbols_sbrd" "/mnt/socorro/symbols/symbols_os"

    # the template for the command to invoke stackwalker
    #stackwalk_command_line=timeout -s KILL 30 $minidump_stackwalk_pathname --raw-json $rawfilePathname --pipe $dumpfilePathname $processor_symbols_pathname_list 2>/dev/null

    # the path where the symbol cache is found (quote path with embedded spaces)
    #symbol_cache_path=/mnt/socorro/symbols

    # a path where temporary files may be written
    #temporary_file_system_storage_path=/tmp

    # a class that will manage transactions
    # see "resource.postgresql.transaction_executor_class" for the default or override it here
    #transaction_executor_class=socorro.database.transaction_executor.TransactionExecutorWithInfiniteBackoff

    # seconds between log during retries
    # see "resource.postgresql.wait_log_interval" for the default or override it here
    #wait_log_interval=10

    # boolean indictating if we are using the old monitor_app.py
    #with_old_monitor=False

    [[c_signature]]

        # the class that can generate a C signature
        #c_signature_tool_class=socorro.processor.signature_utilities.CSignatureTool

        # a regular expression matching frame signatures that should be ignored when generating an overall signature
        #irrelevant_signature_re=@0x[0-9a-fA-F]{2,}|@0x[1-9a-fA-F]|ashmem|app_process@0x.*|core\.odex@0x.*|_CxxThrowException|dalvik-heap|dalvik-jit-code-cache|dalvik-LinearAlloc|dalvik-mark-stack|data@app@org\.mozilla\.f.*-\d\.apk@classes\.dex@0x.*|framework\.odex@0x.*|google_breakpad::ExceptionHandler::HandleInvalidParameter.*|KiFastSystemCallRet|libandroid_runtime\.so@0x.*|libbinder\.so@0x.*|libc\.so@.*|libc-2\.5\.so@.*|libEGL\.so@.*|libdvm\.so\s*@\s*0x.*|libgui\.so@0x.*|libicudata.so@.*|libMali\.so@0x.*|libutils\.so@0x.*|libz\.so@0x.*|linux-gate\.so@0x.*|mnt@asec@org\.mozilla\.f.*-\d@pkg\.apk@classes\.dex@0x.*|MOZ_Assert|MOZ_Crash|mozcrt19.dll@0x.*|mozilla::ipc::RPCChannel::Call\(IPC::Message\*, IPC::Message\*\)|_NSRaiseError|(Nt|Zw)WaitForSingleObject(Ex)?|(Nt|Zw)WaitForMultipleObjects(Ex)?|nvmap@0x.*|org\.mozilla\.f.*-\d\.apk@0x.*|RaiseException|RtlpAdjustHeapLookasideDepth|system@framework@.*\.jar@classes\.dex@0x.*|___TERMINATING_DUE_TO_UNCAUGHT_EXCEPTION___|WaitForSingleObjectExImplementation|WaitForMultipleObjectsExImplementation|RealMsgWaitFor.*_ZdlPv|zero

        # a regular expression matching frame signatures that should always be coupled with the following frame signature when generating an overall signature
        #prefix_signature_re=@0x0|.*CrashAtUnhandlableOOM|Abort|.*abort|_alloca_probe.*|__android_log_assert|arena_.*|BaseGetNamedObjectDirectory|.*calloc|cert_.*|CERT_.*|CFRelease|_chkstk|CrashInJS|__delayLoadHelper2|dlmalloc|dlmalloc_trim|dvm.*|EtwEventEnabled|extent_.*|fastcopy_I|fastzero_I|_files_getaddrinfo|.*free|GCGraphBuilder::NoteXPCOMChild|getanswer|huge_dalloc|ialloc|imalloc|init_library|isalloc|je_malloc|jemalloc_crash|je_realloc|JNI_CreateJavaVM|_JNIEnv.*|JNI_GetCreatedJavaVM.*|js::AutoCompartment::AutoCompartment.*|JSAutoCompartment::JSAutoCompartment.*|JS_DHashTableEnumerate|JS_DHashTableOperate|kill|__libc_android_abort|libobjc.A.dylib@0x1568.|(libxul\.so|xul\.dll|XUL)@0x.*|LL_.*|malloc|_MD_.*|memcmp|__memcmp16|memcpy|memmove|memset|mozalloc_abort.*|mozalloc_handle_oom|moz_free|mozilla::AndroidBridge::AutoLocalJNIFrame::~AutoLocalJNIFrame|mozilla::ipc::RPCChannel::Call|mozilla::ipc::RPCChannel::CxxStackFrame::CxxStackFrame|mozilla::ipc::RPCChannel::EnteredCxxStack|mozilla::ipc::RPCChannel::Send|mozilla.*FatalError|moz_xmalloc|moz_xrealloc|NP_Shutdown|nsACString_internal::Assign.*|nsCOMPtr.*|NS_ABORT_OOM.*|NS_DebugBreak.*|[-+]\[NSException raise(:format:(arguments:)?)?\]|nsObjCExceptionLogAbort(\(.*?\)){0,1}|nsRefPtr.*|NSS.*|nss.*|nsTArray<.*|nsTArray_base<.*|NtUser.*|objc_exception_throw|objc_msgSend|operator new\([^,\)]+\)|PL_.*|port_.*|PORT_.*|_PR_.*|PR_.*|pthread_mutex_lock|_purecall|raise|realloc|recv|_RTC_Terminate|Rtl.*|_Rtl.*|__Rtl.*|SEC_.*Item|seckey_.*|SECKEY_.*|__security_check_cookie|send|setjmp|sigblock|sigprocmask|SocketAccept|SocketAcceptRead|SocketAvailable|SocketAvailable64|SocketBind|SocketClose|SocketConnect|SocketGetName|SocketGetPeerName|SocketListen|SocketPoll|SocketRead|SocketRecv|SocketSend|SocketShutdown|SocketSync|SocketTransmitFile|SocketWrite|SocketWritev|ssl_.*|SSL_.*|strcat|ssl3_.*|strchr|strcmp|strcpy|.*strdup|strlen|strncpy|strzcmp16|strstr|__swrite|TouchBadMemory|_VEC_memcpy|_VEC_memzero|.*WaitFor.*|wcslen|__wrap_realloc|WSARecv.*|WSASend.*|_ZdaPvRKSt9nothrow_t"|zzz_AsmCodeRange_.*|.*DebugAbort.*|mozilla::ipc::MessageChannel::~MessageChannel.*

        # a list of frame signatures that should always be considered top of the stack if present in the stack
        #signature_sentinels=_purecall, mozilla::ipc::RPCChannel::Call(IPC::Message*, IPC::Message*), configman.option.<lambda>, Java_org_mozilla_gecko_GeckoAppShell_reportJavaCrash, google_breakpad::ExceptionHandler::HandleInvalidParameter(wchar_t const*, wchar_t const*, wchar_t const*, unsigned int, unsigned int)

        # any signatures that match this list should be combined with their associated source code line numbers
        #signatures_with_line_numbers_re=js_Interpret

    [[java_signature]]

        # the class that can generate a Java signature
        #java_signature_tool_class=socorro.processor.signature_utilities.JavaSignatureTool

    [[statistics]]

        # a comma delimeted list of counters
        # see "resource.statsd.active_counters_list" for the default or override it here
        #active_counters_list=

        # a string to be used as the prefix for statsd names
        # see "resource.statsd.prefix" for the default or override it here
        #prefix=

        # name of a class that will gather statistics
        #stats_class=socorro.lib.statistics.StatisticsForStatsd

        # the hostname of statsd
        # see "resource.statsd.statsd_host" for the default or override it here
        #statsd_host=

        # the port number for statsd
        # see "resource.statsd.statsd_port" for the default or override it here
        #statsd_port=8125

[producer_consumer]

    # the delay in seconds if no job is found
    #idle_delay=7

    # the maximum size of the internal queue
    #maximum_queue_size=8

    # the number of threads
    #number_of_threads=4

    # the class implements a threaded producer consumer queue
    #producer_consumer_class=socorro.lib.threaded_task_manager.ThreadedTaskManager

[registrar]

    # the class that registers and tracks processors
    #registrar_class=socorro.processor.registration_client.ProcessorAppNullRegistrationClient

[source]

    # the source storage class
    crashstorage_class=socorro.external.fs.crashstorage.FSPermanentStorage

    # the default dump field
    # see "resource.fs.dump_field" for the default or override it here
    #dump_field=upload_file_minidump

    # the suffix used to identify a dump file
    # see "resource.fs.dump_file_suffix" for the default or override it here
    #dump_file_suffix=.dump

    # a list of keys not allowed in a redacted processed crash
    # see "resource.redactor.forbidden_keys" for the default or override it here
    #forbidden_keys=url, email, user_id, exploitability

    # a path to a file system
    # see "resource.fs.fs_root" for the default or override it here
    fs_root=/home/socorro/primaryCrashStore

    # the suffix used to identify a json file
    # see "resource.fs.json_file_suffix" for the default or override it here
    #json_file_suffix=.json

    # the suffix used to identify a gzipped json file
    # see "resource.fs.jsonz_file_suffix" for the default or override it here
    #jsonz_file_suffix=.jsonz

    # the directory base name to use for the named radix tree storage
    # see "resource.fs.name_branch_base" for the default or override it here
    #name_branch_base=name

    # the name of the class that implements a 'redact' method
    # see "resource.redactor.redactor_class" for the default or override it here
    #redactor_class=socorro.external.crashstorage_base.Redactor

    # umask to use for new files
    # see "resource.fs.umask" for the default or override it here
    #umask=18

