"use strict";
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 __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getServerSideProps = void 0;
const 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
 */
const footer_1 = __importDefault(require("components/landing/footer"));
const header_1 = __importDefault(require("components/landing/header"));
const head_1 = __importDefault(require("components/landing/head"));
const antd_1 = require("antd");
const { Text } = antd_1.Typography;
const with_customize_1 = __importDefault(require("lib/with-customize"));
const customize_1 = require("lib/customize");
const A_1 = __importDefault(require("components/misc/A"));
const antd_2 = require("antd");
const icon_1 = require("@cocalc/frontend/components/icon");
const pricing_item_1 = __importStar(require("components/landing/pricing-item"));
const dedicated_1 = require("@cocalc/util/upgrades/dedicated");
const billing_1 = require("@cocalc/util/consts/billing");
const project_1 = require("@cocalc/util/consts/project");
const config_1 = require("lib/config");
const pricing_1 = require("components/share/pricing");
const router_1 = require("next/router");
const ICONS = [
    "battery-empty",
    "battery-quarter",
    "battery-half",
    "battery-full",
];
const 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"],
];
const VM_CONFIGS = ICONS.map((battery, idx) => {
    const vm = VMS[idx];
    if (vm == null)
        throw new Error("this should never happen");
    return {
        title: `Example ${idx + 1}`,
        icon: battery,
        ram: vm.spec.mem,
        cores: vm.spec.cpu,
        price: Math.round(vm.price_day * billing_1.AVG_MONTH_DAYS),
    };
});
const disk_configs = [
    dedicated_1.PRICES.disks["128-standard"],
    dedicated_1.PRICES.disks["128-balanced"],
    dedicated_1.PRICES.disks["128-ssd"],
];
const DISK_CONFIGS = ICONS.slice(1).map((battery, idx) => {
    const 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({ customize }) {
    const { siteName } = customize;
    const router = (0, router_1.useRouter)();
    return ((0, jsx_runtime_1.jsxs)(customize_1.Customize, { value: customize, children: [(0, jsx_runtime_1.jsx)(head_1.default, { title: "Dedicated virtual machines and disks" }), (0, jsx_runtime_1.jsxs)(antd_1.Layout, { children: [(0, jsx_runtime_1.jsx)(header_1.default, { page: "pricing", subPage: "dedicated" }), (0, jsx_runtime_1.jsxs)(antd_1.Layout.Content, { style: {
                            backgroundColor: "white",
                        }, children: [(0, jsx_runtime_1.jsxs)("div", { style: {
                                    maxWidth: config_1.MAX_WIDTH,
                                    margin: "15px auto",
                                    padding: "15px",
                                    backgroundColor: "white",
                                }, children: [(0, jsx_runtime_1.jsx)("div", { style: { textAlign: "center", color: "#444" }, children: (0, jsx_runtime_1.jsxs)("h1", { 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", { 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, { 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, { 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: (item) => ((0, jsx_runtime_1.jsxs)(pricing_item_1.default, { 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, { strong: true, style: { fontSize: "18pt" }, children: ["$", item.price, "/month"] })] })) }), (0, jsx_runtime_1.jsx)("p", { style: { textAlign: "center" }, children: (0, jsx_runtime_1.jsx)(antd_1.Button, { size: "large", type: "primary", onClick: () => router.push("/store/dedicated?type=vm"), icon: (0, jsx_runtime_1.jsx)(icon_1.Icon, { name: "shopping-cart" }), children: "Order a VM license" }) }), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)("hr", {}), (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, { 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, { 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, { 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, { 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: (item) => ((0, jsx_runtime_1.jsxs)(pricing_item_1.default, { 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, { strong: true, style: { fontSize: "18pt" }, children: ["$", item.price, "/month"] })] })) }), (0, jsx_runtime_1.jsx)("p", { style: { textAlign: "center" }, children: (0, jsx_runtime_1.jsx)(antd_1.Button, { size: "large", type: "primary", onClick: () => router.push("/store/dedicated?type=disk"), icon: (0, jsx_runtime_1.jsx)(icon_1.Icon, { name: "shopping-cart" }), children: "Subscribe for a dedicated disk" }) }), (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, { href: project_1.DOC_CLOUD_STORAGE_URL, children: "cloud storage or remote file-systems" }), " ", "into your project as well."] })] }), (0, jsx_runtime_1.jsx)("hr", {}), (0, pricing_1.listedPrices)()] }), (0, jsx_runtime_1.jsx)(footer_1.default, {})] }), " "] })] }));
}
exports.default = Products;
async function getServerSideProps(context) {
    return await (0, with_customize_1.default)({ context });
}
exports.getServerSideProps = getServerSideProps;
//# sourceMappingURL=dedicated.js.map