# name: application
# doc: the fully qualified module or class of the application
# converter: configman.converters.class_converter
application='ProcessorApp'

[destination]

    # name: crashstorage_class
    # doc: the destination storage class
    # converter: configman.converters.class_converter
    crashstorage_class='socorro.external.crashstorage_base.PolyCrashStorage'

    # name: storage_classes
    # doc: a comma delimited list of storage classes
    # converter: configman.converters.class_list_converter
    storage_classes='socorro.external.fs.crashstorage.FSLegacyRadixTreeStorage, socorro.external.postgresql.crashstorage.PostgreSQLCrashStorage'

    [[storage0]]

        # name: crashstorage_class
        # doc: None
        # converter: configman.converters.class_converter
        crashstorage_class='socorro.external.fs.crashstorage.FSLegacyRadixTreeStorage'

        # name: dump_field
        # doc: the default dump field
        # converter: str
        dump_field='upload_file_minidump'

        # name: dump_file_suffix
        # doc: the suffix used to identify a dump file
        # converter: str
        dump_file_suffix='.dump'

        # name: forbidden_keys
        # doc: a comma delimited list of keys to not allowed in the processed crash
        # converter: socorro.external.fs.crashstorage.<lambda>
        forbidden_keys='url, email, user_id, exploitability'

        # name: fs_root
        # doc: a path to a file system
        # converter: socorro.external.fs.crashstorage.<lambda>
        fs_root='/home/socorro/primaryCrashStore'

        # name: json_file_suffix
        # doc: the suffix used to identify a json file
        # converter: str
        json_file_suffix='.json'

        # name: jsonz_file_suffix
        # doc: the suffix used to identify a gzipped json file
        # converter: str
        jsonz_file_suffix='.jsonz'

        # name: name_branch_base
        # doc: the directory base name to use for the named radix tree storage
        # converter: str
        name_branch_base='name'

        # name: umask
        # doc: umask to use for new files
        # converter: int
        umask='18'

    [[storage1]]

        # name: crashstorage_class
        # doc: None
        # converter: configman.converters.class_converter
        crashstorage_class='socorro.external.postgresql.crashstorage.PostgreSQLCrashStorage'

        # name: database_class
        # doc: the class responsible for connecting toPostgres
        # converter: configman.converters.class_converter
        database_class='socorro.external.postgresql.connection_context.ConnectionContext'

        # name: database_host
        # doc: the hostname of the database
        # converter: str
        database_host='localhost'

        # name: database_name
        # doc: the name of the database
        # converter: str
        database_name='breakpad'

        # name: database_password
        # doc: the user's database password
        # converter: str
        database_password='aPassword'

        # name: database_port
        # doc: the port for the database
        # converter: int
        database_port='5432'

        # name: database_user
        # doc: the name of the user within the database
        # converter: str
        database_user='breakpad_rw'

        # name: transaction_executor_class
        # doc: a class that will manage transactions
        # converter: configman.converters.class_converter
        transaction_executor_class='socorro.database.transaction_executor.TransactionExecutor'

[logging]

    # name: stderr_error_logging_level
    # doc: logging level for the logging to stderr (10 - DEBUG, 20 - INFO, 30 - WARNING, 40 - ERROR, 50 - CRITICAL)
    # converter: int
    stderr_error_logging_level='10'

    # name: stderr_line_format_string
    # doc: python logging system format for logging to stderr
    # converter: str
    stderr_line_format_string='{asctime} {levelname} - {threadName} - {message}'

    # name: syslog_error_logging_level
    # doc: logging level for the log file (10 - DEBUG, 20 - INFO, 30 - WARNING, 40 - ERROR, 50 - CRITICAL)
    # converter: int
    syslog_error_logging_level='40'

    # name: syslog_facility_string
    # doc: syslog facility string ("user", "local0", etc)
    # converter: str
    syslog_facility_string='user'

    # name: syslog_host
    # doc: syslog hostname
    # converter: str
    syslog_host='localhost'

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

    # name: syslog_port
    # doc: syslog port
    # converter: int
    syslog_port='514'

[new_crash_source]

    # name: backoff_delays
    # doc: delays in seconds between retries
    # converter: eval
    backoff_delays="10, 30, 60, 120, 300, 300, 300, 300, 300, 300"

    # name: crashstorage_class
    # doc: the source storage class
    # converter: configman.converters.class_converter
    crashstorage_class='socorro.external.rabbitmq.crashstorage.RabbitMQCrashStorage'

    # name: host
    # doc: the hostname of the RabbitMQ server
    # converter: str
    host='localhost'

    # name: new_crash_source_class
    # doc: an iterable that will stream crash_ids needing processing
    # converter: configman.converters.class_converter
    new_crash_source_class='socorro.external.rabbitmq.rmq_new_crash_source.RMQNewCrashSource'

    # name: port
    # doc: the port for the RabbitMQ server
    # converter: int
    port='5672'

    # name: rabbitmq_class
    # doc: the class responsible for connecting toRabbitMQ
    # converter: configman.converters.class_converter
    rabbitmq_class='socorro.external.rabbitmq.connection_context.ConnectionContextPooled'

    # name: rabbitmq_password
    # doc: the user's RabbitMQ password
    # converter: str
    rabbitmq_password='guest'

    # name: rabbitmq_user
    # doc: the name of the user within the RabbitMQ instance
    # converter: str
    rabbitmq_user='guest'

    # name: transaction_executor_class
    # doc: Transaction wrapper class
    # converter: configman.converters.class_converter
    transaction_executor_class='socorro.database.transaction_executor.TransactionExecutorWithInfiniteBackoff'

    # name: virtual_host
    # doc: the name of the RabbitMQ virtual host
    # converter: str
    virtual_host='/'

    # name: wait_log_interval
    # doc: seconds between log during retries
    # converter: int
    wait_log_interval='1'

[processor]

    # name: collect_addon
    # doc: boolean indictating if information about add-ons should be collected
    # converter: configman.converters.boolean_converter
    collect_addon='True'

    # name: collect_crash_process
    # doc: boolean indictating if information about process type should be collected
    # converter: configman.converters.boolean_converter
    collect_crash_process='True'

    # name: crashing_thread_frame_threshold
    # doc: the number of frames to keep in the raw dump for the crashing thread
    # converter: int
    crashing_thread_frame_threshold='100'

    # name: crashing_thread_tail_frame_threshold
    # doc: the number of frames to keep in the raw dump at the tail of the frame list
    # converter: int
    crashing_thread_tail_frame_threshold='10'

    # name: database_class
    # doc: the class of the database
    # converter: configman.converters.class_converter
    database_class='socorro.external.postgresql.connection_context.ConnectionContext'

    # name: database_host
    # doc: the hostname of the database
    # converter: str
    database_host='localhost'

    # name: database_name
    # doc: the name of the database
    # converter: str
    database_name='breakpad'

    # name: database_password
    # doc: the user's database password
    # converter: str
    database_password='aPassword'

    # name: database_port
    # doc: the port for the database
    # converter: int
    database_port='5432'

    # name: database_user
    # doc: the name of the user within the database
    # converter: str
    database_user='breakpad_rw'

    # name: dump_field
    # doc: the default name of a dump
    # converter: str
    dump_field='upload_file_minidump'

    # name: exploitability_tool_command_line
    # doc: the template for the command to invoke the exploitability tool
    # converter: str
    exploitability_tool_command_line='$exploitability_tool_pathname $dumpfilePathname 2>/dev/null'

    # name: exploitability_tool_pathname
    # doc: the full pathname of the extern program exploitability tool (quote path with embedded spaces)
    # converter: str
    exploitability_tool_pathname='/data/socorro/stackwalk/bin/exploitability'

    # name: known_flash_identifiers
    # doc: A subset of the known "debug identifiers" for flash versions, associated to the version
    # converter: json.loads
    known_flash_identifiers='{"937DDCC422411E58EF6AD13710B0EF190": "10.0.23", "7224164B5918E29AF52365AF3EAF7A500": "10.1.51.66", "03D99C42D7475B46D77E64D4D5386D6D0": "9.0.115.0", "0B03252A5C303973E320CAA6127441F80": "9.0.260.0", "77CB5AC61C456B965D0B41361B3F6CEA0": "10.0.22.87", "986682965B43DFA62E0A0DFFD7B7417F0": "10.0.23", "D1AAAB5D417861E6A5B835B01D3039550": "10.0.45.2", "974873A0A6AD482F8F17A7C55F0A33390": "9.0.262.0", "F43004FFC4944F26AF228334F2CDA80B0": "9.0.151.0", "BF6B3B51ACB255B38FCD8AA5AEB9F1030": "9.0.28.0", "8355DCF076564B6784C517FD0ECCB2F20": "9.0.124.0", "6761F4FA49B5F55833D66CAC0BBF8CB80": "9.0.246.0", "860692A215F054B7B9474B410ABEB5300": "10.0.22.87", "C5B5651B46B7612E118339D19A6E66360": "9.0.45.0", "B19EE2363941C9582E040B99BB5E237A0": "10.0.32.18", "38AEB67F6A0B43C6A341D7936603E84A0": "10.0.12.36", "B482D3DFD57C23B5754966F42D4CBCB60": "9.0.262.0", "EBD27FDBA9D9B3880550B2446902EC4A0": "10.0.45.2", "4EDBBD7016E8871A461CCABB7F1B16120": "10.1", "0CFAF1611A3C4AA382D26424D609F00B0": "9.0.47.0", "890664D4EF567481ACFD2A21E9D2A2420": "9.0.151.0", "1C8715E734B31A2EACE3B0CFC1CF21EB0": "9.0.159.0", "266780DB53C4AAC830AFF69306C5C0300": "10.0.42.34", "C6CDEFCDB58EFE5C6ECEF0C463C979F80": "10.1.51.66", "27CC04C9588E482A948FB5A87E22687B0": "9.0.159.0", "83CF4DC03621B778E931FC713889E8F10": "9.0.16.0", "51C00B72112812428EFA8F4A37F683A80": "9.0.124.0", "9FA57B6DC7FF4CFE9A518442325E91CB0": "9.0.115.0", "C4D637F2C8494896FBD4B3EF0319EBAC0": "10.0.42.34", "025105C956638D665850591768FB743D0": "10.0.32.18", "AE71D92D2812430FA05238C52F7E20310": "9.0.246.0", "0F3262B5501A34B963E5DF3F0386C9910": "9.0.47.0", "776944FD51654CA2B59AB26A33D8F9B30": "10.0.12.36"}'

    # name: minidump_stackwalk_pathname
    # doc: the full pathname of the extern program minidump_stackwalk (quote path with embedded spaces)
    # converter: str
    minidump_stackwalk_pathname='./stackwalk/bin/minidump_stackwalk'

    # name: processor_class
    # doc: the class that transforms raw crashes into processed crashes
    # converter: configman.converters.class_converter
    processor_class='socorro.processor.legacy_processor.LegacyCrashProcessor'

    # name: processor_symbols_pathname_list
    # doc: comma or space separated list of symbol files for minidump_stackwalk (quote paths with embedded spaces)
    # converter: socorro.processor.legacy_processor.create_symbol_path_str
    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'

    # name: stackwalk_command_line
    # doc: the template for the command to invoke minidump_stackwalk
    # converter: str
    stackwalk_command_line='$minidump_stackwalk_pathname -m $dumpfilePathname $processor_symbols_pathname_list 2>/dev/null'

    # name: symbol_cache_path
    # doc: the path where the symbol cache is found (quote path with embedded spaces)
    # converter: str
    symbol_cache_path='/mnt/socorro/symbols'

    # name: transaction_executor_class
    # doc: a class that will manage transactions
    # converter: configman.converters.class_converter
    transaction_executor_class='socorro.database.transaction_executor.TransactionExecutor'

    [[c_signature]]

        # name: c_signature_tool_class
        # doc: the class that can generate a C signature
        # converter: configman.converters.class_converter
        c_signature_tool_class='socorro.processor.signature_utilities.CSignatureTool'

        # name: irrelevant_signature_re
        # doc: a regular expression matching frame signatures that should be ignored when generating an overall signature
        # converter: eval
        #irrelevant_signature_re=''

        # name: prefix_signature_re
        # doc: a regular expression matching frame signatures that should always be coupled with the following frame signature when generating an overall signature
        # converter: eval
        #prefix_signature_re=''

        # name: signature_sentinels
        # doc: a list of frame signatures that should always be considered top of the stack if present in the stack
        # converter: eval
        #signature_sentinels=''

        # name: signatures_with_line_numbers_re
        # doc: any signatures that match this list should be combined with their associated source code line numbers
        # converter: str
        signatures_with_line_numbers_re='js_Interpret'

    [[java_signature]]

        # name: java_signature_tool_class
        # doc: the class that can generate a Java signature
        # converter: configman.converters.class_converter
        java_signature_tool_class='socorro.processor.signature_utilities.JavaSignatureTool'

    [[statistics]]

        # name: active_counters_list
        # doc: a comma delimeted list of counters
        # converter: socorro.lib.statistics.str_to_list
        active_counters_list=''

        # name: prefix
        # doc: a string to be used as the prefix for statsd names
        # converter: str
        prefix=''

        # name: stats_class
        # doc: name of a class that will gather statistics
        # converter: configman.converters.class_converter
        stats_class='socorro.lib.statistics.StatisticsForStatsd'

        # name: statsd_host
        # doc: the hostname of statsd
        # converter: str
        statsd_host=''

        # name: statsd_port
        # doc: the port number for statsd
        # converter: int
        statsd_port='8125'

[producer_consumer]

    # name: idle_delay
    # doc: the delay in seconds if no job is found
    # converter: int
    idle_delay='7'

    # name: maximum_queue_size
    # doc: the maximum size of the internal queue
    # converter: int
    #maximum_queue_size='8'

    # name: number_of_threads
    # doc: the number of threads
    # converter: int
    #number_of_threads='4'

    # name: producer_consumer_class
    # doc: the class implements a threaded producer consumer queue
    # converter: configman.converters.class_converter
    producer_consumer_class='socorro.lib.threaded_task_manager.ThreadedTaskManager'

[registrar]

    # name: check_in_frequency
    # doc: how often the processor is required to reregister (hh:mm:ss)
    # converter: configman.converters.timedelta_converter
    check_in_frequency='0:0:1:0'

    # name: database_class
    # doc: the class of the registrar's database
    # converter: configman.converters.class_converter
    database_class='socorro.external.postgresql.connection_context.ConnectionContext'

    # name: database_host
    # doc: the hostname of the database
    # converter: str
    database_host='localhost'

    # name: database_name
    # doc: the name of the database
    # converter: str
    database_name='breakpad'

    # name: database_password
    # doc: the user's database password
    # converter: str
    database_password='aPassword'

    # name: database_port
    # doc: the port for the database
    # converter: int
    database_port='5432'

    # name: database_user
    # doc: the name of the user within the database
    # converter: str
    database_user='breakpad_rw'

    # name: processor_id
    # doc: the id number for the processor (must already exist) (0 for create new Id, "auto" for autodetection, "host" for same host, "forcehost" for hostile take over)
    # converter: str
    processor_id='forcehost'

    # name: registrar_class
    # doc: the class that registers and tracks processors
    # converter: configman.converters.class_converter
    registrar_class='socorro.processor.registration_client.ProcessorAppRegistrationClient'

    # name: transaction_executor_class
    # doc: a class that will manage transactions
    # converter: configman.converters.class_converter
    transaction_executor_class='socorro.database.transaction_executor.TransactionExecutor'

[source]

    # name: crashstorage_class
    # doc: the source storage class
    # converter: configman.converters.class_converter
    crashstorage_class='socorro.external.fs.crashstorage.FSLegacyRadixTreeStorage'

    # name: dump_field
    # doc: the default dump field
    # converter: str
    dump_field='upload_file_minidump'

    # name: dump_file_suffix
    # doc: the suffix used to identify a dump file
    # converter: str
    dump_file_suffix='.dump'

    # name: forbidden_keys
    # doc: a comma delimited list of keys to not allowed in the processed crash
    # converter: socorro.external.fs.crashstorage.<lambda>
    forbidden_keys='url, email, user_id, exploitability'

    # name: fs_root
    # doc: a path to a file system
    # converter: socorro.external.fs.crashstorage.<lambda>
    fs_root='/home/socorro/primaryCrashStore'

    # name: json_file_suffix
    # doc: the suffix used to identify a json file
    # converter: str
    json_file_suffix='.json'

    # name: jsonz_file_suffix
    # doc: the suffix used to identify a gzipped json file
    # converter: str
    jsonz_file_suffix='.jsonz'

    # name: name_branch_base
    # doc: the directory base name to use for the named radix tree storage
    # converter: str
    name_branch_base='name'

    # name: umask
    # doc: umask to use for new files
    # converter: int
    umask='18'

