def doInit(self, *args, **kwargs): """ Action method. """ self._do_block_rebuilding() self.known_suppliers = [ _f for _f in contactsdb.suppliers(customer_idurl=self.customer_idurl) if _f ] if not self.EccMap: if self.customer_idurl == my_id.getIDURL(): self.EccMap = eccmap.Current() lg.info('ECC map %r set from local for my own suppliers' % self.EccMap) if not self.EccMap: known_eccmap_dict = {} for supplier_idurl in self.known_suppliers: known_ecc_map = contactsdb.get_supplier_meta_info( supplier_idurl=supplier_idurl, customer_idurl=self.customer_idurl, ).get('ecc_map', None) if known_ecc_map: if known_ecc_map not in known_eccmap_dict: known_eccmap_dict[known_ecc_map] = 0 known_eccmap_dict[known_ecc_map] += 1 if known_eccmap_dict: all_known_eccmaps = list(known_eccmap_dict.items()) all_known_eccmaps.sort(key=lambda i: i[1], reverse=True) self.EccMap = eccmap.eccmap(all_known_eccmaps[0][0]) lg.info('ECC map %r recognized from suppliers meta info' % self.EccMap) else: known_ecc_map = None if driver.is_on('service_shared_data'): from access import shared_access_coordinator active_share = shared_access_coordinator.get_active_share( self.key_id) if active_share: known_ecc_map = active_share.known_ecc_map if known_ecc_map: self.EccMap = eccmap.eccmap(known_ecc_map) lg.info('ECC map %r recognized from active share %r' % ( self.EccMap, active_share, )) else: num_suppliers = len(self.known_suppliers) if num_suppliers not in eccmap.GetPossibleSuppliersCount(): num_suppliers = settings.DefaultDesiredSuppliers() self.EccMap = eccmap.eccmap( eccmap.GetEccMapName(num_suppliers)) lg.warn( 'no meta info found, guessed ECC map %r from %d known suppliers' % (self.EccMap, len(self.known_suppliers))) self.max_errors = eccmap.GetCorrectableErrors( self.EccMap.NumSuppliers()) if data_receiver.A(): data_receiver.A().addStateChangedCallback( self._on_data_receiver_state_changed)
def GetEccMapSuppliersNumber(eccmapname): """ Reverse method, return a suppliers number for that map. """ global __eccmap2suppliers try: return int(__eccmap2suppliers[eccmapname]) except: from main import settings return settings.DefaultDesiredSuppliers()
def doInit(self, *args, **kwargs): """ Action method. """ self.requests = [] self.current_request = None self.dht_info = None self.my_info = None self.transaction = None self.refresh_period = DHT_RECORD_REFRESH_INTERVAL * settings.DefaultDesiredSuppliers( ) self.refresh_task = LoopingCall(self._on_family_refresh_task)
def __init__(self, supplier_idurl, customer_idurl, needed_bytes, key_id=None, queue_subscribe=True): """ """ self.supplier_idurl = supplier_idurl self.customer_idurl = customer_idurl self.needed_bytes = needed_bytes self.key_id = key_id self.queue_subscribe = queue_subscribe if self.needed_bytes is None: total_bytes_needed = diskspace.GetBytesFromString( settings.getNeededString(), 0) num_suppliers = settings.getSuppliersNumberDesired() if num_suppliers > 0: self.needed_bytes = int( math.ceil(2.0 * total_bytes_needed / float(num_suppliers))) else: self.needed_bytes = int( math.ceil(2.0 * settings.MinimumNeededBytes() / float(settings.DefaultDesiredSuppliers()))) name = 'supplier_%s_%s' % ( nameurl.GetName(self.supplier_idurl), diskspace.MakeStringFromBytes(self.needed_bytes).replace(' ', ''), ) self.request_packet_id = None self.callbacks = {} try: st = bpio.ReadTextFile( settings.SupplierServiceFilename( idurl=self.supplier_idurl, customer_idurl=self.customer_idurl, )).strip() except: st = 'DISCONNECTED' automat.Automat.__init__( self, name, state=st, debug_level=_DebugLevel, log_events=_Debug, log_transitions=_Debug, ) for cb in self.callbacks.values(): cb(self.supplier_idurl, self.state, self.state)
def __init__(self, supplier_idurl, customer_idurl, needed_bytes): """ """ self.supplier_idurl = supplier_idurl self.customer_idurl = customer_idurl self.needed_bytes = needed_bytes if self.needed_bytes is None: total_bytes_needed = diskspace.GetBytesFromString( settings.getNeededString(), 0) num_suppliers = settings.getSuppliersNumberDesired() if num_suppliers > 0: self.needed_bytes = int( math.ceil(2.0 * total_bytes_needed / float(num_suppliers))) else: self.needed_bytes = int( math.ceil(2.0 * settings.MinimumNeededBytes() / float(settings.DefaultDesiredSuppliers()))) name = 'supplier_%s_%s' % ( nameurl.GetName(self.supplier_idurl), diskspace.MakeStringFromBytes(self.needed_bytes).replace(' ', ''), ) self.request_packet_id = None self.callbacks = {} try: st = bpio.ReadTextFile( settings.SupplierServiceFilename( idurl=self.supplier_idurl, customer_idurl=self.customer_idurl, )).strip() except: st = 'DISCONNECTED' if st == 'CONNECTED': automat.Automat.__init__(self, name, 'CONNECTED', _DebugLevel, _Debug) elif st == 'NO_SERVICE': automat.Automat.__init__(self, name, 'NO_SERVICE', _DebugLevel, _Debug) else: automat.Automat.__init__(self, name, 'DISCONNECTED', _DebugLevel, _Debug) for cb in self.callbacks.values(): cb(self.supplier_idurl, self.state, self.state)
def doRebuildFamily(self, *args, **kwargs): """ Action method. """ dht_info_valid = self._do_validate_dht_info(args[0]) my_info_valid = self._do_validate_my_info(self.my_info) latest_revision = self._do_detect_latest_revision( dht_info_valid, my_info_valid) merged_info = None if latest_revision > 0: merged_info = self._do_merge_revisions(dht_info_valid, my_info_valid, latest_revision) if not merged_info: merged_info = self._do_create_first_revision(self.current_request) # if not merged_info: # lg.err('failed to merge customer family info after reading from DHT, skip transaction') # self.transaction = None # return possible_transaction = self._do_process_request( merged_info, self.current_request) if not possible_transaction: lg.err( 'failed to process customer family change request, skip transaction' ) return self.transaction = self._do_increment_revision(possible_transaction) if _Debug: lg.out( _DebugLevel, 'family_member._do_build_transaction : %r' % self.transaction) self.refresh_period = DHT_RECORD_REFRESH_INTERVAL * settings.DefaultDesiredSuppliers( ) if self.transaction: known_ecc_map = self.transaction.get('ecc_map') if known_ecc_map: expected_suppliers_count = eccmap.GetEccMapSuppliersNumber( known_ecc_map) self.refresh_period = DHT_RECORD_REFRESH_INTERVAL * expected_suppliers_count
def __init__(self): self.installer_state_to_page = { 'AT_STARTUP': self.renderSelectPage, 'WHAT_TO_DO?': self.renderSelectPage, 'INPUT_NAME': self.renderInputNamePage, 'REGISTER': self.renderRegisterNewUserPage, 'AUTHORIZED': self.renderRegisterNewUserPage, 'LOAD_KEY': self.renderLoadKeyPage, 'RECOVER': self.renderRestorePage, 'RESTORED': self.renderRestorePage, 'WIZARD': self.renderWizardPage, 'DONE': self.renderLastPage, } self.install_wizard_state_to_page = { 'READY': self.renderWizardStartPage, 'STORAGE': self.renderWizardStoragePage, 'CONTACTS': self.renderWizardContactsPage, 'LAST_PAGE': self.renderLastPage, 'DONE': self.renderLastPage, } self.data = { 'username': bpio.ReadTextFile(settings.UserNameFilename()).strip(), 'pksize': settings.DefaultPrivateKeySize(), 'needed': str(int(settings.DefaultNeededBytes() / (1024 * 1024))), 'donated': str(int(settings.DefaultDonatedBytes() / (1024 * 1024))), 'suppliers': str(settings.DefaultDesiredSuppliers()), 'customersdir': unicode(settings.getCustomersFilesDir()), 'localbackupsdir': unicode(settings.getLocalBackupsDir()), 'restoredir': unicode(settings.getRestoreDir()), 'idurl': '', 'keysrc': '', 'name': '', 'surname': '', 'nickname': '', } installer.A('init')
def doRequestService(self, arg): """ Action method. """ bytes_needed = diskspace.GetBytesFromString(settings.getNeededString(), 0) num_suppliers = settings.getSuppliersNumberDesired() if num_suppliers > 0: bytes_per_supplier = int( math.ceil(2.0 * bytes_needed / float(num_suppliers))) else: bytes_per_supplier = int( math.ceil(2.0 * settings.MinimumNeededBytes() / float(settings.DefaultDesiredSuppliers()))) service_info = 'service_supplier %d' % bytes_per_supplier request = p2p_service.SendRequestService(self.idurl, service_info, callbacks={ commands.Ack(): self._supplier_acked, commands.Fail(): self._supplier_failed, }) self.request_packet_id = request.PacketID
def doInit(self, *args, **kwargs): """ Action method. """ self.known_suppliers = [ _f for _f in contactsdb.suppliers(customer_idurl=self.customer_idurl) if _f ] known_eccmap_dict = {} for supplier_idurl in self.known_suppliers: known_ecc_map = contactsdb.get_supplier_meta_info( supplier_idurl=supplier_idurl, customer_idurl=self.customer_idurl, ).get('ecc_map', None) if known_ecc_map: if known_ecc_map not in known_eccmap_dict: known_eccmap_dict[known_ecc_map] = 0 known_eccmap_dict[known_ecc_map] += 1 if known_eccmap_dict: all_known_eccmaps = list(known_eccmap_dict.items()) all_known_eccmaps.sort(key=lambda i: i[1], reverse=True) self.EccMap = eccmap.eccmap(all_known_eccmaps[0][0]) lg.info('eccmap %s recognized from suppliers meta info' % self.EccMap) else: num_suppliers = len(self.known_suppliers) if num_suppliers == 0: num_suppliers = settings.DefaultDesiredSuppliers() self.EccMap = eccmap.eccmap(eccmap.GetEccMapName(num_suppliers)) lg.warn( 'no meta info found, guessed eccmap %s from %d known suppliers' % (self.EccMap, len(self.known_suppliers))) if data_receiver.A(): data_receiver.A().addStateChangedCallback( self._on_data_receiver_state_changed)
def reset(conf_obj): """ Configure default values for all BitDust local settings inside ~/.bitdust/config/ folder. Every option must have a default value, however there are exceptions possible. Here all items suppose to have some widget in UI to interact with human. Keep it simple and understandable. """ from lib import diskspace from main import settings conf_obj.setDefaultValue('interface/api/auth-secret-enabled', 'true') conf_obj.setDefaultValue('interface/api/rest-http-enabled', 'true') conf_obj.setDefaultValue('interface/api/rest-http-port', settings.DefaultRESTHTTPPort()) conf_obj.setDefaultValue('interface/api/web-socket-enabled', 'true') conf_obj.setDefaultValue('interface/api/web-socket-port', settings.DefaultWebSocketPort()) conf_obj.setDefaultValue('interface/ftp/enabled', 'true') conf_obj.setDefaultValue('interface/ftp/port', settings.DefaultFTPPort()) conf_obj.setDefaultValue('logs/api-enabled', 'false') conf_obj.setDefaultValue('logs/automat-transitions-enabled', 'false') conf_obj.setDefaultValue('logs/automat-events-enabled', 'false') conf_obj.setDefaultValue('logs/debug-level', settings.defaultDebugLevel()) conf_obj.setDefaultValue('logs/memdebug-enabled', 'false') conf_obj.setDefaultValue('logs/memdebug-port', '9996') conf_obj.setDefaultValue('logs/memprofile-enabled', 'false') conf_obj.setDefaultValue('logs/packet-enabled', 'false') conf_obj.setDefaultValue('logs/stream-enabled', 'false') conf_obj.setDefaultValue('logs/stream-port', settings.DefaultWebLogPort()) conf_obj.setDefaultValue('logs/traffic-enabled', 'false') conf_obj.setDefaultValue('logs/traffic-port', settings.DefaultWebTrafficPort()) conf_obj.setDefaultValue('paths/backups', '') conf_obj.setDefaultValue('paths/customers', '') conf_obj.setDefaultValue('paths/messages', '') conf_obj.setDefaultValue('paths/receipts', '') conf_obj.setDefaultValue('paths/restore', '') conf_obj.setDefaultValue('personal/private-key-size', settings.DefaultPrivateKeySize()) conf_obj.setDefaultValue('services/accountant/enabled', 'false') conf_obj.setDefaultValue('services/backup-db/enabled', 'true') conf_obj.setDefaultValue('services/backups/enabled', 'true') conf_obj.setDefaultValue( 'services/backups/block-size', diskspace.MakeStringFromBytes(settings.DefaultBackupBlockSize())) conf_obj.setDefaultValue( 'services/backups/max-block-size', diskspace.MakeStringFromBytes(settings.DefaultBackupMaxBlockSize())) conf_obj.setDefaultValue('services/backups/max-copies', '2') conf_obj.setDefaultValue('services/backups/keep-local-copies-enabled', 'true') conf_obj.setDefaultValue('services/backups/wait-suppliers-enabled', 'true') conf_obj.setDefaultValue('services/blockchain/enabled', 'false') conf_obj.setDefaultValue('services/blockchain/host', '127.0.0.1') conf_obj.setDefaultValue('services/blockchain/port', 9100) conf_obj.setDefaultValue('services/blockchain/seeds', '') conf_obj.setDefaultValue('services/blockchain/explorer/enabled', 'true') conf_obj.setDefaultValue('services/blockchain/explorer/port', 9180) conf_obj.setDefaultValue('services/blockchain/wallet/enabled', 'true') conf_obj.setDefaultValue('services/blockchain/wallet/port', 9280) conf_obj.setDefaultValue('services/blockchain/miner/enabled', 'false') conf_obj.setDefaultValue('services/broadcasting/enabled', 'false') conf_obj.setDefaultValue('services/broadcasting/routing-enabled', 'false') conf_obj.setDefaultValue('services/broadcasting/max-broadcast-connections', '3') conf_obj.setDefaultValue('services/contract-chain/enabled', 'false') conf_obj.setDefaultValue('services/customer/enabled', 'true') conf_obj.setDefaultValue( 'services/customer/needed-space', diskspace.MakeStringFromBytes(settings.DefaultNeededBytes())) conf_obj.setDefaultValue('services/customer/suppliers-number', settings.DefaultDesiredSuppliers()) conf_obj.setDefaultValue('services/customer-contracts/enabled', 'false') conf_obj.setDefaultValue('services/customer-family/enabled', 'true') conf_obj.setDefaultValue('services/customer-patrol/enabled', 'true') conf_obj.setDefaultValue('services/customer-patrol/customer-idle-days', 14) conf_obj.setDefaultValue('services/customer-support/enabled', 'true') conf_obj.setDefaultValue('services/data-disintegration/enabled', 'true') conf_obj.setDefaultValue('services/data-motion/enabled', 'true') conf_obj.setDefaultValue( 'services/data-motion/supplier-request-queue-size', 4) conf_obj.setDefaultValue( 'services/data-motion/supplier-sending-queue-size', 4) conf_obj.setDefaultValue('services/entangled-dht/enabled', 'true') conf_obj.setDefaultValue('services/entangled-dht/udp-port', settings.DefaultDHTPort()) conf_obj.setDefaultValue('services/entangled-dht/known-nodes', '') conf_obj.setDefaultValue('services/entangled-dht/attached-layers', '') conf_obj.setDefaultValue('services/employer/enabled', 'true') conf_obj.setDefaultValue( 'services/employer/replace-critically-offline-enabled', 'true') conf_obj.setDefaultValue('services/employer/candidates', '') conf_obj.setDefaultValue('services/gateway/enabled', 'true') conf_obj.setDefaultValue('services/http-connections/enabled', 'false') conf_obj.setDefaultValue('services/http-connections/http-port', settings.DefaultHTTPPort()) conf_obj.setDefaultValue('services/http-transport/enabled', 'false') # not done yet conf_obj.setDefaultValue('services/http-transport/receiving-enabled', 'true') conf_obj.setDefaultValue('services/http-transport/sending-enabled', 'true') conf_obj.setDefaultValue('services/http-transport/priority', 50) conf_obj.setDefaultValue('services/identity-server/enabled', 'false') conf_obj.setDefaultValue('services/identity-server/host', '') conf_obj.setDefaultValue('services/identity-server/tcp-port', settings.IdentityServerPort()) conf_obj.setDefaultValue('services/identity-server/web-port', settings.IdentityWebPort()) conf_obj.setDefaultValue('services/identity-propagate/enabled', 'true') conf_obj.setDefaultValue('services/identity-propagate/known-servers', '') conf_obj.setDefaultValue('services/identity-propagate/preferred-servers', '') conf_obj.setDefaultValue('services/identity-propagate/min-servers', 2) conf_obj.setDefaultValue('services/identity-propagate/max-servers', 5) conf_obj.setDefaultValue( 'services/identity-propagate/automatic-rotate-enabled', 'true') conf_obj.setDefaultValue( 'services/identity-propagate/health-check-interval-seconds', 60 * 5) conf_obj.setDefaultValue('services/ip-port-responder/enabled', 'true') conf_obj.setDefaultValue('services/keys-registry/enabled', 'true') conf_obj.setDefaultValue('services/keys-storage/enabled', 'true') conf_obj.setDefaultValue( 'services/keys-storage/reset-unreliable-backup-copies', 'true') conf_obj.setDefaultValue('services/list-files/enabled', 'true') conf_obj.setDefaultValue('services/message-broker/enabled', 'false') conf_obj.setDefaultValue('services/message-broker/archive-chunk-size', 100) conf_obj.setDefaultValue('services/message-broker/message-ack-timeout', 30) conf_obj.setDefaultValue( 'services/message-broker/broker-negotiate-ack-timeout', 30) conf_obj.setDefaultValue('services/message-broker/preferred-brokers', '') conf_obj.setDefaultValue('services/message-history/enabled', 'true') conf_obj.setDefaultValue('services/miner/enabled', 'false') conf_obj.setDefaultValue('services/my-data/enabled', 'true') conf_obj.setDefaultValue('services/my-ip-port/enabled', 'true') conf_obj.setDefaultValue('services/network/enabled', 'true') conf_obj.setDefaultValue('services/network/proxy/enabled', 'false') conf_obj.setDefaultValue('services/network/proxy/host', '') conf_obj.setDefaultValue('services/network/proxy/password', '') conf_obj.setDefaultValue('services/network/proxy/port', '') conf_obj.setDefaultValue('services/network/proxy/ssl', 'false') conf_obj.setDefaultValue('services/network/proxy/username', '') conf_obj.setDefaultValue('services/network/receive-limit', settings.DefaultBandwidthInLimit()) conf_obj.setDefaultValue('services/network/send-limit', settings.DefaultBandwidthOutLimit()) conf_obj.setDefaultValue('services/nodes-lookup/enabled', 'true') conf_obj.setDefaultValue('services/p2p-hookups/enabled', 'true') conf_obj.setDefaultValue('services/p2p-notifications/enabled', 'true') conf_obj.setDefaultValue('services/personal-messages/enabled', 'true') conf_obj.setDefaultValue('services/private-groups/enabled', 'true') conf_obj.setDefaultValue('services/private-groups/message-ack-timeout', 30) conf_obj.setDefaultValue('services/private-groups/broker-connect-timeout', 120) conf_obj.setDefaultValue('services/private-groups/preferred-brokers', '') conf_obj.setDefaultValue('services/private-messages/enabled', 'true') conf_obj.setDefaultValue( 'services/private-messages/acknowledge-unread-messages-enabled', 'true') conf_obj.setDefaultValue('services/proxy-server/enabled', 'false') conf_obj.setDefaultValue('services/proxy-server/routes-limit', 20) conf_obj.setDefaultValue('services/proxy-server/current-routes', '{}') conf_obj.setDefaultValue('services/proxy-transport/enabled', 'true') conf_obj.setDefaultValue('services/proxy-transport/sending-enabled', 'true') conf_obj.setDefaultValue('services/proxy-transport/receiving-enabled', 'true') conf_obj.setDefaultValue('services/proxy-transport/priority', 100) conf_obj.setDefaultValue('services/proxy-transport/preferred-routers', '') # conf_obj.setDefaultValue('services/proxy-transport/router-lifetime-seconds', 600) # TODO: those two settings needs to be removed. # if service require storing locally value which user should not modify be implemented # inside service (for example read/write to local file inside ~/.bitdust/*/ folder) # in the future we can split all files more structural way into ~/.bitdust/services/*/ sub folders conf_obj.setDefaultValue('services/proxy-transport/my-original-identity', '') conf_obj.setDefaultValue('services/proxy-transport/current-router', '') conf_obj.setDefaultValue('services/rebuilding/enabled', 'true') conf_obj.setDefaultValue('services/restores/enabled', 'true') conf_obj.setDefaultValue('services/shared-data/enabled', 'true') conf_obj.setDefaultValue('services/supplier/enabled', 'true') conf_obj.setDefaultValue( 'services/supplier/donated-space', diskspace.MakeStringFromBytes(settings.DefaultDonatedBytes())) conf_obj.setDefaultValue('services/supplier-contracts/enabled', 'false') conf_obj.setDefaultValue('services/tcp-connections/enabled', 'true') conf_obj.setDefaultValue('services/tcp-connections/tcp-port', settings.DefaultTCPPort()) conf_obj.setDefaultValue('services/tcp-connections/upnp-enabled', 'true') conf_obj.setDefaultValue('services/tcp-transport/enabled', 'true') conf_obj.setDefaultValue('services/tcp-transport/receiving-enabled', 'true') conf_obj.setDefaultValue('services/tcp-transport/sending-enabled', 'true') conf_obj.setDefaultValue('services/tcp-transport/priority', 10) conf_obj.setDefaultValue('services/udp-datagrams/enabled', 'true') conf_obj.setDefaultValue('services/udp-datagrams/udp-port', settings.DefaultUDPPort()) # TODO: UDP transport was temporary switched off conf_obj.setDefaultValue('services/udp-transport/enabled', 'false') conf_obj.setDefaultValue('services/udp-transport/receiving-enabled', 'true') conf_obj.setDefaultValue('services/udp-transport/sending-enabled', 'true') conf_obj.setDefaultValue('services/udp-transport/priority', 20)