unimatrix-cli 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.rspec +2 -0
  4. data/Gemfile +4 -0
  5. data/README.md +12 -0
  6. data/Rakefile +6 -0
  7. data/VERSION +1 -0
  8. data/bin/console +14 -0
  9. data/bin/setup +8 -0
  10. data/exe/unimatrix +11 -0
  11. data/lib/unimatrix_cli.rb +74 -0
  12. data/lib/unimatrix_cli/alchemist/rendition/list_command.rb +72 -0
  13. data/lib/unimatrix_cli/alchemist/rendition_profile/assign_command.rb +59 -0
  14. data/lib/unimatrix_cli/alchemist/rendition_profile/list_command.rb +36 -0
  15. data/lib/unimatrix_cli/alchemist/video/create_command.rb +40 -0
  16. data/lib/unimatrix_cli/alchemist/video/describe_command.rb +40 -0
  17. data/lib/unimatrix_cli/alchemist/video_encoder/create_command.rb +37 -0
  18. data/lib/unimatrix_cli/alchemist/video_encoder/describe_command.rb +39 -0
  19. data/lib/unimatrix_cli/alchemist/video_encoder/encode_command.rb +102 -0
  20. data/lib/unimatrix_cli/alchemist/video_encoder/list_command.rb +35 -0
  21. data/lib/unimatrix_cli/archivist/blueprint/create_command.rb +94 -0
  22. data/lib/unimatrix_cli/citadel/app/build_command.rb +28 -0
  23. data/lib/unimatrix_cli/citadel/app/console_command.rb +17 -0
  24. data/lib/unimatrix_cli/citadel/app/db_setup_command.rb +17 -0
  25. data/lib/unimatrix_cli/citadel/app/environment_command.rb +30 -0
  26. data/lib/unimatrix_cli/citadel/app/logs_command.rb +17 -0
  27. data/lib/unimatrix_cli/citadel/app/migrate_command.rb +17 -0
  28. data/lib/unimatrix_cli/citadel/app/migrate_status_command.rb +17 -0
  29. data/lib/unimatrix_cli/citadel/app/rake_command.rb +18 -0
  30. data/lib/unimatrix_cli/citadel/app/routes_command.rb +17 -0
  31. data/lib/unimatrix_cli/citadel/citadel_command.rb +285 -0
  32. data/lib/unimatrix_cli/citadel/instance/details_command.rb +18 -0
  33. data/lib/unimatrix_cli/citadel/instance/scp_command.rb +48 -0
  34. data/lib/unimatrix_cli/citadel/instance/ssh_command.rb +29 -0
  35. data/lib/unimatrix_cli/citadel/instance/status_command.rb +17 -0
  36. data/lib/unimatrix_cli/citadel/instance/user_data_command.rb +17 -0
  37. data/lib/unimatrix_cli/citadel/instance/user_data_logs_command.rb +17 -0
  38. data/lib/unimatrix_cli/cli.rb +30 -0
  39. data/lib/unimatrix_cli/command.rb +138 -0
  40. data/lib/unimatrix_cli/config/acceptance.yml +23 -0
  41. data/lib/unimatrix_cli/config/configuration.rb +66 -0
  42. data/lib/unimatrix_cli/config/production.yml +15 -0
  43. data/lib/unimatrix_cli/config/staging.yml +15 -0
  44. data/lib/unimatrix_cli/config/unimatrix.rb +4 -0
  45. data/lib/unimatrix_cli/iris/stream/create_command.rb +43 -0
  46. data/lib/unimatrix_cli/iris/stream/describe_command.rb +35 -0
  47. data/lib/unimatrix_cli/iris/stream_encoder/create_command.rb +43 -0
  48. data/lib/unimatrix_cli/iris/stream_encoder/describe_command.rb +37 -0
  49. data/lib/unimatrix_cli/iris/stream_input/create_command.rb +43 -0
  50. data/lib/unimatrix_cli/iris/stream_input/describe_command.rb +37 -0
  51. data/lib/unimatrix_cli/iris/stream_output/create_command.rb +55 -0
  52. data/lib/unimatrix_cli/iris/stream_output/describe_command.rb +37 -0
  53. data/lib/unimatrix_cli/iris/stream_recorder/create_command.rb +49 -0
  54. data/lib/unimatrix_cli/iris/stream_recorder/describe_command.rb +37 -0
  55. data/lib/unimatrix_cli/iris/stream_transcriber/create_command.rb +54 -0
  56. data/lib/unimatrix_cli/iris/stream_transcriber/describe_command.rb +37 -0
  57. data/lib/unimatrix_cli/iris/stream_transmutator/create_command.rb +65 -0
  58. data/lib/unimatrix_cli/iris/stream_transmutator/describe_command.rb +38 -0
  59. data/lib/unimatrix_cli/login_command.rb +91 -0
  60. data/lib/unimatrix_cli/logout_command.rb +21 -0
  61. data/lib/unimatrix_cli/version.rb +3 -0
  62. data/lib/unimatrix_cli/zephyrus/input/create_command.rb +40 -0
  63. data/lib/unimatrix_cli/zephyrus/input/describe_command.rb +35 -0
  64. data/lib/unimatrix_cli/zephyrus/input/list_command.rb +38 -0
  65. data/lib/unimatrix_cli/zephyrus/output/list_command.rb +44 -0
  66. data/lib/unimatrix_cli/zephyrus/recording/configuration_command.rb +43 -0
  67. data/lib/unimatrix_cli/zephyrus/rendition/list_command.rb +40 -0
  68. data/lib/unimatrix_cli/zephyrus/routing/configuration_command.rb +43 -0
  69. data/lib/unimatrix_cli/zephyrus/transcoding/configuration_command.rb +55 -0
  70. data/lib/unimatrix_cli/zephyrus/transcribing/configuration_command.rb +55 -0
  71. data/lib/unimatrix_cli/zephyrus/transmutation/configuration_command.rb +55 -0
  72. data/lib/unimatrix_parser.rb +796 -0
  73. data/unimatrix-cli.gemspec +30 -0
  74. metadata +247 -0
@@ -0,0 +1,91 @@
1
+ module UnimatrixCLI
2
+ class LoginCommand < Command
3
+
4
+ option :username, "Your username", type: :string, required: true
5
+ option :password, "Your password", type: :string, required: true
6
+ option :environment, "The environment to log into", type: :string, required: true
7
+ option :region, "The region to log into", type: :string
8
+ option :client, "Client id (optional)", type: :string
9
+ option :secret, "Client secret (optional)", type: :string
10
+
11
+ synopsis "Log in with your username, password, and environment. " +
12
+ "Specify region as 'us-east-1' or 'us-west-1'." +
13
+ "Specify a client_id, or make sure to provide it as an ENV variable. " +
14
+ "Specify a client_secret, if necessary, or provide as an ENV variable."
15
+
16
+ ENVIRONMENTS = %w( development acceptance staging production )
17
+ REGIONS = %w( us-east-1 us-west-2 )
18
+
19
+ def execute
20
+ if save_environment
21
+ save_region
22
+
23
+ response = log_in_request
24
+ if response[ 'access_token' ].nil?
25
+ write( message: "Error logging in: #{ response.inspect }", error: true )
26
+ else
27
+ save_access_token( response[ 'access_token' ] )
28
+ write( message: 'Successfully logged in; saving access_token and environment' )
29
+ end
30
+ else
31
+ write( message: 'Invalid environment', error: true )
32
+ end
33
+ end
34
+
35
+ #----------------------------------------------------------------------------
36
+
37
+ private; def log_in_request
38
+ endpoint = "#{ Configuration.default_config[ 'keymaker_url' ] }/token"
39
+
40
+ client_id = @options[ :client ] || ENV[ 'CLIENT_ID' ]
41
+ client_secret = @options[ :secret ] || ENV[ 'CLIENT_SECRET' ]
42
+
43
+ body = {
44
+ client_id: client_id,
45
+ client_secret: client_secret,
46
+ grant_type: 'password',
47
+ username: @options[ :username ],
48
+ password: @options[ :password ]
49
+ }
50
+
51
+ # Unimatrix SDK does not support Keymaker token response
52
+ make_request( endpoint, 'Post', body )
53
+ end
54
+
55
+ private; def save_environment
56
+ if ENVIRONMENTS.include?( @options[ :environment ] )
57
+ create_unimatrix_directory
58
+ File.write(
59
+ Configuration.environment_file_path,
60
+ "#{ @options[ :environment ] }"
61
+ )
62
+ else
63
+ false
64
+ end
65
+ end
66
+
67
+ private; def save_region
68
+ if @options[ :region ] && REGIONS.include?( @options[ :region ] )
69
+ create_unimatrix_directory
70
+ File.write(
71
+ Configuration.region_file_path,
72
+ "#{ @options[ :region ] }"
73
+ )
74
+ end
75
+ end
76
+
77
+ private; def save_access_token( access_token )
78
+ create_unimatrix_directory
79
+ File.write(
80
+ Configuration.access_token_file_path,
81
+ "#{ access_token }"
82
+ )
83
+ end
84
+
85
+ private; def create_unimatrix_directory
86
+ unless Dir.exist?( Configuration.unimatrix_directory_path )
87
+ Dir.mkdir( Configuration.unimatrix_directory_path )
88
+ end
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,21 @@
1
+ module UnimatrixCLI
2
+ class LogoutCommand < Command
3
+
4
+ synopsis "Log out"
5
+
6
+ def execute
7
+ write( message: "Logging you out." )
8
+ delete_saved_data( Configuration.access_token_file_path )
9
+ delete_saved_data( Configuration.environment_file_path )
10
+ delete_saved_data( Configuration.region_file_path )
11
+ end
12
+
13
+ #----------------------------------------------------------------------------
14
+
15
+ private; def delete_saved_data( file_path )
16
+ if File.file?( file_path )
17
+ File.write( file_path, "" )
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,3 @@
1
+ module UnimatrixCLI
2
+ VERSION = '2.2.0'
3
+ end
@@ -0,0 +1,40 @@
1
+ module UnimatrixCLI
2
+ module Zephyrus
3
+ module Input
4
+ class CreateCommand < Command
5
+
6
+ option :key, "The input key", type: :string, required: true
7
+ option :uid, "The input uid", type: :string
8
+
9
+ synopsis "Create a new input"
10
+
11
+ def execute
12
+ input = create_input
13
+
14
+ if validate( input, 'Zephyrus::Input' )
15
+ write( message: "Input uuid: #{ input.uuid }" )
16
+ else
17
+ write(
18
+ message: "Error creating input: #{ input.inspect }",
19
+ error: true
20
+ )
21
+ end
22
+ end
23
+
24
+ #----------------------------------------------------------------------------
25
+
26
+ private; def create_input
27
+ input = Unimatrix::Zephyrus::Input.new(
28
+ key: @options[ :key ],
29
+ state: 'disconnected'
30
+ )
31
+ input.uid = @options[ :uid ] if @options[ :uid ]
32
+
33
+ operation(
34
+ '/inputs'
35
+ ).write( 'inputs', input ).first rescue nil
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,35 @@
1
+ module UnimatrixCLI
2
+ module Zephyrus
3
+ module Input
4
+ class DescribeCommand < Command
5
+
6
+ option :input, "The input uuid", type: :string, required: true
7
+
8
+ synopsis "Describe an input"
9
+
10
+ def execute
11
+ input = find_input
12
+
13
+ if validate( input, 'Zephyrus::Input' )
14
+ parse_object( input ).each do | response |
15
+ write( message: response )
16
+ end
17
+ else
18
+ write(
19
+ message: "Input could not be found: #{ input.inspect }",
20
+ error: true
21
+ )
22
+ end
23
+ end
24
+
25
+ #----------------------------------------------------------------------------
26
+
27
+ private; def find_input
28
+ operation(
29
+ "/inputs/#{ @options[ :input ] }"
30
+ ).read.first
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,38 @@
1
+ module UnimatrixCLI
2
+ module Zephyrus
3
+ module Input
4
+ class ListCommand < Command
5
+
6
+ option :key, "The key of the inputs", type: :string
7
+ option :uid, "The uid of the inputs", type: :string
8
+
9
+ synopsis "List inputs with a specific key and/or uid"
10
+
11
+ def execute
12
+ inputs = find_inputs
13
+
14
+ if validate_collection( inputs, 'Zephyrus::Input' )
15
+ inputs.each do | input |
16
+ write( message: input.uuid )
17
+ end
18
+ else
19
+ write(
20
+ message: "Inputs could not be found: #{ inputs.inspect }",
21
+ error: true
22
+ )
23
+ end
24
+ end
25
+
26
+ #----------------------------------------------------------------------------
27
+
28
+ private; def find_inputs
29
+ endpoint = "/inputs?"
30
+ endpoint += "key=#{ @options[ :key ] }&" if @options[ :key ]
31
+ endpoint += "uid=#{ @options[ :uid ] }" if @options[ :uid ]
32
+
33
+ operation( endpoint ).read
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,44 @@
1
+ module UnimatrixCLI
2
+ module Zephyrus
3
+ module Output
4
+ class ListCommand < Command
5
+
6
+ option :input, "The input uuid", type: :string, required: true
7
+ option :type_name, "The type of outputs", type: :string, required: true
8
+ option :key, "The key of the outputs", type: :string
9
+ option :url, "The url of the outputs", type: :string
10
+ option :uid, "The uid of the outputs", type: :string
11
+
12
+ synopsis "List outputs for a specific input"
13
+
14
+ def execute
15
+ outputs = find_outputs
16
+
17
+ if validate_collection( outputs, 'Zephyrus::Output' )
18
+ outputs.each do | output |
19
+ write( message: output.uuid )
20
+ end
21
+ else
22
+ write(
23
+ message: "Outputs could not be found: #{ outputs.inspect }",
24
+ error: true
25
+ )
26
+ end
27
+ end
28
+
29
+ #----------------------------------------------------------------------------
30
+
31
+ private; def find_outputs
32
+ endpoint = "/inputs/#{ @options[ :input ] }/outputs?" +
33
+ "type_name=#{ @options[ :type_name ] }"
34
+
35
+ endpoint += "&key=#{ @options[ :key ] }" if @options[ :key ]
36
+ endpoint += "&url=#{ @options[ :url ] }" if @options[ :url ]
37
+ endpoint += "&uid=#{ @options[ :uid ] }" if @options[ :uid ]
38
+
39
+ operation( endpoint ).read
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,43 @@
1
+ module UnimatrixCLI
2
+ module Zephyrus
3
+ module Recording
4
+ class ConfigurationCommand < Command
5
+
6
+ option :key, "The key for an input", type: :string, required: true
7
+
8
+ synopsis "Display recording configuration for an input"
9
+
10
+ def execute
11
+ response = recording_configuration_request
12
+ if response[ 'outputs' ].nil?
13
+ write(
14
+ message: "Configuration could not be found: #{ response.inspect }",
15
+ error: true
16
+ )
17
+ else
18
+ response[ 'outputs' ].each do | output |
19
+ write( message: parse_configuration_output( output ) )
20
+ end
21
+ end
22
+ end
23
+
24
+ #----------------------------------------------------------------------------
25
+
26
+ private; def recording_configuration_request
27
+ endpoint = "#{ Configuration.default_config[ 'zephyrus_url' ] }/" +
28
+ "recording/configuration?key=#{ @options[ :key ] }"
29
+
30
+ # Unimatrix SDK cannot handle Zephyrus configuration responses
31
+ make_request( endpoint, 'Get' )
32
+ end
33
+
34
+ private; def parse_configuration_output( output )
35
+ output = output.map do | key, value |
36
+ "#{ key }: #{ value }\n"
37
+ end
38
+ output << "\n"
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,40 @@
1
+ module UnimatrixCLI
2
+ module Zephyrus
3
+ module Rendition
4
+ class ListCommand < Command
5
+
6
+ option :input, "The input uuid", type: :string, required: true
7
+ option :output, "The output uuid", type: :string, required: true
8
+ option :uid, "The uid of the renditions", type: :string, required: true
9
+
10
+ synopsis "List renditions for a specific output and uid"
11
+
12
+ def execute
13
+ renditions = find_renditions
14
+
15
+ if validate_collection( renditions, 'Zephyrus::Rendition' )
16
+ renditions.each do | rendition |
17
+ write( message: rendition.uuid )
18
+ end
19
+ else
20
+ write(
21
+ message: "Renditions could not be found: #{ renditions.inspect }",
22
+ error: true
23
+ )
24
+
25
+ end
26
+ end
27
+
28
+ #----------------------------------------------------------------------------
29
+
30
+ private; def find_renditions
31
+ endpoint = "/inputs/#{ @options[ :input ] }/" +
32
+ "outputs/#{ @options[ :output ] }" +
33
+ "/renditions?uid=#{ @options[ :uid ] }"
34
+
35
+ operation( endpoint ).read
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,43 @@
1
+ module UnimatrixCLI
2
+ module Zephyrus
3
+ module Routing
4
+ class ConfigurationCommand < Command
5
+
6
+ option :key, "The key for an input", type: :string, required: true
7
+
8
+ synopsis "Display routing configuration for an input"
9
+
10
+ def execute
11
+ response = routing_configuration_request
12
+ if response[ 'outputs' ].nil?
13
+ write(
14
+ message: "Configuration could not be found: #{ response.inspect }",
15
+ error: true
16
+ )
17
+ else
18
+ response[ 'outputs' ].each do | output |
19
+ write( message: parse_configuration_output( output ) )
20
+ end
21
+ end
22
+ end
23
+
24
+ #----------------------------------------------------------------------------
25
+
26
+ private; def routing_configuration_request
27
+ endpoint = "#{ Configuration.default_config[ 'zephyrus_url' ] }/" +
28
+ "routing/configuration?key=#{ @options[ :key ] }"
29
+
30
+ # Unimatrix SDK cannot handle Zephyrus configuration responses
31
+ make_request( endpoint, 'Get' )
32
+ end
33
+
34
+ private; def parse_configuration_output( output )
35
+ output = output.map do | key, value |
36
+ "#{ key }: #{ value }\n"
37
+ end
38
+ output << "\n"
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,55 @@
1
+ module UnimatrixCLI
2
+ module Zephyrus
3
+ module Transcoding
4
+ class ConfigurationCommand < Command
5
+
6
+ option :key, "The key for an input", type: :string, required: true
7
+
8
+ synopsis "Display transcoding configuration for an input"
9
+
10
+ def execute
11
+ response = transcoding_configuration_request
12
+ if response[ 'outputs' ].nil?
13
+ write(
14
+ message: "Configuration could not be found: #{ response.inspect }",
15
+ error: true
16
+ )
17
+ else
18
+ response[ 'outputs' ].each do | output |
19
+ write( message: parse_configuration_output( output ) )
20
+ end
21
+ end
22
+ end
23
+
24
+ #----------------------------------------------------------------------------
25
+
26
+ private; def transcoding_configuration_request
27
+ endpoint = "#{ Configuration.default_config[ 'zephyrus_url' ] }/" +
28
+ "transcoding/configuration?key=#{ @options[ :key ] }"
29
+
30
+ # Unimatrix SDK cannot handle Zephyrus configuration responses
31
+ make_request( endpoint, 'Get' )
32
+ end
33
+
34
+ private; def parse_configuration_output( output )
35
+ output = output.map do | key, value |
36
+ if key == "renditions"
37
+ renditions = value.map { | rendition | parse_rendition( rendition ) }.join
38
+ "renditions:\n*\n#{ renditions }"
39
+ else
40
+ "#{ key }: #{ value }\n"
41
+ end
42
+ end
43
+ output << "\n"
44
+ end
45
+
46
+ private; def parse_rendition( rendition )
47
+ rendition = rendition.map do | key, value |
48
+ "#{ key }: #{ value }\n"
49
+ end
50
+ rendition << "*\n"
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end