def scan_public_contracts(scan_all=False):
    if (datetime.time(hour=10, minute=55) <= datetime.datetime.now(
            datetime.timezone.utc).time() <= datetime.time(hour=11,
                                                           minute=20)):
        return

    all_regions = ESI.request('get_universe_regions').data
    all_contract_ids = set()

    for region in all_regions:
        number_of_page = ESI.head('get_contracts_public_region_id',
                                  region_id=region).header['X-Pages'][0]

        for page in range(1, number_of_page + 1):
            req = ESI.request('get_contracts_public_region_id',
                              region_id=region,
                              page=page)

            contracts = list(req.data)

            for contract_dict in contracts:
                all_contract_ids.add(contract_dict['contract_id'])

                if contract_dict['type'] not in ['item_exchange', 'auction']:
                    continue

                COUNTER_CONTRACTS_FOUND.labels(
                    region=region, type=contract_dict['type']).inc()

                try:
                    contract = Contract.objects.get(
                        id=contract_dict['contract_id'])

                    if not contract.available:
                        contract.available = True
                        contract.save()

                    if scan_all:
                        scan_contract(dict(contract_dict), region)
                except Contract.DoesNotExist:
                    scan_contract(dict(contract_dict), region)

    Contract.objects.filter(Q(available=True)
                            & ~Q(id__in=all_contract_ids)).update(
                                available=False)
    def create_invtypes(self):
        existing = set(InvType.objects.values_list('id', flat=True))
        available = set()

        res = ESI.head('get_universe_types')

        for p in range(1, 1 + res.header['X-Pages'][0]):
            available |= set(ESI.request('get_universe_types', page=p).data)

        to_fetch = available - existing

        for i in to_fetch:
            data = ESI.request('get_universe_types_type_id', type_id=i).data

            InvType.objects.update_or_create(id=i,
                                             defaults={
                                                 'group_id': data['group_id'],
                                                 'name': data['name'],
                                             })