Page Menu
Home
Phabricator (Chris)
Search
Configure Global Search
Log In
Files
F619597
mongo-orchestration.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Authored By
Unknown
Size
3 KB
Referenced Files
None
Subscribers
None
mongo-orchestration.php
View Options
<?php
declare
(
strict_types
=
1
)
;
set_error_handler
(
function
(
$errno
,
$errstr
,
$errfile
,
$errline
)
{
fprintf
(
STDERR
,
"%s\n"
,
$errstr
)
;
exit
(
1
)
;
}
)
;
set_exception_handler
(
function
(
$e
)
{
fprintf
(
STDERR
,
"%s: %s\n"
,
get_class
(
$e
)
,
$e
->
getMessage
(
)
)
;
exit
(
1
)
;
}
)
;
function
getId
(
string
$config
)
:
string
{
$config
=
json_decode
(
$config
,
null
,
512
,
JSON_THROW_ON_ERROR
)
;
if
(
!
isset
(
$config
->
id
)
||
!
is_string
(
$config
->
id
)
)
{
throw
new
UnexpectedValueException
(
'Could not determine id'
)
;
}
return
$config
->
id
;
}
function
getTopology
(
string
$file
)
:
string
{
$topology
=
basename
(
dirname
(
$file
)
)
;
if
(
!
in_array
(
$topology
,
[
'servers'
,
'replica_sets'
,
'sharded_clusters'
]
)
)
{
throw
new
UnexpectedValueException
(
'Unsupported topology: '
.
$topology
)
;
}
return
$topology
;
}
function
request
(
string
$uri
,
array
$options
=
[
]
)
:
stdClass
{
$options
+=
[
'method'
=>
'GET'
,
'header'
=>
'Accept: application/json'
,
'ignore_errors'
=>
true
,
]
;
$response
=
file_get_contents
(
$uri
,
false
,
stream_context_create
(
[
'http'
=>
$options
]
)
)
;
if
(
preg_match
(
'#HTTP/1.[01] ([0-9]+)#'
,
$http_response_header
[
0
]
,
$matches
)
!==
1
)
{
throw
new
UnexpectedValueException
(
'Could not determine HTTP response code'
)
;
}
$code
=
(int)
$matches
[
1
]
;
if
(
$code
!==
200
)
{
throw
new
UnexpectedValueException
(
sprintf
(
"%s %s returned HTTP response code: %d\n\n%s"
,
$options
[
'method'
]
??
'GET'
,
$uri
,
$code
,
$response
)
)
;
}
return
json_decode
(
$response
,
null
,
512
,
JSON_THROW_ON_ERROR
)
;
}
function
start
(
string
$uri
,
string
$config
)
:
void
{
$options
=
[
'method'
=>
'POST'
,
'header'
=>
"Accept: application/json\r\n"
.
"Content-type: application/x-www-form-urlencoded"
,
'content'
=>
$config
,
'timeout'
=>
120
,
]
;
printf
(
"%s\n"
,
json_encode
(
request
(
$uri
,
$options
)
,
JSON_PRETTY_PRINT
)
)
;
}
function
status
(
string
$uri
)
:
void
{
printf
(
"%s\n"
,
json_encode
(
request
(
$uri
)
,
JSON_PRETTY_PRINT
)
)
;
}
function
stop
(
string
$uri
)
:
void
{
$options
=
[
'method'
=>
'DELETE'
,
'header'
=>
"Accept: application/json\r\n"
.
"Content-type: application/x-www-form-urlencoded"
,
'content'
=>
$config
,
'timeout'
=>
120
,
]
;
printf
(
"%s\n"
,
json_encode
(
request
(
$uri
,
$options
)
,
JSON_PRETTY_PRINT
)
)
;
}
function
usage
(
)
:
void
{
global
$argv
;
fprintf
(
STDERR
,
"usage: %s <action> <id>|<path/to/config.json>\n"
,
$argv
[
0
]
)
;
fprintf
(
STDERR
,
"action: start|status|stop\n"
)
;
exit
(
1
)
;
}
$tools
=
getenv
(
'DRIVER_TOOLS'
)
?
:
'/home/jmikola/workspace/mongodb/drivers-evergreen-tools'
;
$server
=
getenv
(
'MONGO_ORCHESTRATION_URI'
)
?
:
'http://localhost:8889'
;
if
(
$argc
<
2
)
{
usage
(
)
;
}
$action
=
$argv
[
1
]
??
null
;
switch
(
$action
)
{
case
'start'
:
$file
=
$argv
[
2
]
;
if
(
!
is_readable
(
$file
)
)
{
throw
new
UnexpectedValueException
(
'Cannot read input file'
)
;
}
$topology
=
getTopology
(
$file
)
;
$config
=
file_get_contents
(
$file
)
;
$config
=
str_replace
(
'ABSOLUTE_PATH_REPLACEMENT_TOKEN'
,
$tools
,
$config
)
;
start
(
sprintf
(
'%s/v1/%s'
,
$server
,
$topology
)
,
$config
)
;
break
;
case
'status'
:
$topology
=
$argv
[
2
]
;
$id
=
$argv
[
3
]
;
status
(
sprintf
(
'%s/v1/%s/%s'
,
$server
,
$topology
,
$id
)
)
;
break
;
case
'stop'
:
$topology
=
$argv
[
2
]
;
$id
=
$argv
[
3
]
;
stop
(
sprintf
(
'%s/v1/%s/%s'
,
$server
,
$topology
,
$id
)
)
;
break
;
case
'list'
:
foreach
(
[
'servers'
,
'replica_sets'
,
'sharded_clusters'
]
as
$topology
)
{
$response
=
request
(
sprintf
(
'%s/v1/%s'
,
$server
,
$topology
)
)
;
printf
(
"%s:\n"
,
$topology
)
;
printf
(
"%s\n\n"
,
json_encode
(
$response
->
$topology
,
JSON_PRETTY_PRINT
)
)
;
}
break
;
default
:
usage
(
)
;
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Sat, Nov 14, 4:56 PM (10 h, 42 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
137499
Default Alt Text
mongo-orchestration.php (3 KB)
Attached To
Mode
R114 php-mongodb
Attached
Detach File
Event Timeline