Скачать 1.13 Mb.
|
Приложение Б Основной модуль программы ___________________ Аннотация Данное приложение представлено в виде модуля для языка Python, которое представляет собой общую библиотеку для платформы VirtPlatform и реализующее спецификацию протокола AgentProtocol.txt. _____________________ ! * Наименование программы: VirtPlatform ! * Авторы: Харин Илья, Соколков Роман, Гуреев Илья ! * Версия: 1.0 ! * Дата создания: 13 сентября 2011 ! * Дата последнего изменения: 25 октября 2011 __init__.py from platform import VirtPlatform config.py import yaml class PlatformConfigError(Exception): pass class PlatformConfig(object): def getNodeAddress(self, node_name): raise NotImplementedError def getNodesBySite(self, site_name): raise NotImplementedError def getSiteByNode(self, node_name): raise NotImplementedError def getAllNodes(self): raise NotImplementedError def getAllSites(self): raise NotImplementedError class FilePlatformConfig(PlatformConfig): def __init__(self, config): self.node_to_address = {} self.node_to_site = {} self.site_to_nodes = {} self._loadConfig(config) def _loadConfig(self, config): if type(config) != file: stream = open(config) else: stream = config data = yaml.load(stream) for site_name, nodes in data.iteritems(): site_nodes = [] self.site_to_nodes[site_name] = site_nodes for node_name, node_address in nodes.iteritems(): self.node_to_address[node_name] = node_address self.node_to_site[node_name] = site_name site_nodes.append(node_name) def getNodeAddress(self, node_name): address = self.node_to_address.get(node_name) if address is None: raise PlatformConfigError("Node name %r not found." % node_name) return address def getNodesBySite(self, site_name): nodes = self.site_to_nodes.get(site_name) if nodes is None: raise PlatformConfigError("Site name %r not found." % site_name) return nodes[:] def getSiteByNode(self, node_name): site_name = self.node_to_site.get(node_name) if site_name is None: raise PlatformConfigError("Node name %r not found." % node_name) return site_name def getAllNodes(self): return self.node_to_address.keys() def getAllSites(self): return self.site_to_nodes.keys() platform.py from twisted.internet import reactor, defer from twisted.internet.protocol import Factory from twisted.internet.endpoints import TCP4ClientEndpoint from twisted.python import log from virt_platform.client.protocol import ClientProtocol class AgentPool(object): default_port = 10321 def __init__(self): self._pool = {} @defer.inlineCallbacks def getAgent(self, addr): agent = self._pool.get(addr) if agent: if agent.connected: defer.returnValue(agent) else: self._pool.pop(addr) agent = yield self.createAgent(addr) self._pool[addr] = agent defer.returnValue(agent) @defer.inlineCallbacks def createAgent(self, addr): if ':' in addr: host, port = addr.rsplit(':', 1) if port.isdigit(): port = int(port) else: host, port = addr, self.default_port endpoint = TCP4ClientEndpoint(reactor, host, port) factory = Factory() factory.protocol = ClientProtocol agent = yield endpoint.connect(factory) defer.returnValue(agent) def disconnectAll(self): for agent in self._pool.itervalues(): agent.transport.loseConnection() class VirtPlatformError(Exception): pass class VirtPlatform(object): agentPool = AgentPool def __init__(self, config): self.config = config self.agent_pool = self.agentPool() def msg(self, msg): log.msg("VirtPlatform | %s" % msg) @defer.inlineCallbacks def _getLibvirtAgent(self, node_name): self.msg("Called _getLibvirtAgent(node_name=%r)." % node_name) addr = self.config.getNodeAddress(node_name) agent = yield self.agent_pool.getAgent(addr) self.msg("Result of _getLibvirtAgent(node_name=%r): %r." % (node_name, agent)) defer.returnValue(agent) @defer.inlineCallbacks def _getStorageAgent(self, site_name): self.msg("Called _getStorageAgent(site_name=%r)." % site_name) nodes = self.config.getNodesBySite(site_name) if not nodes: raise VirtPlatformError("Nodes of site %r not found." % site_name) # XXX: now StorageAgent is LibvirtAgent agent = yield self._getLibvirtAgent(nodes[0]) self.msg("Result of _getStorageAgent(site_name=%r): %r" % (site_name, agent)) defer.returnValue(agent) @defer.inlineCallbacks def _getAoEAgent(self, node_name): # XXX: now AoEAgent is LibvirtAgent agent = yield self._getLibvirtAgent(node_name) defer.returnValue(agent) @defer.inlineCallbacks def getNodeInfo(self, node_name): self.msg("Called getNodeInfo(node_name=%r)." % node_name) agent = yield self._getLibvirtAgent(node_name) info = yield agent.getNodeInfo() self.msg("Result of getNodeInfo(node_name=%r): %r." % (node_name, info)) defer.returnValue(info) def getNodeSite(self, node_name): site_name = self.config.getSiteByNode(node_name) return defer.succeed(site_name) def getNodeAddress(self, node_name): node_address = self.config.getNodeAddress(node_name) return defer.succeed(node_address) def listNodes(self): self.msg("Called listNodes().") nodes = self.config.getAllNodes() self.msg("Result of listNodes(): %r." % nodes) return defer.succeed(nodes) def listNodesBySite(self, site_name): self.msg("Called listNodesBySite(site_name=%r)." % site_name) nodes = self.config.getNodesBySite(site_name) self.msg("Result of listNodesBySite(site_name=%r): %r." % (site_name, nodes)) return defer.succeed(nodes) def listSites(self): self.msg("Called listSites().") sites = self.config.getAllSites() self.msg("Result of listSites(): %r." % sites) return defer.succeed(sites) @defer.inlineCallbacks def listDomains(self, node_name): self.msg("Called listDomains(node_name=%r)." % node_name) agent = yield self._getLibvirtAgent(node_name) domains = yield agent.listDomains() self.msg("Result of listDomains(node_name=%r): %r." % (node_name, domains)) defer.returnValue(domains) @defer.inlineCallbacks def listBridges(self, node_name): self.msg("Called listBridges(node_name=%r)." % node_name) agent = yield self._getLibvirtAgent(node_name) bridges = yield agent.listBridges() self.msg("Result of listBridges(node_name=%r): %r." % (node_name, bridges)) defer.returnValue(bridges) @defer.inlineCallbacks def getDomainInfo(self, node_name, domain_name): self.msg("Called getDomainInfo(node_name=%r, domain_name=%r)." % (node_name, domain_name)) agent = yield self._getLibvirtAgent(node_name) domain_info = yield agent.getDomainInfo(domain_name) self.msg("Result of getDomainInfo(node_name=%r, domain_name=%r): %r" % (node_name, domain_name, domain_info)) defer.returnValue(domain_info) @defer.inlineCallbacks def defineDomainXML(self, node_name, xml): self.msg("Called defineDomainXML(node_name=%r, xml=%r)." % (node_name, xml)) agent = yield self._getLibvirtAgent(node_name) yield agent.defineDomainXML(xml) self.msg("Result of defineDomainXML(node_name=%r, xml=%r): ok." % (node_name, xml)) @defer.inlineCallbacks def defineDomainTemplate(self, node_name, template_name, domain_name, memory, number_vcpu, volume_name, network_bridge): self.msg("Called defineDomainTemplate(node_name=%r, template_name=%r, domain_name=%r,\ memory=%r, number_vcpu=%r, volume_name=%r, network_bridge=%r)."\ % (node_name, template_name, domain_name, memory, number_vcpu, volume_name, network_bridge)) agent = yield self._getLibvirtAgent(node_name) yield agent.defineDomainTemplate(template_name, domain_name, memory, number_vcpu, volume_name, network_bridge) self.msg("Result of defineDomainTemplate(node_name=%r, template_name=%r, domain_name=%r,\ memory=%r, number_vcpu=%r, volume_name=%r, network_bridge=%r): ok."\ % (node_name, template_name, domain_name, memory, number_vcpu, volume_name, network_bridge)) @defer.inlineCallbacks def getDomainXML(self, node_name, domain_name): self.msg("Called getDomainXML(node_name=%r, domain_name=%r)." % (node_name, domain_name)) agent = yield self._getLibvirtAgent(node_name) xml = yield agent.getDomainXML(domain_name) self.msg("Result of getDomainXML(node_name=%r, domain_name=%r): %s." % (node_name, domain_name, xml)) defer.returnValue(xml) @defer.inlineCallbacks def startDomain(self, node_name, domain_name): self.msg("Called startDomain(node_name=%r, domain_name=%r)." % (node_name, domain_name)) agent = yield self._getLibvirtAgent(node_name) yield agent.startDomain(domain_name) self.msg("Result of startDomain(node_name=%r, domain_name=%r): ok." % (node_name, domain_name)) @defer.inlineCallbacks def rebootDomain(self, node_name, domain_name): self.msg("Called rebootDomain(node_name=%r, domain_name=%r)." % (node_name, domain_name)) agent = yield self._getLibvirtAgent(node_name) yield agent.rebootDomain(domain_name) self.msg("Result of rebootDomain(node_name=%r, domain_name=%r): ok." % (node_name, domain_name)) @defer.inlineCallbacks def shutdownDomain(self, node_name, domain_name): self.msg("Called shutdownDomain(node_name=%r, domain_name=%r)." % (node_name, domain_name)) agent = yield self._getLibvirtAgent(node_name) yield agent.shutdownDomain(domain_name) self.msg("Result of shutdownDomain(node_name=%r, domain_name=%r): ok." % (node_name, domain_name)) @defer.inlineCallbacks def destroyDomain(self, node_name, domain_name): self.msg("Called destroyDomain(node_name=%r, domain_name=%r)." % (node_name, domain_name)) agent = yield self._getLibvirtAgent(node_name) yield agent.destroyDomain(domain_name) self.msg("Result of destroyDomain(node_name=%r, domain_name=%r): ok." % (node_name, domain_name)) @defer.inlineCallbacks def undefineDomain(self, node_name, domain_name): self.msg("Called undefineDomain(node_name=%r, domain_name=%r)." % (node_name, domain_name)) agent = yield self._getLibvirtAgent(node_name) yield agent.undefineDomain(domain_name) self.msg("Result of undefineDomain(node_name=%r, domain_name=%r): ok." % (node_name, domain_name)) @defer.inlineCallbacks def suspendDomain(self, node_name, domain_name): self.msg("Called suspendDomain(node_name=%r, domain_name=%r)." % (node_name, domain_name)) agent = yield self._getLibvirtAgent(node_name) yield agent.suspendDomain(domain_name) self.msg("Result of suspendDomain(node_name=%r, domain_name=%r): ok." % (node_name, domain_name)) @defer.inlineCallbacks def resumeDomain(self, node_name, domain_name): self.msg("Called resumeDomain(node_name=%r, domain_name=%r)." % (node_name, domain_name)) agent = yield self._getLibvirtAgent(node_name) yield agent.resumeDomain(domain_name) self.msg("Result of resumeDomain(node_name=%r, domain_name=%r): ok." % (node_name, domain_name)) @defer.inlineCallbacks def migrateDomain(self, src_node_name, dst_node_name, domain_name, live=None, persist_dest=None, undefine_source=None, non_shared_disk=None): self.msg("Called migrateDomain(src_node_name=%r, dst_node_name=%r, domain_name=%r,\ live=%r, persist_dest=%r, undefine_source=%r, non_shared_disk=%r)."\ % (src_node_name, dst_node_name, domain_name, live, persist_dest, undefine_source, non_shared_disk)) if live is None: live = False if persist_dest is None: persist_dest = True if undefine_source is None: undefine_source = True if non_shared_disk is None: non_shared_disk = False agent = yield self._getLibvirtAgent(src_node_name) dest = self.config.getNodeAddress(dst_node_name) yield agent.migrateDomain(domain_name, dest, live, persist_dest, undefine_source, non_shared_disk) self.msg("Result of migrateDomain(src_node_name=%r, dst_node_name=%r, domain_name=%r,\ live=%r, persist_dest=%r, undefine_source=%r, non_shared_disk=%r): ok."\ % (src_node_name, dst_node_name, domain_name, live, persist_dest, undefine_source, non_shared_disk)) @defer.inlineCallbacks def migrateDomainWithAoE(self, src_node_name, dst_node_name, domain_name, live=None, persist_dest=None, undefine_source=None): self.msg("Called migrateDomainWithAoE(src_node_name=%r, dst_node_name=%r, domain_name=%r,\ persist_dest=%r, undefine_source=%r)"\ % (src_node_name, dst_node_name, domain_name, persist_dest, undefine_source)) src_agent = yield self._getLibvirtAgent(src_node_name) volumes = yield src_agent.listDomainStorageVolumes(domain_name) for volume in volumes: volume_name = volume['volume_name'] yield self.shareStorageVolumeWithAoE(src_node_name, dst_node_name, volume_name) yield self.migrateDomain(src_node_name, dst_node_name, domain_name, live, persist_dest, undefine_source) self.msg("Result of migrateDomainWithAoE(src_node_name=%r, dst_node_name=%r, domain_name=%r,\ persist_dest=%r, undefine_source=%r)"\ % (src_node_name, dst_node_name, domain_name, persist_dest, undefine_source)) @defer.inlineCallbacks def listDomainStorageVolumes(self, node_name, domain_name): self.msg("Called listDomainVolumes(node_name=%r, domain_name=%r)." % (node_name, domain_name)) agent = yield self._getLibvirtAgent(node_name) result = yield agent.listDomainStorageVolumes(domain_name) self.msg("Result of listDomainVolumes(node_name=%r, domain_name=%r): %r." % (node_name, domain_name, result)) defer.returnValue(result) @defer.inlineCallbacks def exportStorageVolume(self, node_name, volume_name): self.msg("Called exportStorageVolume(node_name=%r, volume_name=%r)." % (node_name, volume_name)) agent = yield self._getAoEAgent(node_name) yield agent.exportStorageVolume(volume_name) self.msg("Result of exportStorageVolume(node_name=%r, volume_name=%r): ok." % (node_name, volume_name)) @defer.inlineCallbacks def importStorageVolume(self, node_name, shelf, slot, filename): self.msg("Called importStorageVolume(node_name=%r, shelf=%r, slot=%r, filename=%r)." % \ (node_name, shelf, slot, filename)) agent = yield self._getAoEAgent(node_name) yield agent.importStorageVolume(shelf, slot, filename) self.msg("Result of importStorageVolume(node_name=%r, shelf=%r, slot=%r, filename=%r): ok." % \ (node_name, shelf, slot, filename)) @defer.inlineCallbacks def createStorageVolume(self, site_name, volume_name, size): self.msg("Called createStorageVolume(site_name=%r, volume_name=%r, size=%r)." %\ (site_name, volume_name, size)) agent = yield self._getStorageAgent(site_name) yield agent.createStorageVolume(volume_name, size) self.msg("Result of createStorageVolume(site_name=%r, volume_name=%r, size=%r): ok." %\ (site_name, volume_name, size)) @defer.inlineCallbacks def removeStorageVolume(self, site_name, volume_name): self.msg("Called removeStorageVolume(site_name=%r, volume_name=%r)." % (site_name, volume_name)) agent = yield self._getStorageAgent(site_name) yield agent.removeStorageVolume(volume_name) self.msg("Result of removeStorageVolume(site_name=%r, volume_name=%r): ok." % (site_name, volume_name)) @defer.inlineCallbacks def extendStorageVolume(self, site_name, volume_name, size, mode): self.msg("Called extendStorageVolume(site_name=%r, volume_name=%r, size=%s, mode=%r)."\ % (site_name, volume_name, size, mode)) agent = yield self._getStorageAgent(site_name) yield agent.extendStorageVolume(volume_name, size, mode) self.msg("Result of extendStorageVolume(site_name=%r, volume_name=%r, size=%s, mode=%r): ok."\ % (site_name, volume_name, size, mode)) @defer.inlineCallbacks def resizeStorageVolumeFS(self, site_name, volume_name): self.msg("Called resizeStorageVolumeFS(site_name=%r, volume_name=%r)."\ % (site_name, volume_name)) agent = yield self._getStorageAgent(site_name) yield agent.resizeStorageVolumeFS(volume_name) self.msg("Result of resizeStorageVolumeFS(site_name=%r, volume_name=%r): ok."\ % (site_name, volume_name)) @defer.inlineCallbacks def listStorageVolumes(self, site_name): self.msg("Called listStorageVolumes(site_name=%r)." % site_name) agent = yield self._getStorageAgent(site_name) result = yield agent.listStorageVolumes() self.msg("Result of listStorageVolues(site_name=%r): %r." % (site_name, result)) defer.returnValue(result) @defer.inlineCallbacks def writeStorageImage(self, site_name, image_name, volume_name): self.msg("Called writeStorageImage(site_name=%r, image_name=%r, volume_name=%r)."\ % (site_name, image_name, volume_name)) agent = yield self._getStorageAgent(site_name) yield agent.writeStorageImage(image_name, volume_name) self.msg("Result of writeStorageImage(site_name=%r, image_name=%r, volume_name=%r): ok."\ % (site_name, image_name, volume_name)) @defer.inlineCallbacks def shareStorageVolumeWithAoE(self, src_node_name, dst_node_name, volume_name): self.msg("Called shareStorageVolumeWithAoE(src_node_name=%r, dst_node_name=%r, volume_name=%r)."\ % (src_node_name, dst_node_name, volume_name)) src_node_agent = yield self._getLibvirtAgent(src_node_name) dst_node_agent = yield self._getLibvirtAgent(dst_node_name) result = yield src_node_agent.exportStorageVolume(volume_name) shelf = result['shelf'] slot = result['slot'] filename = result['filename'] yield dst_node_agent.importStorageVolume(volume_name, shelf, slot, filename) self.msg("Result of shareStorageVolumeWithAoE(src_node_name=%r, dst_node_name=%r, volume_name=%r): ok."\ % (src_node_name, dst_node_name, volume_name)) @defer.inlineCallbacks def deploy(self, node_name, template_name, domain_name, memory, number_vcpu, network_bridge, volume_size, image_name=None): self.msg("Called deploy(template=%r, domain_name=%r, memory=%s, number_vcpu=%s, bridge=%r, volume_size=%s, image_name=%r)."\ % (template_name, domain_name, memory, number_vcpu, network_bridge, volume_size, image_name)) site_name = yield self.getNodeSite(node_name) volume_name = domain_name yield self.createStorageVolume(site_name, volume_name, volume_size) try: if image_name: yield self.writeStorageImage(site_name, image_name, volume_name) yield self.defineDomainTemplate(node_name, template_name, domain_name, memory, number_vcpu, volume_name, network_bridge) except Exception, e: yield self.removeStorageVolume(site_name, volume_name) raise e self.msg("Result of deploy(template=%r, domain_name=%r, memory=%s, number_vcpu=%s, bridge=%r, volume_size=%s, image_name=%r): ok."\ % (template_name, domain_name, memory, number_vcpu, network_bridge, volume_size, image_name)) @defer.inlineCallbacks def getStorageInfo(self, site_name): self.msg("Called getStorageInfo(site_name=%r)." % site_name) agent = yield self._getStorageAgent(site_name) result = yield agent.getStorageInfo() self.msg("Result of getStorageInfo(site_name=%r): %r." % (site_name, result)) defer.returnValue(result) protocol.py import json from twisted.internet import defer from twisted.protocols.basic import Int16StringReceiver from twisted.python import log class Message(object): def __init__(self): self.sequence_number = -1 class Request(Message): def __init__(self, method, data=None): Message.__init__(self) self.type = "request" self.method = method self.data = data def __repr__(self): return " def dump(self): return self.__dict__ @classmethod def load(cls, data): request = cls(data['method'], data['data']) request.sequence_number = data['sequence_number'] return request class Response(Message): default_code = 200 def __init__(self, code=None, data=None, error_msg=None): Message.__init__(self) self.type = "response" if code is None: code = self.default_code self.code = code self.data = data self.error_msg = error_msg def __repr__(self): return " def dump(self): return self.__dict__ @classmethod def load(cls, data): response = cls(data['code'], data['data'], data['error_msg']) response.sequence_number = data['sequence_number'] return response def create_response(request, code=None, data=None, error_msg=None): response = Response(code, data, error_msg) response.sequence_number = request.sequence_number return response def handler(method): method.is_handler = True return method class BaseProtocol(Int16StringReceiver): ''' BaseProtocol specification (wire level). Message: { "sequence_number": int, "type": "request" / "response", } Request message (Message subclass): { "type": "request", "method": str, "data": int / str / list / dict / etc, } Response message (Message subclass): { "type": "response", "code": int, "data": int / str / list / dict / etc, "error_msg": str, } ''' def __init__(self): self.sequence_number = 0 self.pending_requests = {} def stringReceived(self, msg): log.msg("stringReceived: received message: %s." % msg) try: message = json.loads(msg) except ValueError, e: log.msg("Invalid json received: %r" % msg) return for field in ['sequence_number', 'type']: if field not in message: log.msg("Invalid message received: %r. Mandatory field %r not found." % (message, field)) return type = message['type'] if type == 'request': self._requestReceived(message) elif type == 'response': self._responseReceived(message) else: log.msg("Invalid message received: %r. Unknown type %r." % (message, type)) def _requestReceived(self, req): for field in ['method', 'data']: if field not in req: log.msg("Invalid request received: %r. Mandatory field %r not found." % (req, field)) return request = Request.load(req) self.requestReceived(request) def requestReceived(self, request): raise NotImplementedError def _responseReceived(self, resp): for field in ['code', 'data', 'error_msg']: if field not in resp: log.msg("Invalid response received %r. Mandatory field %r not found." % (resp, field)) return response = Response.load(resp) self.responseReceived(response) def responseReceived(self, response): log.msg("Received response %r." % response) d = self.pending_requests.pop(response.sequence_number, None) if not d: log.msg("WARNING: Drop unexpected response: %r." % response) return # TODO: analyze response.code and call errback on error? d.callback(response) def sendRequest(self, request): request.sequence_number = self.sequence_number self.sequence_number +=1 d = defer.Deferred() # TODO: timeouts? self.pending_requests[request.sequence_number] = d msg = json.dumps(request.dump()) self.sendString(msg) return d def sendResponse(self, response): msg = json.dumps(response.dump()) self.sendString(msg) class Protocol(BaseProtocol): def requestReceived(self, request): log.msg("Received request %r." % request) handler = getattr(self.factory, request.method, None) is_handler = getattr(handler, "is_handler", False) if not handler or not is_handler: log.msg("WARNING: Handler for method %r not found." % request.method) response = create_response(request, code=501, error_msg="Method %r not implemented." % request.method) self.sendResponse(response) return log.msg("Found handler %r for method %r." % (handler, request.method)) d = defer.maybeDeferred(handler, self, request) d.addErrback(self._failedResponse, request) d.addCallback(self._completeResponse, request) def _completeResponse(self, response, request): log.msg("Response for request %r: %r" % (request, response)) self.sendResponse(response) def _failedResponse(self, failure, request): log.msg("WARNING: Caught exection for request %r: %s" % (request, failure)) response = create_response(request, code=500, error_msg="Caught exception: %r" % failure.value) return response utils.py from twisted.internet import defer from twisted.python import failure def size_fmt(size): for x in ['K', 'M', 'G']: if size < 1024: return "%.1f%s" % (size, x) size /= 1024. return "%.1fT" % size UNITS_SIZE = {'K': 1, 'M': 1024, 'G': 1024 * 1024, 'T': 1024 * 1024 * 1024} def fmt_to_size(s, default='M'): if s.isdigit(): units = default else: units = s[-1] s = s[:-1] if units not in ['K', 'M', 'G', 'T']: raise ValueError("Unknown size format %s" % s) size = int(s) return size * UNITS_SIZE[units] class ScatterDeferred(defer.Deferred): def __init__(self, deferreds=[]): defer.Deferred.__init__(self) self.deferreds = deferreds[:] def add(self, d): if self.called: if isinstance(self.result, failure.Failure): d.errback(self.result) else: d.callback(self.result) self.deferreds.append(d) def callback(self, result): for d in self.deferreds: d.callback(result) defer.Deferred.callback(self, result) def errback(self, fail=None): for d in self.deferreds: d.errback(fail) defer.Deferred.errback(self, fail) |
«Название темы» Обязательные структурные элементы отчета о нир выделены полужирным шрифтом. В отчет о нир объемом не более 10 страниц содержание... | Реферат Тема нир Тема нир: Исследование возможности принудительного радиоактивного распада ядер вольфрама | ||
Реферат Тема нир Тема нир: Исследование возможности принудительного радиоактивного распада ядер вольфрама | Реферат Тема нир Тема нир: Анализ экономического механизма и разработка критериев эффективности системы консалтинга для издательско-полиграфического... | ||
Реферат Тема нир ... | Реферат Тема нир ... | ||
Реферат Тема нир Тема нир: Анализ экономического механизма и разработка критериев эффективности системы консалтинга для издательско-полиграфического... | Реферат Тема нир Тема нир: Математическое моделирование и исследование квазипериодических структур | ||
Реферат Тема нир Тема нир: Математическое моделирование и исследование квазипериодических структур | Реферат Тема нир Тема нир: Разработка способов снижения износа и повышения химической стойкости резинотехнических изделий для полиграфии и других... | ||
Реферат Тема нир Тема нир: Методология определения цветового и структурного соответствия при сравнении изображений, воспроизведенных на носителях... | Рекомендации по предотвращению типовых недостатков в оформлении итоговых... Нир, выполненных по Программе фи, необходимо соблюдать требования гост 32-2001. По результатам внутренней экспертизы итоговых отчетов... | ||
Рекомендации по предотвращению типовых недостатков в оформлении итоговых... Нир, выполненных по Программе фи, необходимо соблюдать требования гост 32-2001. По результатам внутренней экспертизы итоговых отчетов... | План нир управления инновационного развития Совершенствование моделей краткосрочного прогнозирования социально-экономического развития Российской Федерации | ||
Отчет о нир (заключительный) Рекомендации по оформлению отчетной документации по государственным контрактам на выполнение нир в рамках федеральной целевой программы... | Реферат с элементами нир, представляемый на Конкурс может содержать следующие разделы К положению об организации и проведении конкурса на лучший реферат с элементами нир для студентов младших курсов в рамках ниу |