@lxdhub/dbsync
Version:
Display, search and copy LXD-images using a web interface.
89 lines • 4.29 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
Object.defineProperty(exports, "__esModule", { value: true });
const db_1 = require("@lxdhub/db");
const common_1 = require("@nestjs/common");
const aigle_1 = require("aigle");
const _ = require("lodash");
const lxd_1 = require("../lxd");
const util_1 = require("../util");
const typeorm_1 = require("typeorm");
const typeorm_2 = require("@nestjs/typeorm");
let OperatingSystemService = class OperatingSystemService {
constructor(operatingSystemRepository, lxdService, dbSyncSettings) {
this.operatingSystemRepository = operatingSystemRepository;
this.lxdService = lxdService;
this.dbSyncSettings = dbSyncSettings;
this.logger = new common_1.Logger('OperatingSystemService');
}
remoteImageToDto(remoteImage) {
return {
version: util_1.trimIfPossible(remoteImage.properties.version),
release: util_1.trimIfPossible(remoteImage.properties.release),
distribution: util_1.trimIfPossible(remoteImage.properties.os)
};
}
getOperatingSystems(remoteImages) {
return _.chain(remoteImages)
.map(remoteImage => this.remoteImageToDto(remoteImage))
.uniqWith(_.isEqual)
.value();
}
async getOrCreate(remoteOperatingSystem) {
// Already exists
let localOperatingSystem = await this.operatingSystemRepository.findOne({
where: {
version: remoteOperatingSystem.version,
release: remoteOperatingSystem.release,
distribution: remoteOperatingSystem.distribution
}
});
if (!localOperatingSystem) {
localOperatingSystem = await this.create(remoteOperatingSystem);
}
return localOperatingSystem;
}
async create(remoteOperatingSystem) {
this.logger.log(`Adding OperatingSystem ` +
`${remoteOperatingSystem.distribution} ` +
`${remoteOperatingSystem.release} ` +
`${remoteOperatingSystem.version}`);
const localOperatingSystem = new db_1.OperatingSystem();
localOperatingSystem.version = remoteOperatingSystem.version;
localOperatingSystem.release = remoteOperatingSystem.release;
localOperatingSystem.distribution = remoteOperatingSystem.distribution;
return this.operatingSystemRepository.save(localOperatingSystem);
}
async imagesDtosToEntity(images) {
return await aigle_1.default.forEachSeries(this.getOperatingSystems(images), async (image) => await this.getOrCreate(image));
}
async synchronize() {
this.logger.log('-> Starting Operating System Synchronisation');
return await aigle_1.default
.resolve(this.dbSyncSettings.lxdhubConfig.remotes)
.forEachSeries(async (remote) => {
const images = await this.lxdService.getRemoteImages(remote);
await this.imagesDtosToEntity(images);
});
}
};
OperatingSystemService = __decorate([
common_1.Injectable(),
__param(0, typeorm_2.InjectRepository(db_1.OperatingSystem)),
__param(2, common_1.Inject('LXDHubDbSyncSettings')),
__metadata("design:paramtypes", [typeorm_1.Repository,
lxd_1.LXDService, Object])
], OperatingSystemService);
exports.OperatingSystemService = OperatingSystemService;
//# sourceMappingURL=operating-system.service.js.map