"use strict";
var __assign = (this && this.__assign) || function () {
    __assign = Object.assign || function(t) {
        for (var s, i = 1, n = arguments.length; i < n; i++) {
            s = arguments[i];
            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
                t[p] = s[p];
        }
        return t;
    };
    return __assign.apply(this, arguments);
};
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
    }
    Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
    __setModuleDefault(result, mod);
    return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __generator = (this && this.__generator) || function (thisArg, body) {
    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
    function verb(n) { return function (v) { return step([n, v]); }; }
    function step(op) {
        if (f) throw new TypeError("Generator is already executing.");
        while (_) try {
            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
            if (y = 0, t) op = [op[0] & 2, t.value];
            switch (op[0]) {
                case 0: case 1: t = op; break;
                case 4: _.label++; return { value: op[1], done: false };
                case 5: _.label++; y = op[1]; op = [0]; continue;
                case 7: op = _.ops.pop(); _.trys.pop(); continue;
                default:
                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
                    if (t[2]) _.ops.pop();
                    _.trys.pop(); continue;
            }
            op = body.call(thisArg, _);
        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
    }
};
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getServerSideProps = void 0;
var jsx_runtime_1 = require("react/jsx-runtime");
/*
 *  This file is part of CoCalc: Copyright © 2020 Sagemath, Inc.
 *  License: AGPLv3 s.t. "Commons Clause" – see LICENSE.md for details
 */
var footer_1 = __importDefault(require("components/landing/footer"));
var header_1 = __importDefault(require("components/landing/header"));
var head_1 = __importDefault(require("components/landing/head"));
var antd_1 = require("antd");
var Text = antd_1.Typography.Text;
var with_customize_1 = __importDefault(require("lib/with-customize"));
var customize_1 = require("lib/customize");
var A_1 = __importDefault(require("components/misc/A"));
var antd_2 = require("antd");
var icon_1 = require("@cocalc/frontend/components/icon");
var pricing_item_1 = __importStar(require("components/landing/pricing-item"));
var dedicated_1 = require("@cocalc/util/upgrades/dedicated");
var billing_1 = require("@cocalc/util/consts/billing");
var project_1 = require("@cocalc/util/consts/project");
var config_1 = require("lib/config");
var ICONS = [
    "battery-empty",
    "battery-quarter",
    "battery-half",
    "battery-full",
];
var VMS = [
    dedicated_1.PRICES.vms["n2-highmem-2"],
    dedicated_1.PRICES.vms["n2-standard-4"],
    dedicated_1.PRICES.vms["n2-highmem-8"],
    dedicated_1.PRICES.vms["n2-standard-16"],
];
var VM_CONFIGS = ICONS.map(function (battery, idx) {
    var vm = VMS[idx];
    if (vm == null)
        throw new Error("this should never happen");
    return {
        title: "Example ".concat(idx + 1),
        icon: battery,
        ram: vm.spec.mem,
        cores: vm.spec.cpu,
        price: Math.round(vm.price_day * billing_1.AVG_MONTH_DAYS),
    };
});
var disk_configs = [
    dedicated_1.PRICES.disks["128-standard"],
    dedicated_1.PRICES.disks["128-balanced"],
    dedicated_1.PRICES.disks["128-ssd"],
];
var DISK_CONFIGS = ICONS.slice(1).map(function (battery, idx) {
    var dc = disk_configs[idx];
    if (dc == null)
        throw new Error("this should never happen");
    return {
        title: dc.title,
        icon: battery,
        disk: dc.quota.dedicated_disk.size_gb,
        price: Math.round(billing_1.AVG_MONTH_DAYS * dc.price_day),
        iops: dc.iops,
        mbps: dc.mbps,
    };
});
function Products(_a) {
    var customize = _a.customize;
    var siteName = customize.siteName;
    return ((0, jsx_runtime_1.jsxs)(customize_1.Customize, __assign({ value: customize }, { children: [(0, jsx_runtime_1.jsx)(head_1.default, { title: "Dedicated virtual machines and disks" }), (0, jsx_runtime_1.jsx)(header_1.default, { page: "pricing", subPage: "dedicated" }), (0, jsx_runtime_1.jsxs)(antd_1.Layout.Content, __assign({ style: {
                    backgroundColor: "white",
                } }, { children: [(0, jsx_runtime_1.jsxs)("div", __assign({ style: {
                            maxWidth: config_1.MAX_WIDTH,
                            margin: "15px auto",
                            padding: "15px",
                            backgroundColor: "white",
                        } }, { children: [(0, jsx_runtime_1.jsx)("div", __assign({ style: { textAlign: "center", color: "#444" } }, { children: (0, jsx_runtime_1.jsxs)("h1", __assign({ style: { fontSize: "28pt" } }, { children: [(0, jsx_runtime_1.jsx)(icon_1.Icon, { name: "server", style: { marginRight: "30px" } }), " Dedicated VMs and Disks"] })) })), (0, jsx_runtime_1.jsxs)("div", __assign({ style: { fontSize: "12pt" } }, { children: [(0, jsx_runtime_1.jsx)("h2", { children: (0, jsx_runtime_1.jsx)("strong", { children: "Dedicated Virtual Machines" }) }), (0, jsx_runtime_1.jsxs)("p", { children: ["Upgrade one of your projects to run on a ", (0, jsx_runtime_1.jsx)("b", { children: "Dedicated VM" }), ". This is an additional node in ", siteName, "'s cluster, where resources are not shared with other projects. That machine can be ", (0, jsx_runtime_1.jsx)("b", { children: "much" }), " ", "larger than any of our generic machines as well. This allows you to run much more intensive workloads with consistent performance, because the usual quota limitations do not apply. You can also rent additional disk space for faster additional storage."] }), (0, jsx_runtime_1.jsxs)("p", { children: ["The list of dedicated VM options below are just examples. Visit the ", (0, jsx_runtime_1.jsx)(A_1.default, __assign({ href: "/store/dedicated?type=vm" }, { children: "Dedicated VM Store" })), " to see current options. Besides that, we can provide VM's with almost any configuration", " ", (0, jsx_runtime_1.jsx)(A_1.default, __assign({ href: "https://cloud.google.com/compute/docs/machine-types" }, { children: "that Google Cloud offers:" })), " ", (0, jsx_runtime_1.jsx)("b", { children: "up to 224 CPUs and 12 TB of RAM!" })] }), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)(antd_2.List, { grid: { gutter: 16, column: 4, xs: 1, sm: 1 }, dataSource: VM_CONFIGS, renderItem: function (item) { return ((0, jsx_runtime_1.jsxs)(pricing_item_1.default, __assign({ title: item.title, icon: item.icon }, { children: [(0, jsx_runtime_1.jsx)(pricing_item_1.Line, { amount: item.cores, desc: "CPU" }), (0, jsx_runtime_1.jsx)(pricing_item_1.Line, { amount: item.ram, desc: "RAM" }), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsxs)(Text, __assign({ strong: true, style: { fontSize: "18pt" } }, { children: ["$", item.price, "/month"] }))] }))); } }), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)("h2", { children: (0, jsx_runtime_1.jsx)("strong", { children: "Dedicated Disks" }) }), (0, jsx_runtime_1.jsxs)("p", { children: ["A ", (0, jsx_runtime_1.jsx)("strong", { children: "Dedicated Disk" }), " is an additional storage device mounted into your project. Their", " ", (0, jsx_runtime_1.jsx)(A_1.default, __assign({ href: "https://cloud.google.com/compute/docs/disks/performance" }, { children: "speed" })), " ", "ranges from traditional spinning disks with a rather slow number of operations per second up to fast SSD disks. You do not need to rent a Dedicated VM in order to subscribe to a Dedicated Disk."] }), (0, jsx_runtime_1.jsxs)("p", { children: ["The list of dedicated disk options below are just exmples. Visit the", " ", (0, jsx_runtime_1.jsx)(A_1.default, __assign({ href: "/store/dedicated?type=disk" }, { children: "Dedicated Disk store" })), " to see available options. Usual disk sizes are", " ", (0, jsx_runtime_1.jsx)("strong", { children: "64, 128 and 256 GB" }), ", but we could provide disks", " ", (0, jsx_runtime_1.jsx)(A_1.default, __assign({ href: "https://cloud.google.com/compute/docs/disks/performance" }, { children: "that GCP offers" })), " ", "with up to 64TB of disk space."] }), (0, jsx_runtime_1.jsxs)("p", { children: [(0, jsx_runtime_1.jsx)(Text, __assign({ strong: true }, { children: "Note:" })), " When the subscription ends, all data stored on such a disk will be deleted!"] }), (0, jsx_runtime_1.jsx)(antd_2.List, { grid: { gutter: 16, column: 3, xs: 1, sm: 1 }, dataSource: DISK_CONFIGS, renderItem: function (item) { return ((0, jsx_runtime_1.jsxs)(pricing_item_1.default, __assign({ title: item.title, icon: item.icon }, { children: [(0, jsx_runtime_1.jsx)(pricing_item_1.Line, { amount: item.disk, desc: "Disk space" }), (0, jsx_runtime_1.jsx)(pricing_item_1.Line, { amount: "regular", desc: "Snapshots" }), (0, jsx_runtime_1.jsx)(pricing_item_1.Line, { amount: item.iops, desc: "IOPS r/w" }), (0, jsx_runtime_1.jsx)(pricing_item_1.Line, { amount: item.mbps, desc: "MBps r/w" }), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsxs)(Text, __assign({ strong: true, style: { fontSize: "18pt" } }, { children: ["$", item.price, "/month"] }))] }))); } }), (0, jsx_runtime_1.jsxs)("p", { children: [(0, jsx_runtime_1.jsx)(icon_1.Icon, { name: "info-circle" }), " To ease data transfer, make sure to check out how to mount", " ", (0, jsx_runtime_1.jsx)(A_1.default, __assign({ href: project_1.DOC_CLOUD_STORAGE_URL }, { children: "cloud storage or remote file-systems" })), " ", "into your project as well."] })] }))] })), (0, jsx_runtime_1.jsx)(footer_1.default, {})] }))] })));
}
exports.default = Products;
function getServerSideProps(context) {
    return __awaiter(this, void 0, void 0, function () {
        return __generator(this, function (_a) {
            switch (_a.label) {
                case 0: return [4 /*yield*/, (0, with_customize_1.default)({ context: context })];
                case 1: return [2 /*return*/, _a.sent()];
            }
        });
    });
}
exports.getServerSideProps = getServerSideProps;
//# sourceMappingURL=dedicated.js.map