split template helper into templatehelper and version printer

This commit is contained in:
Kasra Bigdeli
2018-12-05 21:28:00 -08:00
parent 226d39f6ac
commit 1b9565dfb4
7 changed files with 303 additions and 296 deletions
+2 -120
View File
@@ -1,95 +1,29 @@
"use strict";
const request = require("request");
const fs = require("fs-extra");
const ApiStatusCodes = require("../api/ApiStatusCodes");
const Logger = require("../utils/Logger");
const CaptainConstants = require("../utils/CaptainConstants");
function getTagsForImage(imageBaseName, url, allTags) {
if (!url) {
url =
'https://hub.docker.com/v2/repositories/' + imageBaseName + '/tags';
}
return new Promise(function (resolve, reject) {
request(url, function (error, response, body) {
if (error || !body) {
Logger.e(error);
reject(error);
return;
}
try {
// Sometimes Docker server is down and it crashes Captain!
body = JSON.parse(body);
}
catch (e) {
Logger.e(e);
}
let results;
if (body) {
results = body.results;
}
if (!results) {
Logger.e('NO RESULT');
reject(new Error('NO RESULT'));
return;
}
if (!allTags) {
allTags = [];
}
for (let idx = 0; idx < results.length; idx++) {
allTags.push(results[idx].name);
}
if (body.next) {
resolve(getTagsForImage(imageBaseName, body.next, allTags));
return;
}
resolve(allTags);
});
});
}
function firstEndsWithSecond(str1, str2) {
if (!str1 || !str2) {
throw new Error('Str1 or Str2 are null ' + !str1 + ' ' + !str2);
}
const idx = str1.indexOf(str2);
return idx >= 0 && idx + str2.length === str1.length;
}
function isEmpty(obj) {
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
return false;
}
}
return true;
}
const TemplateHelperVersionPrinter = require("./TemplateHelperVersionPrinter");
class TemplateHelper {
constructor() {
const templates = [
{
templateName: 'node',
dockerHubImageName: 'library/node',
dockerFileFromName: 'node',
displayName: 'NodeJS',
tagSuffix: '-alpine',
},
{
templateName: 'php',
dockerHubImageName: 'library/php',
dockerFileFromName: 'php',
displayName: 'PHP',
tagSuffix: '-apache',
},
{
templateName: 'python-django',
dockerHubImageName: 'library/python',
dockerFileFromName: 'python-django',
displayName: 'Python Django',
tagSuffix: '-alpine3.6',
},
{
templateName: 'ruby-rack',
dockerHubImageName: 'library/ruby',
dockerFileFromName: 'ruby-rack',
displayName: 'Ruby Rack',
tagSuffix: '-alpine3.7',
},
];
@@ -98,60 +32,8 @@ class TemplateHelper {
templates[i].postFromLines = fs.readFileSync(dockerfilesRoot + templates[i].templateName, 'utf8');
}
this.templates = templates;
this.cachedImageTags = {};
if (CaptainConstants.isDebug) {
this.printAvailableImageTagsForReadme();
}
}
getDockerVersionsForTemplateName(templateName) {
const self = this;
const templateObj = self.getTemplateFromTemplateName(templateName);
if (isEmpty(this.cachedImageTags)) {
throw ApiStatusCodes.createError(ApiStatusCodes.STATUS_ERROR_GENERIC, 'Please wait about 30 seconds, then try again.');
}
const tags = self.cachedImageTags[templateObj.dockerHubImageName];
const dockerVersions = [];
for (let i = 0; i < tags.length; i++) {
const t = tags[i];
if (firstEndsWithSecond(t, templateObj.tagSuffix)) {
dockerVersions.push(t.substring(0, t.length - templateObj.tagSuffix.length));
}
}
return dockerVersions;
}
printAvailableImageTagsForReadme() {
const self = this;
self.cachedImageTags = {};
const tempCache = {};
for (let i = 0; i < self.templates.length; i++) {
const currentImageName = self.templates[i].dockerHubImageName;
getTagsForImage(currentImageName, undefined, undefined)
.then(function (tags) {
tempCache[currentImageName] = tags;
let isAllDone = true;
for (let j = 0; j < self.templates.length; j++) {
const imageName = self.templates[j].dockerHubImageName;
if (!tempCache[imageName]) {
isAllDone = false;
}
}
if (isAllDone) {
Logger.d('Template Cache Updated!');
self.cachedImageTags = tempCache;
// Used for README
for (let tempIdx = 0; tempIdx < self.templates.length; tempIdx++) {
Logger.d(' ');
Logger.d(self.templates[tempIdx].templateName + '/');
Logger.d(self
.getDockerVersionsForTemplateName(self.templates[tempIdx].templateName)
.join(', '));
Logger.d(' ');
}
}
})
.catch(function (error) {
Logger.e(error);
});
new TemplateHelperVersionPrinter().printAvailableImageTagsForReadme(this.templates);
}
}
getTemplateFromTemplateName(templateName) {
File diff suppressed because one or more lines are too long
@@ -0,0 +1,118 @@
"use strict";
const request = require("request");
const ApiStatusCodes = require("../api/ApiStatusCodes");
const Logger = require("../utils/Logger");
function getTagsForImage(imageBaseName, url, allTags) {
if (!url) {
url =
'https://hub.docker.com/v2/repositories/' + imageBaseName + '/tags';
}
return new Promise(function (resolve, reject) {
request(url, function (error, response, body) {
if (error || !body) {
Logger.e(error);
reject(error);
return;
}
try {
// Sometimes Docker server is down and it crashes Captain!
body = JSON.parse(body);
}
catch (e) {
Logger.e(e);
}
let results;
if (body) {
results = body.results;
}
if (!results) {
Logger.e('NO RESULT');
reject(new Error('NO RESULT'));
return;
}
if (!allTags) {
allTags = [];
}
for (let idx = 0; idx < results.length; idx++) {
allTags.push(results[idx].name);
}
if (body.next) {
resolve(getTagsForImage(imageBaseName, body.next, allTags));
return;
}
resolve(allTags);
});
});
}
function firstEndsWithSecond(str1, str2) {
if (!str1 || !str2) {
throw new Error('Str1 or Str2 are null ' + !str1 + ' ' + !str2);
}
const idx = str1.indexOf(str2);
return idx >= 0 && idx + str2.length === str1.length;
}
function isEmpty(obj) {
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
return false;
}
}
return true;
}
class TemplateHelperVersionPrinter {
constructor() {
this.cachedImageTags = {};
}
getDockerVersionsForTemplateName(templateObj) {
const self = this;
if (isEmpty(this.cachedImageTags)) {
throw ApiStatusCodes.createError(ApiStatusCodes.STATUS_ERROR_GENERIC, 'Please wait about 30 seconds, then try again.');
}
const tags = self.cachedImageTags[templateObj.dockerHubImageName];
const dockerVersions = [];
for (let i = 0; i < tags.length; i++) {
const t = tags[i];
if (firstEndsWithSecond(t, templateObj.tagSuffix)) {
dockerVersions.push(t.substring(0, t.length - templateObj.tagSuffix.length));
}
}
return dockerVersions;
}
printAvailableImageTagsForReadme(templates) {
const self = this;
self.cachedImageTags = {};
const tempCache = {};
for (let i = 0; i < templates.length; i++) {
const currentImageName = templates[i].dockerHubImageName;
getTagsForImage(currentImageName, undefined, undefined)
.then(function (tags) {
tempCache[currentImageName] = tags;
let isAllDone = true;
for (let j = 0; j < templates.length; j++) {
const imageName = templates[j].dockerHubImageName;
if (!tempCache[imageName]) {
isAllDone = false;
}
}
if (isAllDone) {
Logger.d('Template Cache Updated!');
self.cachedImageTags = tempCache;
// Used for README
for (let tempIdx = 0; tempIdx < templates.length; tempIdx++) {
Logger.d(' ');
Logger.d(templates[tempIdx].templateName + '/');
Logger.d(self
.getDockerVersionsForTemplateName(templates[tempIdx])
.join(', '));
Logger.d(' ');
}
}
})
.catch(function (error) {
Logger.e(error);
});
}
}
}
module.exports = TemplateHelperVersionPrinter;
//# sourceMappingURL=TemplateHelperVersionPrinter.js.map
@@ -0,0 +1 @@
{"version":3,"file":"TemplateHelperVersionPrinter.js","sourceRoot":"","sources":["../../src/user/TemplateHelperVersionPrinter.ts"],"names":[],"mappings":"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"}
+7
View File
@@ -16,3 +16,10 @@ export interface IDockerContainerResource {
Limits?: { NanoCPUs?: number; MemoryBytes?: number }
Reservation?: { NanoCPUs?: number; MemoryBytes?: number }
}
export interface ITemplate {
templateName: string
dockerHubImageName: string
tagSuffix: string
postFromLines?: string
}
+4 -175
View File
@@ -3,126 +3,32 @@ import fs = require('fs-extra')
import ApiStatusCodes = require('../api/ApiStatusCodes')
import Logger = require('../utils/Logger')
import CaptainConstants = require('../utils/CaptainConstants')
function getTagsForImage(
imageBaseName: string,
url: string | undefined,
allTags: string[] | undefined
): Promise<string[]> {
if (!url) {
url =
'https://hub.docker.com/v2/repositories/' + imageBaseName + '/tags'
}
return new Promise<string[]>(function(resolve, reject) {
request(
url!,
function(error, response, body) {
if (error || !body) {
Logger.e(error)
reject(error)
return
}
try {
// Sometimes Docker server is down and it crashes Captain!
body = JSON.parse(body)
} catch (e) {
Logger.e(e)
}
let results: any
if (body) {
results = body.results
}
if (!results) {
Logger.e('NO RESULT')
reject(new Error('NO RESULT'))
return
}
if (!allTags) {
allTags = []
}
for (let idx = 0; idx < results.length; idx++) {
allTags.push(results[idx].name)
}
if (body.next) {
resolve(getTagsForImage(imageBaseName, body.next, allTags))
return
}
resolve(allTags)
}
)
})
}
function firstEndsWithSecond(str1: string, str2: string) {
if (!str1 || !str2) {
throw new Error('Str1 or Str2 are null ' + !str1 + ' ' + !str2)
}
const idx = str1.indexOf(str2)
return idx >= 0 && idx + str2.length === str1.length
}
function isEmpty(obj: any) {
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
return false
}
}
return true
}
interface ITemplate {
templateName: string
dockerHubImageName: string
dockerFileFromName: string
displayName: string
tagSuffix: string
postFromLines?: string
}
type AnyHashMap = IHashMapGeneric<any>
import { ITemplate } from '../models/OtherTypes'
import TemplateHelperVersionPrinter = require('./TemplateHelperVersionPrinter')
class TemplateHelper {
private templates: ITemplate[]
private cachedImageTags: AnyHashMap
constructor() {
const templates: ITemplate[] = [
{
templateName: 'node',
dockerHubImageName: 'library/node',
dockerFileFromName: 'node',
displayName: 'NodeJS',
tagSuffix: '-alpine',
},
{
templateName: 'php',
dockerHubImageName: 'library/php',
dockerFileFromName: 'php',
displayName: 'PHP',
tagSuffix: '-apache',
},
{
templateName: 'python-django',
dockerHubImageName: 'library/python',
dockerFileFromName: 'python-django',
displayName: 'Python Django',
tagSuffix: '-alpine3.6',
},
{
templateName: 'ruby-rack',
dockerHubImageName: 'library/ruby',
dockerFileFromName: 'ruby-rack',
displayName: 'Ruby Rack',
tagSuffix: '-alpine3.7',
},
]
@@ -137,89 +43,12 @@ class TemplateHelper {
}
this.templates = templates
this.cachedImageTags = {}
if (CaptainConstants.isDebug) {
this.printAvailableImageTagsForReadme()
}
}
getDockerVersionsForTemplateName(templateName: string) {
const self = this
const templateObj = self.getTemplateFromTemplateName(templateName)
if (isEmpty(this.cachedImageTags)) {
throw ApiStatusCodes.createError(
ApiStatusCodes.STATUS_ERROR_GENERIC,
'Please wait about 30 seconds, then try again.'
new TemplateHelperVersionPrinter().printAvailableImageTagsForReadme(
this.templates
)
}
const tags = self.cachedImageTags[templateObj.dockerHubImageName]
const dockerVersions = []
for (let i = 0; i < tags.length; i++) {
const t = tags[i]
if (firstEndsWithSecond(t, templateObj.tagSuffix)) {
dockerVersions.push(
t.substring(0, t.length - templateObj.tagSuffix.length)
)
}
}
return dockerVersions
}
printAvailableImageTagsForReadme() {
const self = this
self.cachedImageTags = {}
const tempCache: AnyHashMap = {}
for (let i = 0; i < self.templates.length; i++) {
const currentImageName = self.templates[i].dockerHubImageName
getTagsForImage(currentImageName, undefined, undefined)
.then(function(tags) {
tempCache[currentImageName] = tags
let isAllDone = true
for (let j = 0; j < self.templates.length; j++) {
const imageName = self.templates[j].dockerHubImageName
if (!tempCache[imageName]) {
isAllDone = false
}
}
if (isAllDone) {
Logger.d('Template Cache Updated!')
self.cachedImageTags = tempCache
// Used for README
for (
let tempIdx = 0;
tempIdx < self.templates.length;
tempIdx++
) {
Logger.d(' ')
Logger.d(self.templates[tempIdx].templateName + '/')
Logger.d(
self
.getDockerVersionsForTemplateName(
self.templates[tempIdx].templateName
)
.join(', ')
)
Logger.d(' ')
}
}
})
.catch(function(error) {
Logger.e(error)
})
}
}
getTemplateFromTemplateName(templateName: string) {
@@ -0,0 +1,170 @@
import request = require('request')
import fs = require('fs-extra')
import ApiStatusCodes = require('../api/ApiStatusCodes')
import Logger = require('../utils/Logger')
import CaptainConstants = require('../utils/CaptainConstants')
import { ITemplate } from '../models/OtherTypes'
function getTagsForImage(
imageBaseName: string,
url: string | undefined,
allTags: string[] | undefined
): Promise<string[]> {
if (!url) {
url =
'https://hub.docker.com/v2/repositories/' + imageBaseName + '/tags'
}
return new Promise<string[]>(function(resolve, reject) {
request(
url!,
function(error, response, body) {
if (error || !body) {
Logger.e(error)
reject(error)
return
}
try {
// Sometimes Docker server is down and it crashes Captain!
body = JSON.parse(body)
} catch (e) {
Logger.e(e)
}
let results: any
if (body) {
results = body.results
}
if (!results) {
Logger.e('NO RESULT')
reject(new Error('NO RESULT'))
return
}
if (!allTags) {
allTags = []
}
for (let idx = 0; idx < results.length; idx++) {
allTags.push(results[idx].name)
}
if (body.next) {
resolve(getTagsForImage(imageBaseName, body.next, allTags))
return
}
resolve(allTags)
}
)
})
}
function firstEndsWithSecond(str1: string, str2: string) {
if (!str1 || !str2) {
throw new Error('Str1 or Str2 are null ' + !str1 + ' ' + !str2)
}
const idx = str1.indexOf(str2)
return idx >= 0 && idx + str2.length === str1.length
}
function isEmpty(obj: any) {
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
return false
}
}
return true
}
type AnyHashMap = IHashMapGeneric<any>
class TemplateHelperVersionPrinter {
private cachedImageTags: AnyHashMap
constructor() {
this.cachedImageTags = {}
}
getDockerVersionsForTemplateName(templateObj: ITemplate) {
const self = this
if (isEmpty(this.cachedImageTags)) {
throw ApiStatusCodes.createError(
ApiStatusCodes.STATUS_ERROR_GENERIC,
'Please wait about 30 seconds, then try again.'
)
}
const tags = self.cachedImageTags[templateObj.dockerHubImageName]
const dockerVersions = []
for (let i = 0; i < tags.length; i++) {
const t = tags[i]
if (firstEndsWithSecond(t, templateObj.tagSuffix)) {
dockerVersions.push(
t.substring(0, t.length - templateObj.tagSuffix.length)
)
}
}
return dockerVersions
}
printAvailableImageTagsForReadme(templates: ITemplate[]) {
const self = this
self.cachedImageTags = {}
const tempCache: AnyHashMap = {}
for (let i = 0; i < templates.length; i++) {
const currentImageName = templates[i].dockerHubImageName
getTagsForImage(currentImageName, undefined, undefined)
.then(function(tags) {
tempCache[currentImageName] = tags
let isAllDone = true
for (let j = 0; j < templates.length; j++) {
const imageName = templates[j].dockerHubImageName
if (!tempCache[imageName]) {
isAllDone = false
}
}
if (isAllDone) {
Logger.d('Template Cache Updated!')
self.cachedImageTags = tempCache
// Used for README
for (
let tempIdx = 0;
tempIdx < templates.length;
tempIdx++
) {
Logger.d(' ')
Logger.d(templates[tempIdx].templateName + '/')
Logger.d(
self
.getDockerVersionsForTemplateName(
templates[tempIdx]
)
.join(', ')
)
Logger.d(' ')
}
}
})
.catch(function(error) {
Logger.e(error)
})
}
}
}
export = TemplateHelperVersionPrinter