| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
package PDK::Content::Dumper; |
|
2
|
|
|
|
|
|
|
|
|
3
|
2
|
|
|
2
|
|
2297
|
use utf8; |
|
|
2
|
|
|
|
|
21
|
|
|
|
2
|
|
|
|
|
20
|
|
|
4
|
2
|
|
|
2
|
|
135
|
use v5.30; |
|
|
2
|
|
|
|
|
11
|
|
|
5
|
2
|
|
|
2
|
|
14
|
use Moose::Role; |
|
|
2
|
|
|
|
|
5
|
|
|
|
2
|
|
|
|
|
19
|
|
|
6
|
2
|
|
|
2
|
|
15390
|
use Carp qw(croak); |
|
|
2
|
|
|
|
|
6
|
|
|
|
2
|
|
|
|
|
255
|
|
|
7
|
2
|
|
|
2
|
|
20
|
use File::Path qw(make_path); |
|
|
2
|
|
|
|
|
5
|
|
|
|
2
|
|
|
|
|
183
|
|
|
8
|
2
|
|
|
2
|
|
18
|
use namespace::autoclean; |
|
|
2
|
|
|
|
|
4
|
|
|
|
2
|
|
|
|
|
40
|
|
|
9
|
|
|
|
|
|
|
|
|
10
|
|
|
|
|
|
|
|
|
11
|
|
|
|
|
|
|
has month => ( |
|
12
|
|
|
|
|
|
|
is => 'ro', |
|
13
|
|
|
|
|
|
|
default => sub { |
|
14
|
|
|
|
|
|
|
my $month = `date +%Y-%m`; |
|
15
|
|
|
|
|
|
|
chomp($month); |
|
16
|
|
|
|
|
|
|
return $month; |
|
17
|
|
|
|
|
|
|
}, |
|
18
|
|
|
|
|
|
|
); |
|
19
|
|
|
|
|
|
|
|
|
20
|
|
|
|
|
|
|
has date => ( |
|
21
|
|
|
|
|
|
|
is => 'ro', |
|
22
|
|
|
|
|
|
|
default => sub { |
|
23
|
|
|
|
|
|
|
my $date = `date +%Y-%m-%d`; |
|
24
|
|
|
|
|
|
|
chomp($date); |
|
25
|
|
|
|
|
|
|
return $date; |
|
26
|
|
|
|
|
|
|
}, |
|
27
|
|
|
|
|
|
|
); |
|
28
|
|
|
|
|
|
|
|
|
29
|
|
|
|
|
|
|
has workdir => ( |
|
30
|
|
|
|
|
|
|
is => 'rw', |
|
31
|
|
|
|
|
|
|
default => sub { |
|
32
|
|
|
|
|
|
|
my $value = $ENV{PDK_CONTENT_HOME}; |
|
33
|
|
|
|
|
|
|
_debug_init("从环境变量中加载并设置 workdir:($value)") if defined $value; |
|
34
|
|
|
|
|
|
|
return $value // glob('~'); |
|
35
|
|
|
|
|
|
|
}, |
|
36
|
|
|
|
|
|
|
); |
|
37
|
|
|
|
|
|
|
|
|
38
|
|
|
|
|
|
|
has debug => ( |
|
39
|
|
|
|
|
|
|
is => 'rw', |
|
40
|
|
|
|
|
|
|
isa => 'Int', |
|
41
|
|
|
|
|
|
|
default => sub { |
|
42
|
|
|
|
|
|
|
my $value = $ENV{PDK_CONTENT_DEBUG}; |
|
43
|
|
|
|
|
|
|
_debug_init("从环境变量中加载并设置 debug:($value)") if defined $value; |
|
44
|
|
|
|
|
|
|
return $value // 0; |
|
45
|
|
|
|
|
|
|
}, |
|
46
|
|
|
|
|
|
|
); |
|
47
|
|
|
|
|
|
|
|
|
48
|
|
|
|
|
|
|
|
|
49
|
|
|
|
|
|
|
sub now { |
|
50
|
82
|
|
|
82
|
1
|
1031258
|
my $now = `date "+%Y-%m-%d %H:%M:%S"`; |
|
51
|
82
|
|
|
|
|
1826
|
chomp($now); |
|
52
|
82
|
|
|
|
|
2675
|
return $now; |
|
53
|
|
|
|
|
|
|
} |
|
54
|
|
|
|
|
|
|
|
|
55
|
|
|
|
|
|
|
sub dump { |
|
56
|
82
|
|
|
82
|
1
|
962
|
my ($self, $msg) = @_; |
|
57
|
|
|
|
|
|
|
|
|
58
|
82
|
50
|
33
|
|
|
2404
|
$msg .= ';' unless $msg =~ /^\s*$/ || $msg =~ /[,,!!。.]$/; |
|
59
|
|
|
|
|
|
|
|
|
60
|
82
|
|
|
|
|
574
|
my $text = $self->now() . " - [debug] $msg"; |
|
61
|
82
|
50
|
|
|
|
13308
|
if ($self->debug == 1) { |
|
|
|
50
|
|
|
|
|
|
|
62
|
0
|
|
|
|
|
|
say $text; |
|
63
|
|
|
|
|
|
|
} |
|
64
|
|
|
|
|
|
|
elsif ($self->debug > 1) { |
|
65
|
0
|
|
|
|
|
|
my $workdir = "$self->{workdir}/$self->{month}/$self->{date}"; |
|
66
|
0
|
0
|
|
|
|
|
make_path($workdir) unless -d $workdir; |
|
67
|
|
|
|
|
|
|
|
|
68
|
0
|
|
0
|
|
|
|
my $name = $self->{name} // $self->now; |
|
69
|
0
|
|
|
|
|
|
my $filename = "$workdir/$name\_dump.txt"; |
|
70
|
0
|
0
|
|
|
|
|
open(my $fh, '>>encoding(UTF-8)', $filename) or croak "无法打开文件 $filename 进行写入: $!"; |
|
71
|
0
|
0
|
|
|
|
|
print $fh "$text\n" or croak "写入文件 $filename 失败: $!"; |
|
72
|
0
|
0
|
|
|
|
|
close($fh) or croak "关闭文件句柄 $filename 失败: $!"; |
|
73
|
|
|
|
|
|
|
} |
|
74
|
|
|
|
|
|
|
} |
|
75
|
|
|
|
|
|
|
|
|
76
|
|
|
|
|
|
|
sub write_file { |
|
77
|
0
|
|
|
0
|
1
|
|
my ($self, $config, $name) = @_; |
|
78
|
|
|
|
|
|
|
|
|
79
|
0
|
0
|
|
|
|
|
croak("必须提供非空配置信息") unless !!$config; |
|
80
|
|
|
|
|
|
|
|
|
81
|
0
|
|
|
|
|
|
my $workdir = "$self->{workdir}/$self->{month}/$self->{date}"; |
|
82
|
0
|
0
|
|
|
|
|
make_path($workdir) unless -d $workdir; |
|
83
|
|
|
|
|
|
|
|
|
84
|
0
|
|
|
|
|
|
my $enc = Encode::Guess->guess($config); |
|
85
|
0
|
0
|
|
|
|
|
if (ref($enc)) { |
|
86
|
0
|
|
|
|
|
|
eval { $config = $enc->decode($config); }; |
|
|
0
|
|
|
|
|
|
|
|
87
|
0
|
0
|
|
|
|
|
if (!!$@) { |
|
88
|
0
|
|
|
|
|
|
$self->dump("[write_file] $name 字符串解码失败:$@"); |
|
89
|
|
|
|
|
|
|
} |
|
90
|
|
|
|
|
|
|
} |
|
91
|
|
|
|
|
|
|
else { |
|
92
|
0
|
|
|
|
|
|
$self->dump("[write_file] $name 无法猜测编码: $enc"); |
|
93
|
|
|
|
|
|
|
} |
|
94
|
|
|
|
|
|
|
|
|
95
|
0
|
|
|
|
|
|
my $filename = "$workdir/$name"; |
|
96
|
0
|
|
|
|
|
|
$self->dump("[write_file] 准备将数据写入本地文件: ($workdir/$name)"); |
|
97
|
|
|
|
|
|
|
|
|
98
|
0
|
0
|
|
|
|
|
open(my $fh, '>>:encoding(UTF-8)', $filename) or croak "无法打开文件 $filename 进行写入: $!"; |
|
99
|
0
|
0
|
|
|
|
|
print $fh $config or croak "写入文件 $filename 失败: $!"; |
|
100
|
0
|
0
|
|
|
|
|
close($fh) or croak "关闭文件句柄 $filename 失败: $!"; |
|
101
|
|
|
|
|
|
|
|
|
102
|
0
|
|
|
|
|
|
$self->dump("成功写入文本数据到文件: $filename"); |
|
103
|
|
|
|
|
|
|
|
|
104
|
0
|
|
|
|
|
|
return {success => 1}; |
|
105
|
|
|
|
|
|
|
} |
|
106
|
|
|
|
|
|
|
|
|
107
|
|
|
|
|
|
|
sub _debug_init { |
|
108
|
0
|
|
|
0
|
|
|
my ($msg) = @_; |
|
109
|
0
|
|
|
|
|
|
my $now = `date "+%Y-%m-%d %H:%M:%S"`; |
|
110
|
0
|
|
|
|
|
|
chomp($now); |
|
111
|
0
|
|
|
|
|
|
binmode(STDERR, ':utf8'); |
|
112
|
0
|
|
|
|
|
|
my $text = $now . " - [debug] $msg\n"; |
|
113
|
0
|
0
|
|
|
|
|
print STDERR $text if $ENV{PDK_CONTENT_DEBUG}; |
|
114
|
|
|
|
|
|
|
} |
|
115
|
|
|
|
|
|
|
|
|
116
|
|
|
|
|
|
|
1; |