import React, {Component} from 'react';
import {Link} from 'react-router-dom';
import {deployAll, graphqlUrl, storeFile, copyCos} from "../../../config";
import {ADD_APIGROUP, ADD_APIGWPATH, ADD_DEPLOY, ADD_PROJECT, SHOW_CLOUD} from "../../../gql";
import {CloudConfig} from "../../../login/CloudConfig";
import {Layout, Button, message, Modal, Icon, Steps, Row, Col, Radio, Input} from 'antd';
import {FormattedMessage} from 'react-intl';
import {request} from 'graphql-request'
import {idGen} from "../../../func";
import axios from 'axios';
import './index.css';
const {Content} = Layout;
const Step = Steps.Step;
const RadioGroup = Radio.Group;
axios.defaults.withCredentials = true;
class UserCustom extends Component {
constructor(props) {
super(props);
this.state = {
userID: props.userID,
bucketName: props.bucketName,
cloudName: 'tencent',
disableDeployButton: false,
deployFailed: false,
cloudID: '',
secretID: '',
secretKey: '',
appId: ''
};
console.log(this.state, 'userCustom state')
}
getCloudDetail = (cloudID, secretID, secretKey, appId) => {
this.setState({
cloudID,
secretID,
secretKey,
appId
})
};
componentWillMount() {
this._isMounted = true;
}
componentWillUnmount() {
this._isMounted = false;
}
render() {
let {disableDeployButton, userID, cloudID, bucketName, deployFailed, appId, secretID, secretKey} = this.state;
return (
{
this.props.backToMe()
}}>
发布体验
/>
/>
发布上线
/>
/>
/>
/>
/>
)
}
}
export default UserCustom;
class CloudQueryAndConfig extends Component {
constructor(props) {
super(props);
this.state = {
cloudName: props.cloudName,
userID: props.userID,
cloudID: '',
secretID: '',
secretKey: '',
appId: '',
visible: false,
confirmLoading: false,
}
}
searchCloud = () => {
this._isMounted = true;
let {userID, cloudName} = this.state;
// 如果登录,查询该用户是否设置 cloud
request(graphqlUrl, SHOW_CLOUD, {user_id: userID}).then(data => {
let clouds = data.cloud_by_props.filter(cloud => cloud.cloudName === cloudName);
// 如果限制一个云服务商一个 cloud,那么就是clouds[0]
if (clouds.length === 1) {
let cloud = clouds[0];
let {id, secretId, secretKey, appId} = cloud;
if (this._isMounted) {
this.setState({
cloudID: id,
secretID: secretId,
secretKey,
appId,
});
}
this.props.getCloudDetail(id, secretId, secretKey, appId);
} else if (clouds.length > 1) {
console.log('数据库有多个同一云服务商的 key');
} else {
if (this._isMounted) {
console.log('数据库没有云服务商的 key');
}
}
}
)
};
showModal = () => {
if (this.state.userID) {
this.setState({
visible: true,
});
} else {
message.warning('请先登录');
}
};
handleCancel = () => {
this.setState({
visible: false,
});
this.props.reCheck();
};
componentWillMount() {
this.searchCloud();
this._isMounted = true;
}
componentWillUnmount() {
this._isMounted = false;
}
componentWillReceiveProps(next) {
this.setState({
cloudName: next.cloudName,
userID: next.userID,
}, this.searchCloud);
}
render() {
let {visible, confirmLoading, cloudName} = this.state;
return (
)
}
}
class NameAndDB extends Component {
constructor(props) {
super(props);
this.state = {
userID: props.userID,
visible: false,
confirmLoading: false,
customName: props.bucketName + '-' + props.userID,
dbKind: 'fc-db',
host: '',
db: '',
username: '',
password: '',
admin: '',
disableDeployButton: false
}
}
showModal = () => {
if (this.state.userID) {
this.setState({
visible: true,
});
} else {
message.warning('请先登录');
}
};
handleCancel = () => {
this.setState({
visible: false,
});
};
componentWillMount() {
this._isMounted = true;
}
componentWillUnmount() {
this._isMounted = false;
}
deploy = (userID, dbKind, bucketName, customName, cloudID) => {
this._isMounted = true;
let _this = this;
if (bucketName === '') {
console.log('state, 没有传值');
} else {
console.log('开始调用');
this.setState({
disableDeployButton: true
});
let now = new Date().getTime(),
functionName = userID + '_' + customName,
serviceName = userID + '_' + customName,
resources = [`${bucketName}/schema.edn`, `${bucketName}/resolve-map.edn`, `${bucketName}/${dbKind}/${userID}/deploy-conf.edn`, `${bucketName}/html/index.html`, `${bucketName}/wx-config.edn`];
if (dbKind === 'mongodb') {
resources.push(`${bucketName}/${dbKind}/${userID}/mongo-config.edn`)
}
console.log('now', now, 'functionName', functionName, 'serviceName', serviceName, 'resources', resources);
axios.post(deployAll,
{
'fc-name': functionName,
'bucket': dbKind === 'mongodb' ? 'native-fc' : 'fcdb-deploy',
'object-file': 'fc-only.zip',
'res-bucket': 'case',
'resources': resources,
'service-name': serviceName,
'path': "/*"
})
.then(function (response) {
console.log('response', response);
if (response['data']['apigw-result'] && response['data']['fc-result']) {
// 处理数据
let result = response['data']['apigw-result'];
let apiData = result['api-info'];
let serviceData = result['service-info'];
// 存数据
let pathID = idGen('path'),
groupID = idGen('group'),
deployID = idGen('deploy'),
projectID = idGen('project');
let {apiId, path, method} = apiData;
let {serviceName, serviceId, subDomain} = serviceData;
let pathVarObj = {
id: idGen('path'),
user_id: userID,
apiGWGroup_id: pathID,
deploy_id: deployID,
apiGWName: functionName,
requestMethod: method,
apiGWPath: path,
apiId: apiId,
apiGWDesc: '',
serviceType: 'SCF',
timeout: 300,
createdAt: now,
updatedAt: ''
};
let projectVarObj = {
id: projectID,
projectType: 'case',
cloud_id: cloudID,
user_id: userID,
projectName: functionName,
database_id: '',
apiGWGroup_id: '',
deploy_id: '',
case_id: '',
wxConfig_id: '',
schema_id: '',
createdAt: now,
updatedAt: '',
projectStatus: 'deployed'
};
let groupVarObj = {
id: groupID,
cloud_id: cloudID,
user_id: userID,
userStatus: '',
userDomain: '',
groupName: serviceName,
frontType: '',
region: '',
environmentName: '',
defaultDomain: subDomain,
status: '',
serviceId: serviceId,
createdAt: now,
updatedAt: ''
};
let deployVarObj = {
id: deployID,
cloud_id: cloudID,
functionName,
cosObjectName: '',
region: '',
cosBucketRegion: '',
description: '',
cosBucketName: '',
vpcId: '',
subnetId: '',
memorySize: 512,
timeout: 300,
handler: '',
serviceName: "",
fc_id: '',
createdAt: now,
updatedAt: ''
};
let add_apigwpath = request(graphqlUrl, ADD_APIGWPATH, pathVarObj),
add_project = request(graphqlUrl, ADD_PROJECT, projectVarObj),
add_apigroup = request(graphqlUrl, ADD_APIGROUP, groupVarObj),
add_deploy = request(graphqlUrl, ADD_DEPLOY, deployVarObj);
Promise.all([add_apigwpath, add_project, add_apigroup, add_deploy])
.then(value => {
console.log(value);
// 展示数据
if (_this._isMounted) {
_this.setState({
disableDeployButton: false
});
}
_this.props.history.push({
pathname: `/common/deploy`,
state: {
// 处理传回数据,直接拼接
url: `http://${subDomain}/test/`
}
});
})
.catch(err => {
console.log(err);
});
} else {
console.log('deployAll 失败');
_this.setState({
deployFailed: true,
disableDeployButton: false
})
}
})
.catch(function (error) {
console.log('axios error', error);
});
}
};
storeEdnAndDeploy = (secretID='AKIDkYBvY0LOJ2bzCDmnMjz4xgFertmVJlVE', secretKey='zwjKk29TdcYP8g2FG5kCSWmz3wcH92lN', appId='1254337200', bucketName, dbKind, userID, admin, username, password, db, host, customName, cloudID) => {
// store *.edn to cos
let deployConf = dbKind === 'mongodb' ?
` {:secretId "${secretID}"\n` +
` :secretKey "${secretKey}"\n` +
` :appId "${appId}"\n` +
' :region "ap-beijing" \n' +
' }\n'
:
` {:secretId "${secretID}"\n` +
` :secretKey "${secretKey}"\n` +
` :appId "${appId}"\n` +
' :region "ap-beijing"\n' +
' :bucket "fc-db"\n' +
' :trustStore "/etc/ssl/certs/java/cacerts"\n' +
` :fc-db-store "save/${bucketName}.dat"\n` +
' :fc-db-dir "fc-db"\n' +
' :local-tmp-dir "/tmp"\n' +
' :local-db-file "fcdb.dat"\n' +
' :update-tx? true \n' +
' :force-down? true\n' +
' }';
let a = axios.post(storeFile, {
'file-name': `${bucketName}/${dbKind}/${userID}/deploy-conf.edn`,
bucket: 'case',
cont: deployConf
});
let cont = '{:uri {\n' +
`:auth {:admin-db "${admin}"\n` +
` :u "${username}"\n` +
` :p "${password}"\n` +
` :host "${host}"}}\n` +
` :db-name "${db}"}`;
let b = dbKind === 'mongodb' ?
axios.post(storeFile, {
'file-name': `${bucketName}/${dbKind}/${userID}/mongo-config.edn`,
bucket: 'case',
cont
})
:
Promise.resolve({status: 200});
Promise.all([a, b]).then(value => {
if (value.every(res => res.status === 200)) {
console.log('store file success , start deploying');
this.deploy(userID, dbKind, bucketName, customName, cloudID);
}
});
}
render() {
let {
visible,
confirmLoading,
userID,
dbKind,
host,
db,
username,
password,
admin,
customName,
disableDeployButton
} = this.state;
let {secretID, secretKey, appId, bucketName, cloudID} = this.props
return (
{
this.setState({dbKind: e.target.value})
}} value={this.state.dbKind}>
fc-db
mongodb
{
this.state.dbKind === 'mongodb' ?
:
''
}
{
disableDeployButton?
'正在部署...'
:
}
)
}
}
const Step00 = (props) => (
默认部署至腾讯云. 亚马逊,阿里云等请联系我们
);
const Step01 = (props) => (
扫码查看结果
);
const Step10 = (props) => (
第一步:注册腾讯云账户
);
class Step11 extends Component {
constructor(props) {
super(props);
this.state = {
check: 0
}
}
render() {
let {userID, getCloudDetail} = this.props;
let {check} = this.state;
return (
第二步:填写腾讯云秘钥,一键部署
{
this.setState({check: check + 1})
}}
/>
)
}
}
const Step12 = (props) => (
第三步:注册微信公众号/小程序
);
const Step13 = (props) => (
第四步:微信公众号/小程序 后台填写配置
);
const Step14 = (props) => (
);