Пример #1
0
// Инициализировать блок из данных сохраненных блоков в файлы
func (b *block) InitFromFiles(pathToDir string, fileInfo os.FileInfo, c chan<- bool) {

	utils.AddTextToLog(utils.LogLevel_TRACE, "Начало инициализации блока")

	var err error
	b.attrs.name = fileInfo.Name()
	currentTime := time.Now().UnixNano() / int64(time.Millisecond)
	fullPathToFile := path.Join(pathToDir, b.attrs.name)

	funcGenerateErr := func(errorNum int) {
		err = errors.New(fmt.Sprintf("Ошибка инициализации блока из даных файла №%d: %s", errorNum, err.Error()))
		utils.AddTextToLog(utils.LogLevel_ERROR, err.Error())
		panic(err.Error())
	}

	if fileInfo.IsDir() {
		b.blockType = blockType_multiple

		var files []os.FileInfo
		if files, err = utils.ReadFilesInDir(fullPathToFile); err != nil {
			funcGenerateErr(1)
		}

		b.subBlocks = make([]subBlock, len(files))
		for i, fi := range files {
			b.subBlocks[i].Attrs.name = fi.Name()
			b.subBlocks[i].Attrs.creationDate = currentTime
			b.subBlocks[i].Attrs.modificationDate = b.subBlocks[i].Attrs.creationDate

			pathToSubBlock := path.Join(fullPathToFile, fi.Name())
			if b.subBlocks[i].Data, err = ioutil.ReadFile(pathToSubBlock); err != nil {
				funcGenerateErr(2)
			}
		}

	} else {
		b.blockType = blockType_simply

		if b.data, err = ioutil.ReadFile(fullPathToFile); err != nil {
			funcGenerateErr(3)
		}

	}

	b.attrs.creationDate = currentTime
	b.attrs.modificationDate = b.attrs.creationDate
	if b.IsForm() {
		b.attrs.groupType = groupTypeForm
	} else if b.IsModule() {
		b.attrs.groupType = groupTypeModule
	} else {
		b.attrs.groupType = groupTypeNoModule
	}

	utils.AddTextToLog(utils.LogLevel_TRACE, "Окончание инициализации блока")
	c <- true
}
Пример #2
0
// Инициализация объекта данными из каталого содержащего распакованный конфигурационный блок
func (c ConfCf) InitFromCatalog(pathToDir string) (err error) {

	utils.AddTextToLog(utils.LogLevel_INFO, "Начало инициализации объекта данными конфигурационного файла из каталога")

	var fileInfos []os.FileInfo

	if fileInfos, err = utils.ReadFilesInDir(pathToDir); err != nil {
		return err
	}

	funcForInitBlocks := func(numStream int, processBlocksTotal int, countBlocks int, blockInitResultChanal chan bool) {
		for i := processBlocksTotal; i < countBlocks && i-processBlocksTotal != numStream; i++ {
			fi := fileInfos[i]
			go c.blocksList[i].InitFromFiles(pathToDir, fi, blockInitResultChanal)
		}
	}

	c.initBlocks(len(fileInfos), funcForInitBlocks)

	utils.AddTextToLog(utils.LogLevel_INFO, "-Окончание инициализации объекта данными конфигурационного файла из каталога")

	return nil
}