Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
凌波微步_大先生
dashboard
提交
3c17fd14
D
dashboard
项目概览
凌波微步_大先生
/
dashboard
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dashboard
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
3c17fd14
编写于
11月 19, 2015
作者:
L
Lukasz Zajaczkowski
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add backend support for logs
上级
6e730f03
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
105 addition
and
0 deletion
+105
-0
src/app/backend/apihandler.go
src/app/backend/apihandler.go
+22
-0
src/app/backend/logs.go
src/app/backend/logs.go
+83
-0
未找到文件。
src/app/backend/apihandler.go
浏览文件 @
3c17fd14
...
...
@@ -59,6 +59,15 @@ func CreateHttpApiHandler(client *client.Client) http.Handler {
Writes
(
NamespacesList
{}))
wsContainer
.
Add
(
namespaceListWs
)
logsWs
:=
new
(
restful
.
WebService
)
logsWs
.
Path
(
"/api/logs"
)
.
Produces
(
restful
.
MIME_JSON
)
logsWs
.
Route
(
logsWs
.
GET
(
"/{namespace}/{podId}"
)
.
To
(
apiHandler
.
handleLogs
)
.
Writes
(
Logs
{}))
wsContainer
.
Add
(
logsWs
)
return
wsContainer
}
...
...
@@ -122,6 +131,19 @@ func (apiHandler *ApiHandler) handleGetNamespaceList(
response
.
WriteHeaderAndEntity
(
http
.
StatusCreated
,
result
)
}
// Handles log API call.
func
(
apiHandler
*
ApiHandler
)
handleLogs
(
request
*
restful
.
Request
,
response
*
restful
.
Response
)
{
namespace
:=
request
.
PathParameter
(
"namespace"
)
podId
:=
request
.
PathParameter
(
"podId"
)
result
,
err
:=
GetPodLogs
(
apiHandler
.
client
,
namespace
,
podId
)
if
err
!=
nil
{
handleInternalError
(
response
,
err
)
return
}
response
.
WriteHeaderAndEntity
(
http
.
StatusCreated
,
result
)
}
// Handler that writes the given error to the response and sets appropriate HTTP status headers.
func
handleInternalError
(
response
*
restful
.
Response
,
err
error
)
{
response
.
AddHeader
(
"Content-Type"
,
"text/plain"
)
...
...
src/app/backend/logs.go
0 → 100644
浏览文件 @
3c17fd14
// Copyright 2015 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package
main
import
(
"io/ioutil"
api
"k8s.io/kubernetes/pkg/api"
client
"k8s.io/kubernetes/pkg/client/unversioned"
"strings"
"time"
)
// Log response structure
type
Logs
struct
{
// Pod id
PodId
string
`json:"podId"`
// Specific date (RFC3339) when logs started
SinceTime
string
`json:"sinceTime"`
// Logs string
Logs
[]
string
`json:"logs"`
}
// Return logs for particular pod or error when occurred.
func
GetPodLogs
(
client
*
client
.
Client
,
namespace
string
,
podId
string
)
(
*
Logs
,
error
)
{
pod
,
err
:=
client
.
Pods
(
namespace
)
.
Get
(
podId
)
if
err
!=
nil
{
return
nil
,
err
}
logOptions
:=
&
api
.
PodLogOptions
{
Follow
:
false
,
Previous
:
false
,
Timestamps
:
true
,
}
logString
,
err
:=
getRawPodLogs
(
client
,
namespace
,
podId
,
logOptions
)
if
err
!=
nil
{
return
nil
,
err
}
logs
:=
&
Logs
{
PodId
:
podId
,
SinceTime
:
pod
.
CreationTimestamp
.
Format
(
time
.
RFC3339
),
Logs
:
strings
.
Split
(
logString
,
"
\n
"
),
}
return
logs
,
nil
}
// Construct a request for getting the logs for a pod and retrieves the logs.
func
getRawPodLogs
(
client
*
client
.
Client
,
namespace
string
,
podID
string
,
logOptions
*
api
.
PodLogOptions
)
(
string
,
error
)
{
req
:=
client
.
RESTClient
.
Get
()
.
Namespace
(
namespace
)
.
Name
(
podID
)
.
Resource
(
"pods"
)
.
SubResource
(
"log"
)
.
VersionedParams
(
logOptions
,
api
.
Scheme
)
readCloser
,
err
:=
req
.
Stream
()
if
err
!=
nil
{
return
""
,
err
}
defer
readCloser
.
Close
()
result
,
err
:=
ioutil
.
ReadAll
(
readCloser
)
if
err
!=
nil
{
return
""
,
err
}
return
string
(
result
),
nil
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录