fog-google 0.5.5 → 0.6.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.
- checksums.yaml +4 -4
- data/README.md +6 -1
- data/examples/monitoring/metric_descriptors.rb +1 -1
- data/examples/monitoring/monitored_resource_descriptors.rb +24 -0
- data/examples/monitoring/timeseries_collection.rb +13 -8
- data/lib/fog/google/models/monitoring/metric_descriptor.rb +7 -4
- data/lib/fog/google/models/monitoring/metric_descriptors.rb +4 -6
- data/lib/fog/google/models/monitoring/monitored_resource_descriptor.rb +20 -0
- data/lib/fog/google/models/monitoring/monitored_resource_descriptors.rb +26 -0
- data/lib/fog/google/models/monitoring/timeseries.rb +5 -3
- data/lib/fog/google/models/monitoring/timeseries_collection.rb +19 -12
- data/lib/fog/google/monitoring.rb +10 -10
- data/lib/fog/google/monitoring/mock.rb +1 -1
- data/lib/fog/google/monitoring/real.rb +1 -1
- data/lib/fog/google/requests/monitoring/list_metric_descriptors.rb +181 -124
- data/lib/fog/google/requests/monitoring/list_monitored_resource_descriptors.rb +63 -0
- data/lib/fog/google/requests/monitoring/list_timeseries.rb +50 -31
- data/lib/fog/google/version.rb +1 -1
- metadata +7 -13
- data/examples/monitoring/timeseries_descriptors.rb +0 -27
- data/lib/fog/google/models/monitoring/timeseries_descriptor.rb +0 -20
- data/lib/fog/google/models/monitoring/timeseries_descriptors.rb +0 -31
- data/lib/fog/google/requests/monitoring/list_timeseries_descriptors.rb +0 -87
- data/tests/models/monitoring/metric_descriptors_tests.rb +0 -9
- data/tests/models/monitoring/timeseries_collection_tests.rb +0 -9
- data/tests/models/monitoring/timeseries_descriptors_tests.rb +0 -10
- data/tests/requests/monitoring/metric_descriptor_tests.rb +0 -22
- data/tests/requests/monitoring/timeseries_collection_tests.rb +0 -22
- data/tests/requests/monitoring/timeseries_descriptor_tests.rb +0 -23
@@ -0,0 +1,63 @@
|
|
1
|
+
module Fog
|
2
|
+
module Google
|
3
|
+
class Monitoring
|
4
|
+
##
|
5
|
+
# Describes the schema of a MonitoredResource (a resource object that can be used for monitoring, logging,
|
6
|
+
# billing, or other purposes) using a type name and a set of labels.
|
7
|
+
#
|
8
|
+
# @see https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.monitoredResourceDescriptors/list
|
9
|
+
class Real
|
10
|
+
def list_monitored_resource_descriptors(options = {})
|
11
|
+
api_method = @monitoring.projects.monitored_resource_descriptors.list
|
12
|
+
parameters = {
|
13
|
+
"name" => "projects/#{@project}"
|
14
|
+
}
|
15
|
+
|
16
|
+
parameters["filter"] = options[:filter] if options.key?(:filter)
|
17
|
+
parameters["pageSize"] = options[:page_size] if options.key?(:page_size)
|
18
|
+
parameters["pageToken"] = options[:page_token] if options.key?(:page_token)
|
19
|
+
|
20
|
+
request(api_method, parameters)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class Mock
|
25
|
+
def list_monitored_resource_descriptors(_options = {})
|
26
|
+
body = {
|
27
|
+
"resourceDescriptors" => [
|
28
|
+
{
|
29
|
+
"type" => "api",
|
30
|
+
"displayName" => "Produced API",
|
31
|
+
"description" => "An API provided by the producer.",
|
32
|
+
"labels" => [
|
33
|
+
{
|
34
|
+
"key" => "project_id",
|
35
|
+
"description" => "The identifier of the GCP project associated with this resource (e.g., my-project)."
|
36
|
+
},
|
37
|
+
{
|
38
|
+
"key" => "service",
|
39
|
+
"description" => "API service name e.g. \"cloudsql.googleapis.com\"."
|
40
|
+
},
|
41
|
+
{
|
42
|
+
"key" => "method",
|
43
|
+
"description" => "API method e.g. \"disks.list\"."
|
44
|
+
},
|
45
|
+
{
|
46
|
+
"key" => "version",
|
47
|
+
"description" => "API version e.g. \"v1\"."
|
48
|
+
},
|
49
|
+
{
|
50
|
+
"key" => "location",
|
51
|
+
"description" => "The service specific notion of location. This can be a name of a zone, region, or \"global."
|
52
|
+
}
|
53
|
+
],
|
54
|
+
"name" => "projects/#{@project}/monitoredResourceDescriptors/api"
|
55
|
+
}
|
56
|
+
]
|
57
|
+
}
|
58
|
+
build_excon_response(body)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -5,55 +5,74 @@ module Fog
|
|
5
5
|
# List the data points of the time series that match the metric and labels values and that have data points
|
6
6
|
# in the interval
|
7
7
|
#
|
8
|
-
# https://
|
8
|
+
# @see https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.timeSeries/list
|
9
9
|
class Real
|
10
|
-
def list_timeseries(
|
11
|
-
api_method = @monitoring.
|
10
|
+
def list_timeseries(options = {})
|
11
|
+
api_method = @monitoring.projects.time_series.list
|
12
12
|
parameters = {
|
13
|
-
"
|
14
|
-
"metric" => metric,
|
15
|
-
"youngest" => youngest
|
13
|
+
"name" => "projects/#{@project}"
|
16
14
|
}
|
15
|
+
if options.key?(:interval)
|
16
|
+
interval = options[:interval]
|
17
|
+
parameters["interval.endTime"] = interval[:end_time] if interval.key?(:end_time)
|
18
|
+
parameters["interval.startTime"] = interval[:start_time] if interval.key?(:start_time)
|
19
|
+
end
|
17
20
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
+
if options.key?(:aggregation)
|
22
|
+
aggregation = options[:aggregation]
|
23
|
+
parameters["aggregation.alignmentPeriod"] = aggregation[:alignment_period] if aggregation.key?(:alignment_period)
|
24
|
+
parameters["aggregation.crossSeriesReducer"] = aggregation[:cross_series_reducer] if aggregation.key?(:cross_series_reducer)
|
25
|
+
parameters["aggregation.groupByFields"] = aggregation[:group_by_fields] if aggregation.key?(:group_by_fields)
|
26
|
+
parameters["aggregation.perSeriesAligner"] = aggregation[:per_series_aligner] if aggregation.key?(:per_series_aligner)
|
27
|
+
end
|
28
|
+
|
29
|
+
parameters["filter"] = options[:filter] if options.key?(:filter)
|
30
|
+
parameters["orderBy"] = options[:order_by] if options.key?(:order_by)
|
31
|
+
parameters["pageSize"] = options[:page_size] if options.key?(:page_size)
|
21
32
|
parameters["pageToken"] = options[:page_token] if options.key?(:page_token)
|
22
|
-
parameters["
|
33
|
+
parameters["view"] = options[:view] if options.key?(:view)
|
34
|
+
|
35
|
+
unless parameters.key?("interval.startTime")
|
36
|
+
raise ArgumentError.new("option :interval must have :start_time value for listing timeseries")
|
37
|
+
end
|
38
|
+
|
39
|
+
unless parameters.key?("interval.endTime")
|
40
|
+
raise ArgumentError.new("option :interval must have :end_time value for listing timeseries")
|
41
|
+
end
|
42
|
+
|
43
|
+
unless parameters.key?("filter")
|
44
|
+
raise ArgumentError.new("options[:filter] value is required to list timeseries")
|
45
|
+
end
|
23
46
|
|
24
47
|
request(api_method, parameters)
|
25
48
|
end
|
26
49
|
end
|
27
50
|
|
28
51
|
class Mock
|
29
|
-
def list_timeseries(
|
52
|
+
def list_timeseries(interval, _options = {})
|
30
53
|
body = {
|
31
|
-
"
|
32
|
-
"youngest" => youngest,
|
33
|
-
"oldest" => youngest,
|
34
|
-
"timeseries" => [
|
54
|
+
"timeSeries" => [
|
35
55
|
{
|
36
|
-
"
|
37
|
-
"
|
38
|
-
"
|
56
|
+
"metric" => {
|
57
|
+
"labels" => { "instance_name" => "emilyye-dev" },
|
58
|
+
"type" => "compute.googleapis.com/instance/cpu/usage_time"
|
59
|
+
},
|
60
|
+
"resource" => {
|
61
|
+
"type" => "gce_instance",
|
39
62
|
"labels" => {
|
40
|
-
"
|
41
|
-
"
|
42
|
-
"
|
43
|
-
"compute.googleapis.com/resource_id" => Fog::Mock.random_numbers(20).to_s,
|
44
|
-
"compute.googleapis.com/instance_name" => Fog::Mock.random_hex(40)
|
63
|
+
"instance_id" => "3959348537894302241",
|
64
|
+
"zone" => "us-central1-c",
|
65
|
+
"project_id" => @project
|
45
66
|
}
|
46
67
|
},
|
68
|
+
"metricKind" => "DELTA",
|
69
|
+
"valueType" => "DOUBLE",
|
47
70
|
"points" => [
|
48
71
|
{
|
49
|
-
"
|
50
|
-
"
|
51
|
-
|
52
|
-
|
53
|
-
{
|
54
|
-
"start" => "2014-07-17T20:05:58.000Z",
|
55
|
-
"end" => "2014-07-17T20:06:58.000Z",
|
56
|
-
"doubleValue" => 60.0
|
72
|
+
"interval" => interval,
|
73
|
+
"value" => {
|
74
|
+
"doubleValue" => 1.8277230720141233
|
75
|
+
}
|
57
76
|
}
|
58
77
|
]
|
59
78
|
}
|
data/lib/fog/google/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fog-google
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nat Welch
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2017-
|
14
|
+
date: 2017-09-27 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: fog-core
|
@@ -232,8 +232,8 @@ files:
|
|
232
232
|
- examples/load-balance.rb
|
233
233
|
- examples/metadata.rb
|
234
234
|
- examples/monitoring/metric_descriptors.rb
|
235
|
+
- examples/monitoring/monitored_resource_descriptors.rb
|
235
236
|
- examples/monitoring/timeseries_collection.rb
|
236
|
-
- examples/monitoring/timeseries_descriptors.rb
|
237
237
|
- examples/network.rb
|
238
238
|
- examples/precreated_client.rb
|
239
239
|
- examples/pubsub/subscriptions.rb
|
@@ -486,10 +486,10 @@ files:
|
|
486
486
|
- lib/fog/google/mock.rb
|
487
487
|
- lib/fog/google/models/monitoring/metric_descriptor.rb
|
488
488
|
- lib/fog/google/models/monitoring/metric_descriptors.rb
|
489
|
+
- lib/fog/google/models/monitoring/monitored_resource_descriptor.rb
|
490
|
+
- lib/fog/google/models/monitoring/monitored_resource_descriptors.rb
|
489
491
|
- lib/fog/google/models/monitoring/timeseries.rb
|
490
492
|
- lib/fog/google/models/monitoring/timeseries_collection.rb
|
491
|
-
- lib/fog/google/models/monitoring/timeseries_descriptor.rb
|
492
|
-
- lib/fog/google/models/monitoring/timeseries_descriptors.rb
|
493
493
|
- lib/fog/google/models/pubsub/received_message.rb
|
494
494
|
- lib/fog/google/models/pubsub/subscription.rb
|
495
495
|
- lib/fog/google/models/pubsub/subscriptions.rb
|
@@ -514,8 +514,8 @@ files:
|
|
514
514
|
- lib/fog/google/pubsub/mock.rb
|
515
515
|
- lib/fog/google/pubsub/real.rb
|
516
516
|
- lib/fog/google/requests/monitoring/list_metric_descriptors.rb
|
517
|
+
- lib/fog/google/requests/monitoring/list_monitored_resource_descriptors.rb
|
517
518
|
- lib/fog/google/requests/monitoring/list_timeseries.rb
|
518
|
-
- lib/fog/google/requests/monitoring/list_timeseries_descriptors.rb
|
519
519
|
- lib/fog/google/requests/pubsub/acknowledge_subscription.rb
|
520
520
|
- lib/fog/google/requests/pubsub/create_subscription.rb
|
521
521
|
- lib/fog/google/requests/pubsub/create_topic.rb
|
@@ -679,9 +679,6 @@ files:
|
|
679
679
|
- tests/models/dns/records_tests.rb
|
680
680
|
- tests/models/dns/zone_tests.rb
|
681
681
|
- tests/models/dns/zones_tests.rb
|
682
|
-
- tests/models/monitoring/metric_descriptors_tests.rb
|
683
|
-
- tests/models/monitoring/timeseries_collection_tests.rb
|
684
|
-
- tests/models/monitoring/timeseries_descriptors_tests.rb
|
685
682
|
- tests/models/pubsub/received_message_tests.rb
|
686
683
|
- tests/models/pubsub/subscription_tests.rb
|
687
684
|
- tests/models/pubsub/subscriptions_tests.rb
|
@@ -716,9 +713,6 @@ files:
|
|
716
713
|
- tests/requests/dns/managed_zone_tests.rb
|
717
714
|
- tests/requests/dns/project_tests.rb
|
718
715
|
- tests/requests/dns/record_tests.rb
|
719
|
-
- tests/requests/monitoring/metric_descriptor_tests.rb
|
720
|
-
- tests/requests/monitoring/timeseries_collection_tests.rb
|
721
|
-
- tests/requests/monitoring/timeseries_descriptor_tests.rb
|
722
716
|
- tests/requests/sql/flag_tests.rb
|
723
717
|
- tests/requests/sql/instance_tests.rb
|
724
718
|
- tests/requests/sql/operation_tests.rb
|
@@ -746,7 +740,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
746
740
|
version: '0'
|
747
741
|
requirements: []
|
748
742
|
rubyforge_project:
|
749
|
-
rubygems_version: 2.6.
|
743
|
+
rubygems_version: 2.6.13
|
750
744
|
signing_key:
|
751
745
|
specification_version: 4
|
752
746
|
summary: Module for the 'fog' gem to support Google.
|
@@ -1,27 +0,0 @@
|
|
1
|
-
# All examples presume that you have a ~/.fog credentials file set up.
|
2
|
-
# # More info on it can be found here: http://fog.io/about/getting_started.html
|
3
|
-
#
|
4
|
-
require "bundler"
|
5
|
-
Bundler.require(:default, :development)
|
6
|
-
# Uncomment this if you want to make real requests to GCE (you _will_ be billed!)
|
7
|
-
# WebMock.disable!
|
8
|
-
|
9
|
-
def test
|
10
|
-
connection = Fog::Google::Monitoring.new
|
11
|
-
|
12
|
-
puts "Listing all TimeseriesDescriptors for the metric compute.googleapis.com/instance/uptime..."
|
13
|
-
puts "------------------------------------------------------------------------------------------"
|
14
|
-
td = connection.timeseries_descriptors.all("compute.googleapis.com/instance/uptime",
|
15
|
-
DateTime.now.rfc3339)
|
16
|
-
puts "Number of matches: #{td.length}"
|
17
|
-
|
18
|
-
puts "Listing all TimeseriesDescriptors for the metric compute.googleapis.com/instance/uptime &"
|
19
|
-
puts "the region us-central1..."
|
20
|
-
puts "-----------------------------------------------------------------------------------------"
|
21
|
-
td = connection.timeseries_descriptors.all("compute.googleapis.com/instance/uptime",
|
22
|
-
DateTime.now.rfc3339,
|
23
|
-
:labels => "cloud.googleapis.com/location=~us-central1.*")
|
24
|
-
puts "Number of matches: #{td.length}"
|
25
|
-
end
|
26
|
-
|
27
|
-
test
|
@@ -1,20 +0,0 @@
|
|
1
|
-
require "fog/core/model"
|
2
|
-
|
3
|
-
module Fog
|
4
|
-
module Google
|
5
|
-
class Monitoring
|
6
|
-
##
|
7
|
-
# A time series is a collection of data points that represents the value of a metric of a project over time.
|
8
|
-
# The metric is described by the time-series descriptor. Each time-series descriptor is uniquely identified by
|
9
|
-
# its metric name and a set of labels.
|
10
|
-
#
|
11
|
-
# @see https://developers.google.com/cloud-monitoring/v2beta1/timeseriesDescriptors
|
12
|
-
class TimeseriesDescriptor < Fog::Model
|
13
|
-
identity :metric
|
14
|
-
|
15
|
-
attribute :labels
|
16
|
-
attribute :project
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
require "fog/core/collection"
|
2
|
-
require "fog/google/models/monitoring/timeseries_descriptor"
|
3
|
-
|
4
|
-
module Fog
|
5
|
-
module Google
|
6
|
-
class Monitoring
|
7
|
-
class TimeseriesDescriptors < Fog::Collection
|
8
|
-
model Fog::Google::Monitoring::TimeseriesDescriptor
|
9
|
-
|
10
|
-
##
|
11
|
-
# Lists all Timeseries Descriptors.
|
12
|
-
#
|
13
|
-
# @param [String] metric The name of the metric (Metric names are protocol-free URLs).
|
14
|
-
# @param [String] youngest End of the time interval (inclusive), which is expressed as an RFC 3339 timestamp.
|
15
|
-
# @param [Hash] options Optional query parameters.
|
16
|
-
# @option options [String] count Maximum number of time series descriptors per page. Used for pagination.
|
17
|
-
# @option options [String] labels A collection of labels for the matching time series.
|
18
|
-
# @option options [String] oldest Start of the time interval (exclusive), which is expressed as an RFC 3339
|
19
|
-
# timestamp.
|
20
|
-
# @options options [String] page_token The pagination token, which is used to page through large result sets.
|
21
|
-
# @options options [String] timespan Length of the time interval to query, which is an alternative way to
|
22
|
-
# declare the interval.
|
23
|
-
# @return [Array<Fog::Google::Monitoring::TimeseriesDescriptor>] List of Timeseries Descriptors.
|
24
|
-
def all(metric, youngest, options = {})
|
25
|
-
data = service.list_timeseries_descriptors(metric, youngest, options).body["timeseries"] || []
|
26
|
-
load(data)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,87 +0,0 @@
|
|
1
|
-
module Fog
|
2
|
-
module Google
|
3
|
-
class Monitoring
|
4
|
-
##
|
5
|
-
# List the descriptors of the time series that match the metric and labels values and that have data points
|
6
|
-
# in the interval.
|
7
|
-
#
|
8
|
-
# @see https://developers.google.com/cloud-monitoring/v2beta1/timeseriesDescriptors/list
|
9
|
-
class Real
|
10
|
-
def list_timeseries_descriptors(metric, youngest, options = {})
|
11
|
-
api_method = @monitoring.timeseries_descriptors.list
|
12
|
-
parameters = {
|
13
|
-
"project" => @project,
|
14
|
-
"metric" => metric,
|
15
|
-
"youngest" => youngest
|
16
|
-
}
|
17
|
-
|
18
|
-
parameters["count"] = options[:count] if options.key?(:count)
|
19
|
-
parameters["labels"] = options[:labels] if options.key?(:labels)
|
20
|
-
parameters["oldest"] = options[:oldest] if options.key?(:oldest)
|
21
|
-
parameters["pageToken"] = options[:page_token] if options.key?(:page_token)
|
22
|
-
parameters["timespan"] = options[:timespan] if options.key?(:timespan)
|
23
|
-
|
24
|
-
request(api_method, parameters)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
class Mock
|
29
|
-
def list_timeseries_descriptors(metric, youngest, _options = {})
|
30
|
-
body = {
|
31
|
-
"kind" => 'cloudmonitoring#listTimeseriesDescriptorsResponse',
|
32
|
-
"youngest" => youngest,
|
33
|
-
"oldest" => youngest,
|
34
|
-
"timeseries" => [
|
35
|
-
{
|
36
|
-
"project" => @project,
|
37
|
-
"metric" => metric,
|
38
|
-
"labels" => {
|
39
|
-
"cloud.googleapis.com/service" => "compute.googleapis.com",
|
40
|
-
"compute.googleapis.com/resource_type" => "instance",
|
41
|
-
"cloud.googleapis.com/location" => "us-central1-a",
|
42
|
-
"compute.googleapis.com/resource_id" => Fog::Mock.random_numbers(20).to_s,
|
43
|
-
"compute.googleapis.com/instance_name" => Fog::Mock.random_hex(40)
|
44
|
-
}
|
45
|
-
},
|
46
|
-
{
|
47
|
-
"project" => @project,
|
48
|
-
"metric" => metric,
|
49
|
-
"labels" => {
|
50
|
-
"cloud.googleapis.com/service" => "compute.googleapis.com",
|
51
|
-
"compute.googleapis.com/resource_type" => "instance",
|
52
|
-
"cloud.googleapis.com/location" => "us-central1-a",
|
53
|
-
"compute.googleapis.com/resource_id" => Fog::Mock.random_numbers(20).to_s,
|
54
|
-
"compute.googleapis.com/instance_name" => Fog::Mock.random_hex(40)
|
55
|
-
}
|
56
|
-
},
|
57
|
-
{
|
58
|
-
"project" => @project,
|
59
|
-
"metric" => metric,
|
60
|
-
"labels" => {
|
61
|
-
"cloud.googleapis.com/service" => "compute.googleapis.com",
|
62
|
-
"compute.googleapis.com/resource_type" => "instance",
|
63
|
-
"cloud.googleapis.com/location" => "us-central1-a",
|
64
|
-
"compute.googleapis.com/resource_id" => Fog::Mock.random_numbers(20).to_s,
|
65
|
-
"compute.googleapis.com/instance_name" => Fog::Mock.random_hex(40)
|
66
|
-
}
|
67
|
-
},
|
68
|
-
{
|
69
|
-
"project" => @project,
|
70
|
-
"metric" => metric,
|
71
|
-
"labels" => {
|
72
|
-
"cloud.googleapis.com/service" => "compute.googleapis.com",
|
73
|
-
"compute.googleapis.com/resource_type" => "instance",
|
74
|
-
"cloud.googleapis.com/location" => "us-central1-a",
|
75
|
-
"compute.googleapis.com/resource_id" => Fog::Mock.random_numbers(20).to_s,
|
76
|
-
"compute.googleapis.com/instance_name" => Fog::Mock.random_hex(40)
|
77
|
-
}
|
78
|
-
}
|
79
|
-
]
|
80
|
-
}
|
81
|
-
|
82
|
-
build_excon_response(body)
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
@@ -1,9 +0,0 @@
|
|
1
|
-
Shindo.tests("Fog::Google[:monitoring] | timeseries_collection model", ["google"]) do
|
2
|
-
@timeseries_collection = Fog::Google[:monitoring].timeseries_collection
|
3
|
-
|
4
|
-
tests("success") do
|
5
|
-
tests('#all').succeeds do
|
6
|
-
@timeseries_collection.all("compute.googleapis.com/instance/uptime", Time.now.strftime("%Y-%m-%dT%H:%M:%S%:z"))
|
7
|
-
end
|
8
|
-
end
|
9
|
-
end
|