Package: aa-market-manager
Market Manager for Alliance AuthMarket Manager and Market Browser plugin forAlliance Auth.Inspired byEveMarketer,Fuzzworks Marketand all those that came before themFeaturesMarket BrowserItem Search with AutocompleteBuy/Sell OrdersRegion filteringOrder highlighting on Corporation and User ownership of OrdersItem Statistics, Medians and PercentilesOrder TypesPublic OrdersCharacter OrdersCorporation OrdersPrivate Structures OrdersConfigurable AlertsSupply Alerts, Ensure adequate volume is on the market at a given price.Price Alerts, Highlights orders that breach a given threshold to find Scalpers and market abuse.Price Alerts (Bargains!), Flip the logic to find bargains like dreads in surrounding regions.Alert DestinationsDiscord WebhooksAA Discordbot channel messagesFeatures - TechnicalCorporation OrdersA Title/Role checker, to find valid tokens to fetch orders.Private Structure OrdersRequires mapping tokens to their allowed Structures and/or Corporation's Structures.Structure ID ResolverResolves Stations via Django-EveUniverse EveEntity resolverResolves Citadels internallyFetches Corporation Citadels from Corporation Tokens loaded with the appropriate EVE Roles ("Station_Manager")get_universe_structures_structure_id requires docking ACL Access. As there is no way to tell who has docking (even the owner corporation is not a guarantee),Will detect and use any tokens loaded by other means, if you request the scopes as part of a wider scoped app (Such as an Audit tool etc.)Managed WatchConfigs, to allow external apps to manage and create their own configs.Very basic currentlySupports Generating and maintaining WatchConfigs for a given fit.Planned FeaturesPrivate Structure OrdersFailing to resolve will disable the token mapping to avoid error-bans.Configurable AlertsRe-List detection, Highlight characters buying and relisting items past a configured threshold.Managed WatchConfigs, to allow external apps to manage and create their own configs.Framework exists, need code.Buybacks?!?InstallationStep 1 - Django Eve UniverseMarket Manager is an App forAlliance Auth, Please make sure you have this installed. Market Manager is not a standalone Django ApplicationMarket Manager needs the Appdjango-eveuniverseto function. Please make sure it is installed before continuing.Step 2 - Install apppipinstallaa-market-managerStep 3 - Configure Auth settingsConfigure your Auth settings (local.py) as follows:Add'marketmanager'toINSTALLED_APPSAdd below lines to your settings file:## Settings for AA-MarketManager# Market OrdersCELERYBEAT_SCHEDULE['marketmanager_fetch_public_market_orders']={'task':'marketmanager.tasks.fetch_public_market_orders','schedule':crontab(minute=0,hour='*/3'),}CELERYBEAT_SCHEDULE['marketmanager_fetch_all_character_orders']={'task':'marketmanager.tasks.fetch_all_character_orders','schedule':crontab(minute=0,hour='*/3'),}CELERYBEAT_SCHEDULE['marketmanager_fetch_all_corporation_orders']={'task':'marketmanager.tasks.fetch_all_corporation_orders','schedule':crontab(minute=0,hour='*/3'),}CELERYBEAT_SCHEDULE['marketmanager_fetch_all_structure_orders']={'task':'marketmanager.tasks.fetch_all_structure_orders','schedule':crontab(minute=0,hour='*/3'),}# Structure InformationCELERYBEAT_SCHEDULE['marketmanager_fetch_public_structures']={'task':'marketmanager.tasks.fetch_public_structures','schedule':crontab(minute=0,hour=4),}CELERYBEAT_SCHEDULE['marketmanager_update_private_structures']={'task':'marketmanager.tasks.update_private_structures','schedule':crontab(minute=0,hour=5),}CELERYBEAT_SCHEDULE['marketmanager_fetch_all_corporations_structures']={'task':'marketmanager.tasks.fetch_all_corporations_structures','schedule':crontab(minute=0,hour=6),}# Watch ConfigsCELERYBEAT_SCHEDULE['marketmanager_update_managed_supply_configs']={'task':'marketmanager.tasks.update_managed_supply_configs','schedule':crontab(minute='0',hour='2'),}CELERYBEAT_SCHEDULE['marketmanager_run_all_watch_configs']={'task':'marketmanager.tasks.run_all_watch_configs','schedule':crontab(minute=0,hour='*/3'),}# Background TasksCELERYBEAT_SCHEDULE['marketmanager_update_all_type_statistics']={'task':'marketmanager.tasks.update_all_type_statistics','schedule':crontab(minute=0,hour=0,day_of_week=1),}# CleanupCELERYBEAT_SCHEDULE['marketmanager_garbage_collection']={'task':'marketmanager.tasks.garbage_collection','schedule':crontab(minute='0',hour=0),}Step 4 - Maintain Alliance AuthRun migrationspython manage.py migrateGather your staticfilespython manage.py collectstaticRestart your projectsupervisorctl restart myauth:Step 5 - Pre-Load Django-EveUniversepython manage.py eveuniverse_load_data mapThis will load Regions, Constellations and Solar SystemsStep 6 (Optional) - Further Pre-Load Django-EveUniverseThis is less required the more you have used eveuniverse in the pastpython manage.py eveuniverse_load_data ships --types-enabled-sections EveType.Section.MARKET_GROUPSThis will load Ships, which are nearly universally on the marketpython manage.py eveuniverse_load_data structures, this will load Structures for use in Filterspython manage.py marketmanager_preload_common_eve_typesThis will preload a series of Types using Groups and Categories I've analyzed to be popular on the market, please note this currently will not import MarketGroups until a market update is run for the first time, this may impact your ability to make SupplyConfigs immediately.Step 7 - ConfigurationIn the Admin interface, visitmarketmanageror<AUTH-URL>/admin/marketmanagerPublic Market ConfigurationSelect the Regions you would like to pull Public Market Data forPlease note Jita (The Forge) is not trivial and will take several minutes to pull and process depending on your hardware.TypeStatistics Calculation ConfigurationsSelect the Regions you would like to calculate Percentiles, Medians and Weighted Averages forWe always calculate these stats across New Eden, but these will likely match Public Market Configuration or the regions where your Private Structures are located.Supply Configs require The Forge selected to use The Forge(Jita) Relative Pricing.An item must have a minimum amount of orders to be calculated (see settings)Private ConfigsMap the appropriate tokens with Access to Docking and Market (this cant be assumed), to the right Structures And/Or Corps.WatchConfig TypesConfigure some supply alertsSupply CheckHighlight Types (Items), that fail to meet a defined configVolume of Items at given price in location
Example. Warn if there is less than 1,000,000 Units of Oxygen Isotopes under 1,000 ISK/Unit, in 9KOE-A.Bargain Finder WIPHighlights Orders that meet a defined config.
Example. Notify if Naglfars under 3,000,000,000 ISK/Unit are on sale in Curse NPC StationsScalp Checker WIPHighlights Orders, that breach Jita/Universe price.
Example. Notify Leadership that Ariel Rin is selling Nanite Repair Paste at over 500% Jita price in Staging.Managed Watch ConfigsFittingsManaged By App =fittingsManaged App-Identifier =fittings.fit.<FIT_ID>Managed App Reason = A user facing reason... a slightly limited subset of WatchConfig settings that will be replicated on each WatchConfig created.PermissionsPermAdmin SitePermDescriptionbasic_market_browsernillCan access the Standard Market BrowserCan access the normal user facing market browseradvanced_market_browsernillCan access the Advanced Market BrowserCan access the more advanced management browser with private detailsorder_highlight_usernillCan access other character's data for own alliance.Enables Highlighting a users own Orders in the Market Browserorder_highlight_corporationnillCan access other character's data for own corp.Enables Highlighting the orders of a users corporation in the Market Browsercan_add_token_characternillCan add a Character Token with required scopesEnables the "Add Character Token" button to request the needed scopes from a usercan_add_token_corporationnillCan add a Corporation Token with required scopesEnables the "Add Corporation Token" button to request the needed scopes from a userSettingsNameDescriptionDefaultMARKETMANAGER_CLEANUP_DAYS_STRUCTURENumber of days without an update, before considering a Structure stale and to be deleted30MARKETMANAGER_CLEANUP_DAYS_ORDERNumber of days without an update, before considering an Order stale and to be deleted30MARKETMANAGER_TASK_PRIORITY_ORDERSCelery task priority for Order tasks5MARKETMANAGER_TASK_PRIORITY_STRUCTURESCelery task priority for Structure tasks4MARKETMANAGER_TASK_PRIORITY_BACKGROUNDCelery task priority for Background tasks7MARKETMANAGER_TASK_PRIORITY_SUPPLY_CONFIGSCelery task priority for SupplyConfig tasks, This is Lower than Orders to ensure it runs while Orders are all up to date6MARKETMANAGER_TASK_PRIORITY_PRICE_CONFIGSCelery task priority for PriceConfig tasks, This is Lower than Orders to ensure it runs while Orders are all up to date6MARKETMANAGER_WEBHOOK_COLOUR_ERRORWebhook colour for Errors16711710MARKETMANAGER_WEBHOOK_COLOUR_WARNINGWebhook colour for Errors14177041MARKETMANAGER_WEBHOOK_COLOUR_INFOWebhook colour for Errors42751MARKETMANAGER_WEBHOOK_COLOUR_SUCCESSWebhook colour for Success6684416MARKETMANAGER_TYPESTATISTICS_MINIMUM_ORDER_COUNTMinimum number of Orders to exist before calculating Medians, Averages and Percentiles10Third Party IntegrationsCreating Watch Configs from external applications is relatively straight forward and Market Manager provides an Optional Model for keeping track of these Watch Configs.How an app maintains these Watch Configs is left to the developer, but Fittings provides a decent starting point using App Signals and referencing the Managed Watch Config model.managed_app should follow python referencing convention.fittings,projectname.modulenamemanaged_app_identifier is up to the app, but i would suggest following from Fittings,fittings.fit.{fit.id}managed_app_reason is presented to users as to_why_ a managed config exists,Standard MWD Eagle x50defmarketmanager_active()->bool:returnapps.is_installed("marketmanager")ifmarketmanager_active():frommarketmanager.modelsimportWatchConfig,ManagedAppConfig# ...# Maintain your Watch Configs here# ...Fittings (Currently from Market Manager)Create and Maintain Watch Configs for x number of a Fit or Fits.ContributingMake sure you have signed theLicense Agreementby logging in athttps://developers.eveonline.combefore submitting any pull requests. All bug fixes or features must not include extra superfluous formatting changes.